【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 分钟前
【万字总结】前端全方位性能优化指南(十)——自适应优化系统、遗传算法调参、Service Worker智能降级方案
前端·性能优化·webassembly
黄毛火烧雪下13 分钟前
React Context API 用于在组件树中共享全局状态
前端·javascript·react.js
Apifox24 分钟前
如何在 Apifox 中通过 CLI 运行包含云端数据库连接配置的测试场景
前端·后端·程序员
一张假钞27 分钟前
Firefox默认在新标签页打开收藏栏链接
前端·firefox
高达可以过山车不行27 分钟前
Firefox账号同步书签不一致(火狐浏览器书签同步不一致)
前端·firefox
m0_5937581028 分钟前
firefox 136.0.4版本离线安装MarkDown插件
前端·firefox
掘金一周31 分钟前
金石焕新程 >> 瓜分万元现金大奖征文活动即将回归 | 掘金一周 4.3
前端·人工智能·后端
三翼鸟数字化技术团队1 小时前
Vue自定义指令最佳实践教程
前端·vue.js
小刘爱喇石( ˝ᗢ̈˝ )1 小时前
玛卡巴卡的k8s知识点问答题(六)
云原生·容器·kubernetes
rider1891 小时前
【1】搭建k8s集群系列(二进制部署)之系统初始化
云原生·容器·kubernetes