一、为什么使用 Docker 部署应用程序?
传统部署方式通常比较复杂,部署应用程序时需要手动配置运行环境,例如:
- 安装对应版本的 JDK
- 配置环境变量
- 安装 Maven 等构建工具
- 处理不同服务器之间的环境差异
如果使用 Docker,可以实现“构建一次镜像,到处运行”,将应用程序运行环境一起打包,避免繁琐的手工配置,提高部署效率和环境一致性。
二、Docker 基本概念
1. Docker 镜像(Image)
Docker 镜像是应用程序的静态文件,类似于应用程序的安装包。
通常通过 Dockerfile 文件构建生成,例如:
docker build -t spring-application .
2. Docker 容器(Container)
Docker 容器是镜像运行后的实例,是应用程序真正运行的地方。
可以简单理解为:
- 镜像:相当于食谱,描述了如何制作菜肴。
- 容器:相当于根据食谱制作出来的菜肴,是实际运行的实例。
3. Docker 仓库(Registries)
Docker 仓库是存储 Docker 镜像的地方,如 Docker Hub,你可以从Docker Hub下载别人制作好的镜像供自己使用,也可以上传自己制作的镜像到Docker Hub供他人下载使用。
如果想要私有化Docker仓库,可以使用Harbor来实现私有化部署,部署后可以存储和使用自己内部制作的Docker镜像。
三、Docker 常用基础命令
1. 构建 Docker 镜像
在存放 Dockerfile 的目录下,执行以下命令构建 Docker 镜像:
docker build -t spring-application .
2. 查看 Docker 镜像信息
docker images
3. 运行 Docker 容器
docker run -d -p 8080:8080 spring-application
4. 查看运行中的容器信息
docker ps
5. 停止 Docker 容器
docker stop [container id]
6. 查看未运行的 Docker 容器
docker ps -a
7. 删除 Docker 容器
docker rm [container id]
8. 清除 Docker 构建缓存
docker builder prune
四、Dockerfile 文件解析
下面以一个 Spring Boot 项目为例,介绍 Dockerfile 文件中的常用配置。
1. 指定基础镜像
# 第一阶段负责使用一个带有 Maven 3.9 和 JDK 21 的 Linux 环境来编译 jar 包
FROM maven:3.9-eclipse-temurin-21 AS builder
这里使用 Maven + JDK 21 的基础镜像作为构建环境,并命名当前阶段为 builder。
2. 设置工作目录
# 将 Docker 容器内的工作目录设置为 /build,并切换到 build 目录
# 类似 Linux 中执行 cd /build
WORKDIR /build
3. 复制项目源码
# 复制项目源码和资源文件
# 从宿主机当前目录复制到 Docker 容器内的 /build 目录
# 如果存在 .dockerignore 文件,会排除其中指定的内容
COPY . .
4. 使用 Maven 编译项目
# 使用 Java 21 编译所有依赖模块,并生成 admin/target/admin.jar
RUN mvn -B -ntp -pl admin -am clean package -DskipTests
该命令会执行 Maven 构建流程:
- clean:清理之前的构建文件
- package:执行项目编译并生成 jar 包
- -pl admin:指定构建 admin 模块
- -am:同时构建 admin 依赖的其他模块
- -DskipTests:跳过测试,提高构建速度

Comments NOTHING