使用 Dockerfile 打包并启动 Java 程序
·
一、前提
- 环境:服务器已安装 Docker(安装步骤:
yum install -y docker-ce,启动:systemctl start docker,设开机自启:systemctl enable docker); - 程序:Spring Boot 项目打包后的 Jar 包(如
test-springboot.jar,需本地先执行java -jar test-springboot.jar验证可正常运行); - 镜像:JDK 基础镜像(推荐
openjdk:8,无网环境可提前下载离线镜像:docker pull openjdk:8,导出:docker save -o openjdk8.tar openjdk:8,服务器导入:docker load -i openjdk8.tar)。
二、Dockerfile 原理和编写方式
(一)原理
Dockerfile 是一个文本文件,包含一系列指令,Docker 通过这些指令构建自定义镜像:
- 指令自上而下执行,每层指令生成一个镜像层;
- 最后镜像包含 Java 程序运行所需的所有环境(JDK、Jar 包、配置),实现 “一次打包,到处运行”。
(二)编写方法
- 文件名必须为
Dockerfile(首字母大写,无后缀,若命名为其他需用-f指定); - 指令关键字大写(如
FROM、COPY、CMD),便于区分指令和参数; - 注释用
#开头; FROM指令必须放在第一行;WORKDIR指定工作目录,后续指令(COPY、CMD)均基于此;CMD指令仅能有一个(如果有多个则最后一个生效,指定容器启动命令)。
三、Dockerfile 完整编写(Spring Boot 示例)
(一)目录结构规划
/opt/
└── springboot-project/ # 项目根目录
├── Dockerfile # 编写的Dockerfile
└── test-springboot.jar # Spring Boot Jar包
- 建议把 Dockerfile 和 Jar 包放在同一目录,简化路径配置。
(二)Dockerfile 指令解释
# 1. 指定基础镜像(必须第一行,Java 8项目用openjdk:8)
# 若需指定镜像版本,格式:FROM 镜像名:版本
FROM openjdk:8
# 2. 创建并指定容器内工作目录
# 若目录不存在,Docker会自动创建
WORKDIR /app
# 3. 拷贝宿主机文件到容器(!!!!!!)
# 格式:COPY 宿主机路径 容器内路径
# 此处将宿主机当前目录(Dockerfile所在目录)的Jar包拷贝到容器/app目录
COPY test-springboot.jar /app/test-springboot.jar
# 4. 容器启动命令(指定如何运行Jar包)
# 格式:CMD ["命令", "参数1", "参数2"...]
CMD ["sh", "-c", "java ${JAVA_OPTS} -jar test-springboot.jar"]
四、构建镜像和启动容器
(一)构建自定义镜像
- 进入项目根目录(Dockerfile 所在目录):
cd /opt/springboot-project - 执行构建命令:
docker build -t test-springboot:v1 .- 核心参数说明:
-t test-springboot:v1:给镜像打标签(名称:版本),便于后续管理(避免镜像 ID 乱码);.:指定 Dockerfile 所在路径(.表示当前目录,不可省);
- 核心参数说明:
- 构建过程:Docker 会逐行执行 Dockerfile 指令,下载基础镜像(若本地没有)、拷贝文件、生成镜像层,最后输出 “Successfully built 镜像 ID” 表示成功;
- 验证镜像:
输出中会显示docker images # 查看本地镜像test-springboot,版本v1,镜像 ID,大小等信息。
(二)启动容器2.0
- 基础启动(后台运行 + 端口映射):
docker run -d -p 8080:8080 --name springboot-app test-spring
更多推荐
所有评论(0)