之前写过一篇 Docker 部署 Web 项目的文章,主要介绍了使用 Dockerfile 和 Docker Compose 构造镜像和启动容器来部署 Web 项目
本篇文章主要对之前的镜像和容器进行优化(减少镜像大小、docker-compose 文件完善等)
📖 服务器目录结构
- 新增 jdk 目录,用来构建 JDK 镜像
- 删除 start.sh 文件
—— root
|—— mall // 根目录
|—— pack
|—— back // 后端
|-- Dockerfile // 构建镜像的文本文件
|-- core-0.0.1-SNAPSHOT.jar
|-- deploy.sh // 用来将 jar 包移动到服务器上的脚本文件
|-- docker-compose.yaml // 启动容器
|—— web // 前端
|-- Dockerfile
|-- dist
|-- deploy.sh // 用来将 dist 文件夹移动到服务器上的脚本文件
|-- docker-compose.yaml // 启动容器
|-- nginx.conf // nginx 配置文件
|—— jdk // jdk 环境
|-- Dockerfile
|-- jdk-17.0.5_linux-x64_bin.tar.gz // JDK
|-- jdk-17.0.5 // jdk-17.0.5_linux-x64_bin.tar.gz 解压后的文件夹
|—— mysql // 数据库(以下三个目录,启动 MySQL 容器时自动创建)
|-- conf
|-- data
|-- logs
🐳 Docker 学习
最近正在系统学习 Docker 的相关知识(看的视频,分享一个配套的学习网站),包括 Docker 的存储、网络、Dockerfile、Docker Conpose、Docker swarm 等知识。学习过程中,不断加深了自己对 Docker 的理解,想着之前使用 Docker 部署过项目,又重新看了当时编写的 Dockerfile 和 docker-compose.yaml 文件,发现还有非常大的优化空间,也可以检验自己的学习情况。
🐳 优化
镜像大小、构建时间优化
之前构建后端项目的 Dockerfile 文件,将项目运行环境和项目启动编写到了一起。每次项目更新重新构建镜像的时候,都要执行一遍 JDK 环境搭建的流程,不仅耗时更长、而且浪费资源。💡 优化思路:拆分 Dockerfile 文件,分别构建 JDK 环境镜像和项目启动镜像
- 构建 JDK 17 镜像
基础镜像更换为 Ubuntu 20.04,相比 Centos 7,镜像体积更小。
- Dockerfile 文件
# 基础镜像
FROM ubuntu:20.04
# 更新软件源
RUN apt-get update
# 安装字体支持
RUN apt-get install -y fontconfig
# 清理缓存
RUN apt-get clean
# 添加JDK17,并解压在/usr/local/jdk
COPY ./jdk-17.0.5 /usr/local/jdk
# 配置jdk17 环境变量
ENV JAVA_HOME /usr/local/jdk
ENV PATH=$JAVA_HOME/bin:$PATH
# 设置系统编码
ENV LANG C.UTF-8
- 构建 JDK 镜像
docker build -t jdk_17.0.5 .
- 拆分后的 Dockerfile 文件(项目启动镜像)
# 基础镜像(上面我们构建的JDK镜像)
FROM jdk_17.0.5
# 添加springboot jar 包 指定别名为 core.jar
ADD core-0.0.1-SNAPSHOT.jar core.jar
EXPOSE 9998
# 启动容器时运行jar包
ENTRYPOINT ["java","-jar","-Duser.timezone=GMT+8","/core.jar"]
🐋 docker-compose.yaml 文件优化
docker-compose.yaml 文件内容(版本调整、新增构建镜像指令、新增网络)
version: '3.3'
services: # 可以指定多个服务
mall: # 这个名字随便起 只要有意义
build:
context: ./ # Dockerfile 文件位置
restart: always # 自动开机启动
image: mall:latest # 镜像名称
container_name: mall # 容器名称
networks:
- mall-network
ports: # 指定端口 可以是多个
- 9998:9998
networks:
mall-network:
每次项目更新,上传 jar 包到本路径下,然后执行 docker-compose up -d --build
命令即可实现项目更新,更加方便使用