本文最后更新于 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
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 .
|
成功后在镜像列表中就能看到你构建的镜像了
然后在你构建的镜像中运行 容器
由于一些配置已经在 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
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
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 2
| docker build -t username/镜像名:tag
|
给镜像打上标签
1
| docker tag username/镜像名:tag username/镜像名:tag
|
推送镜像
1
| docker push username/镜像名:tag
|
PS:该系列只做为作者学习开发项目做的笔记用
不一定符合读者来学习,仅供参考
预告
后续会记录博客的开发过程
每次学习会做一份笔记来进行发表
“一花一世界,一叶一菩提”
版权所有 © 2026 云梦泽
欢迎访问我的个人网站:https://hgt12.github.io/