『博客开发日记』项目部署之使用 DockerFile 部署

本文最后更新于 2026年6月20日 晚上

项目部署之使用 DockerFile 部署


前言

前面已经使用普通的方法对项目进行部署

但是这有个缺点是

用到是基础的镜像构建

如果想使用自定义镜像不行了

下面使用 DockerFile 来对项目进行打包成镜像来部署

通过自定义镜像来部署


实现

检查网络环境

在一切开始之前需要检查你当前 docker 内的网络是否为新的网络

因为新镜像的容器如果运行在旧的网络环境(旧网络环境中也有其他容器在运行)中的话就会导致新镜像的容器无法和旧镜像的容器进行网络连接

由于我前面已经使用普通的方法创建过网络并运行过容器

所以我需要对当前运行环境进行清空处理(如果你当前环境是干净的则可以忽略)

亦或者你也可以再后续操作中将你的新容器运行在全新的网络中(注意新网络和新容器的名称不能和旧的相同)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
==== 删除前台后端容器 ====
docker rm -f yun_blog_java

==== 删除后台后端容器 ====
docker rm -f yun_blog_admin_java

==== 删除数据库容器 ====
docker rm -f yun_blog_sql

==== 删除 redis 容器 ====
docker rm -f yun_blog_redis

==== 删除前端 nginx 容器 ====
docker rm -f yun_blog_vue

==== 删除网络 ====
docker network rm blog_network

清空环境后重新创建网络

1
docker network create blog_network

然后部署步骤和上篇文章一样了

运行 mysql 容器

1
2
3
4
5
6
7
8
9
docker run --restart always \
-e TZ=Asia/Shanghai \
--name yun_blog_sql \
-d \
--network blog_network \
-p 3306:3306 \
-v /home/mysql_date:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=your_password \
mysql:8.0

运行 redis 容器

1
2
3
4
5
6
7
docker run --restart always \
--name yun_blog_redis \
-d \
--network blog_network \
-p 6379:6379 \
-v /home/redis_date:/data \
redis redis-server --appendonly yes

前台后端部署

先进入到你服务器保存前台后端 jar 包的根目录

然后创建 dockerFile 文件(文件名自定义)


编辑在文件中编写 dockerFile 指令用于构建自定义镜像

注意这里构建时把敏感信息都放进去了

这其实是不对的

这是作为练习和部署后能看到效果加的

实际中不允许这样做

敏感信息后面会有专门的地方存储

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 指定基础镜像
FROM openjdk:17-jdk
# 指定工作目录
WORKDIR /yun_blog_java/mengze-blog
# 添加前台工程 jar 包
ADD mengze-blog-1.0-SNAPSHOT.jar .
# 声明开放端口
EXPOSE 1314
# 指定容器的运行命令
CMD ["java", "-jar", "mengze-blog-1.0-SNAPSHOT.jar", \
"--spring.datasource.url=jdbc:mysql://yun_blog_sql:3306/yun_blog?characterEncoding=utf8&serverTimezone=Asia/Shanghai", \
"--spring.datasource.username=your_sql_username", \
"--spring.datasource.password=your_sql_password", \
"--spring.redis.host=yun_blog_redis", \
"--spring.mail.username=your_qq_email_username", \
"--spring.mail.password=your_qq_email_key", \
"--oss.accessKey=your_access_key", \
"--oss.secretKey=your_secret_key", \
"--oss.bucket=your_bucket_name", \
"--oss.domain=your_oss_visit_domain", \
"--aliyun.sms.access-key-id=your_access_key_id", \
"--aliyun.sms.access-key-secret=your_access_key_secret", \
"--blog.frontend.url=blog_frontend_url", \
"--weather.api.key-id=your_key_id", \
"--weather.api.project-id=your_project_id", \
"--weather.api.host=your_api_host", \
"--weather.api.private-key=your_weather_private_key", \
"--deepseek.api-key=your_deepseek_api_key" \
]

运行构建镜像指令

运行前要 cd 到你当前 dockerFile 存放的根目录下再运行

1
2
3
docker build -t yun_blog_java:01 -f mengze_blog_java_dockerFile .

# 构建镜像 -t 后面加镜像名 : 后面加版本号 -f 后面加 dockersfile 的文件名 "."标识在当前文件下构建

成功后在镜像列表中就能看到你构建的镜像了


然后在你构建的镜像中运行 容器

由于一些配置已经在 dockerFile 里配置好了 这里只需要直接运行容器就行

上一篇文章有对代码的解释 这里就不解释了

1
2
3
4
5
6
7
docker run --restart always \
-e TZ=Asia/Shanghai \
--name yun_blog_java \
-d \
--network blog_network \
-p 1314:1314 \
yun_blog_java:01

测试容器成功运行


后台后端部署

步骤和前台的差不多

在 jar 所在的根目录下创建 dockerFile 文件并编辑构建命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 指定基础镜像
FROM openjdk:17-jdk
# 指定工作目录
WORKDIR /yun_blog_java/mengze-admin
# 添加前台工程 jar 包
ADD mengze-admin-1.0-SNAPSHOT.jar .
# 声明开放端口
EXPOSE 7616
# 指定容器的运行命令
CMD ["java", "-jar", "mengze-admin-1.0-SNAPSHOT.jar", \
"--spring.datasource.url=jdbc:mysql://yun_blog_sql:3306/yun_blog?characterEncoding=utf8&serverTimezone=Asia/Shanghai", \
"--spring.datasource.username=your_sql_username", \
"--spring.datasource.password=your_sql_password", \
"--spring.redis.host=yun_blog_redis", \
"--spring.mail.username=your_qq_email_username", \
"--spring.mail.password=your_qq_email_key", \
"--oss.accessKey=your_access_key", \
"--oss.secretKey=your_secret_key", \
"--oss.bucket=your_bucket_name", \
"--oss.domain=your_oss_visit_domain", \
"--aliyun.sms.access-key-id=your_access_key_id", \
"--aliyun.sms.access-key-secret=your_access_key_secret", \
"--blog.frontend.url=blog_frontend_url", \
"--weather.api.key-id=your_key_id", \
"--weather.api.project-id=your_project_id", \
"--weather.api.host=your_api_host", \
"--weather.api.private-key=your_weather_private_key", \
"--deepseek.api-key=your_deepseek_api_key" \
]

运行构建镜像指令

运行前要 cd 到你当前 dockerFile 存放的根目录下再运行

1
docker build -t yun_blog_admin_java:01 -f mengze_admin_java_dockerFile .

运行 后台后端 容器

要注意端口号和容器名

1
2
3
4
5
6
7
docker run --restart always \
-e TZ=Asia/Shanghai \
--name yun_blog_admin_java \
-d \
--network blog_network \
-p 7616:7616 \
yun_admin_java:01

成功构建镜像并成功运行容器


前端部署

找到 前台和后台前端项目 所在的根目录下创建 dockerFile 文件


在 dockerFile 里编辑构建命令

由于是在当前文件夹下运行的所以下面复制使用相对目录就行了

关于 nginx 配置文件如何配置在 『博客开发日记』之关于项目的部署 中有写

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 指定基础镜像
FROM nginx
# 指定工作目录
WORKDIR /home/yun_blog_vue

# 复制博客前端文件
COPY ./blog/dist /usr/share/nginx/html/blog
# 复制管理后台前端文件
COPY ./admin/dist /usr/share/nginx/html/admin
# 复制 nginx 配置文件
COPY ./nginx/conf.d /etc/nginx/conf.d

# 暴露端口
EXPOSE 80

运行构建镜像指令

运行前要 cd 到你当前 dockerFile 存放的根目录下再运行

1
docker build -t yun_blog_vue:01 -f yun_blog_vue_dockerFile .

运行镜像中的容器

1
2
3
4
5
docker run --restart always \
--name yun_blog_vue \
-d \
-p 80:80 \
yun_blog_vue:01

查看容器是否运行


浏览器上观察也运行正常


至此 dockerFile 版的项目部署已经完成

但是还有一些敏感信息要解决 后面再讲


支线——将构建的镜像推送到 Docker Hub

前面我们已经构建了自定义的镜像

为了方便我们随拿随用

我们可以把自己做的镜像推送到 Docker Hub 上

由于我们上面构建的镜像含有敏感信息

所以我们在 Docker Hub 上构建一个属于自己的私有仓库


现在终端中登录到 Docker Hub 中

1
docker login

分别构建镜像 这里就不演示了

1
2
docker build -t username/镜像名:tag
# username是DockerHub的用户名

给镜像打上标签

1
docker tag username/镜像名:tag username/镜像名:tag

推送镜像

1
docker push username/镜像名:tag




PS:该系列只做为作者学习开发项目做的笔记用

不一定符合读者来学习,仅供参考


预告

后续会记录博客的开发过程

每次学习会做一份笔记来进行发表

“一花一世界,一叶一菩提”


版权所有 © 2026 云梦泽
欢迎访问我的个人网站:https://hgt12.github.io/


『博客开发日记』项目部署之使用 DockerFile 部署
http://example.com/2026/06/18/『博客开发日记』项目部署之使用 DockerFile 部署/
作者
云梦泽
发布于
2026年6月18日
更新于
2026年6月20日
许可协议