一、前提
  • 环境:服务器已安装 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 包、配置),实现 “一次打包,到处运行”。
(二)编写方法
  1. 文件名必须为Dockerfile(首字母大写,无后缀,若命名为其他需用-f指定);
  2. 指令关键字大写(如FROMCOPYCMD),便于区分指令和参数;
  3. 注释用#开头;
  4. FROM指令必须放在第一行;
  5. WORKDIR指定工作目录,后续指令(COPYCMD)均基于此;
  6. 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"]
四、构建镜像和启动容器
(一)构建自定义镜像
  1. 进入项目根目录(Dockerfile 所在目录):
    cd /opt/springboot-project
    
  2. 执行构建命令:
    docker build -t test-springboot:v1 .
    
    • 核心参数说明:
      • -t test-springboot:v1:给镜像打标签(名称:版本),便于后续管理(避免镜像 ID 乱码);
      • .:指定 Dockerfile 所在路径.表示当前目录,不可省)
  3. 构建过程:Docker 会逐行执行 Dockerfile 指令,下载基础镜像(若本地没有)、拷贝文件、生成镜像层,最后输出 “Successfully built 镜像 ID” 表示成功;
  4. 验证镜像:
    docker images  # 查看本地镜像
    
    输出中会显示test-springboot,版本v1,镜像 ID,大小等信息。
(二)启动容器2.0
  • 基础启动(后台运行 + 端口映射):
docker run -d -p 8080:8080 --name springboot-app test-spring

更多推荐