【Docker】让前端也能用Docker部署,以ruoyi(若依)为例,极简部署流程

首先感谢掘金大佬的文章

本文主要以ruoyi为例,让开发者极简体验vue项目docker化,主要流程如下:

  1. 通过nginx代理,让前端接口的请求转发到nodeserver容器上 实现nginx代理转发
  2. 以ruoyi为例,打包ruoyi项目,生成dist文件夹,编写Dockerfile文件,通过docker打包生成一个前端镜像,然后通过这个前端镜像实例化启动一个前端容器 实现前端项目部署。

Docker基本概念如下:

镜像(Image): Docker 镜像是一个只读的模板,可以理解为是一种存储形式,可以理解为数据或应用的副本。

容器(Container): 容器是镜像的运行实例,可以被启动、停止、删除 , 是运行在虚拟机上的进程。

仓库(Repository): 用来存储和分发 Docker 镜像的。

主要就是就是,通过Dockerfile生成镜像或者从Dockerhub中获取镜像 然后去创建容器,最后让程序跑在容器上。

Ruoyi代码下载

  1. RuoYi-Vue

Docker安装

下载并安装 Docker Desktop

操作完可通过 docker --version验证成功与否

Docker Desktop 国内镜像源设置

Docker换源加速(更换镜像源)详细教程(2025.2最新可用镜像,全网最详细)

截止2025.2.6,下列镜像源均可用。(基于能否成功拉取hello-world进行测试)

DockerHub可用镜像源汇总:

docker.m.daocloud.io

docker.imgdb.de

docker-0.unsee.tech

docker.hlmirror.com

docker.1ms.run

func.ink

lispy.org

docker.xiaogenban1993.com

这里要注意,如果国内镜像源不设置,很可能导致各种Docker hub下载失败的情形。

javascript 复制代码
  "registry-mirrors": [
    "https://docker.imgdb.de",
    "https://registry.hub.docker.com",
    "http://hub-mirror.c.163.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://registry.docker-cn.com"
  ]

尝试nginx运行

这里先尝试一下 nginx服务器的docker化运行:

javascript 复制代码
docker run -d -p 80:80 --name webserver nginx

输入http://localhost/,如果看到下图,就说明成功了

暂停可通过如下命令:

javascript 复制代码
docker stop webserver 
docker rm webserver

这里需要注意,一定要在执行stop后,接着执行rm,否则下次再执行 docker run -d -p 80:80 --name webserver nginx会报错。

以ruoyi为例,容器化一个镜像,并尝试启动

按照开文所述,我们其实是把ruoyi的静态资源跟nodejs,打包成一个完整的镜像(Image),然后在容器(Container)中运行,保证所以拉取镜像的个体,都能顺利运行

在项目的根目录建立三个文件,如图所示:

其中 dockerfile配置了docker的构建信息

dockerfile

javascript 复制代码
# 使用 Node.js 16 作为基础镜像
FROM node:16.19.1

# 将当前工作目录设置为/app
WORKDIR /app

# 将 package.json 和 package-lock.json 复制到 /app 目录下
COPY package*.json ./

# 运行 npm install 安装cnpm 再通过cnpm安装依赖 
RUN yarn install

# 将源代码复制到 /app 目录下
COPY . .

# 打包构建
RUN npm run build:prod

# 将构建后的代码复制到 nginx 镜像中
FROM nginx:latest
COPY --from=0 /app/dist /usr/share/nginx/html

# 复制自定义的Nginx配置到镜像中,覆盖默认配置
COPY nginx/default.conf /etc/nginx/conf.d/default.conf

EXPOSE 80

# 启动 nginx 服务
CMD ["nginx", "-g", "daemon off;"]

dockerignore

javascript 复制代码
.DS_Store
node_modules
/dist


# local env files
.env.local
.env.*.local

# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*

# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
dist.zip

nginx/default.conf

javascript 复制代码
server {
    listen 80;   # 端口号是80
    server_name localhost;
    
    location / {
        root   /usr/share/nginx/html;  # nginx 默认会从这个路径下加载网页,这是 nginx 默认的网页根目录
        index  index.html index.htm;
    }

    error_page  404              /404.html;  # 错误404处理
    error_page  500 502 503 504  /50x.html;  # 错误5XX处理

    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

执行docker命令,打包工程

打包前,记得将ruoyi的生产打包路径修改为 https://vue.ruoyi.vip/prod-api,否则,打包完启动会报错,因为后端无法连接

javascript 复制代码
docker build -t ruoyi-admin:v1 .

docker build -t 后面的docker镜像名可以自己随意取,:v1是用于做标记的标签。

打包中,如果报错可以查看镜像源设置是否有误,大概率是类似failed to resolve source metadata for docker.io/library/node:16.19.1这种报错,其实就是国内镜像源失效,从docker hub拉取,但是受限网络导致失败。

打包完成

运行

javascript 复制代码
docker run -d -p 3030:80 --name ruoyi-admin-web ruoyi-admin:v1

这代表我们将本电脑的3030端口,映射到了容器的80端口,就可以进行访问了
http://localhost:3030/

也可以通过命令 docker ps,查看端口占用情况。

效果如下:

关闭当前端口容器,指令如下:

js 复制代码
docker stop ruoyi-admin-web
docker rm ruoyi-admin-web

完结撒花!

相关推荐
阿珊和她的猫6 分钟前
Axios 的原理
前端·javascript
新玉54011 小时前
xss闯关
前端·javascript·xss
Мартин.1 小时前
[Meachines] [Easy] Stocker NOSQLI+PDF-XSS-LFI+*通配符Bypass权限提升
前端·pdf·xss
阿珊和她的猫2 小时前
Axios 拦截器实现的原理
前端·javascript
❀͜͡傀儡师4 小时前
使用docker搭建FastDFS文件服务
运维·docker·容器
yaoxtao4 小时前
Docker的容器
docker
CsbLanca5 小时前
本地部署【LLM-deepseek】大模型 ollama+deepseek/conda(python)+openwebui/docker+openwebui
python·docker·conda
Anlici7 小时前
还只会express?今儿使用Koa2 实现 Jwt鉴权
前端·koa
zhenryx7 小时前
前端-导出png,jpg,pptx,svg
开发语言·前端·javascript