Docker 构建通用 Java 程序运行镜像

本文介绍如何使用 Docker 构建通用 Java 程序运行容器

个人项目部署 Docker 时,为避免每次升级都重新构建一个新容器,可以参考本文方式构建一个通用的 Java 运行镜像。

构建通用镜像

本文以 Java 21 JRE 为例。使用 eclipse-temurin:21-jre 作为基础镜像

Dockerfile

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
FROM eclipse-temurin:21-jre

LABEL maintainer="tofuwine@tofuwine.cn"
ENV TZ=Asia/Shanghai

WORKDIR /app

EXPOSE 8080

RUN echo '#!/bin/sh' > /entrypoint.sh \
&& echo 'if [ -n "$JAR_NAME" ]; then' >> /entrypoint.sh \
&& echo '  JAR_FILE="/app/$JAR_NAME"' >> /entrypoint.sh \
&& echo 'else' >> /entrypoint.sh \
&& echo '  JAR_FILE=$(ls /app/*.jar 2>/dev/null | head -1)' >> /entrypoint.sh \
&& echo 'fi' >> /entrypoint.sh \
&& echo 'if [ ! -f "$JAR_FILE" ]; then echo "ERROR jar $JAR_FILE not exists"; exit 1; fi' >> /entrypoint.sh \
&& echo 'echo "Starting jar: $JAR_FILE"' >> /entrypoint.sh \
&& echo 'exec java ${JAVA_OPTS} -jar "$JAR_FILE"' >> /entrypoint.sh \
&& chmod +x /entrypoint.sh

ENV JAVA_OPTS="-Xms256m -Xmx512m"

ENTRYPOINT ["/entrypoint.sh"]

配置说明:

  • 基础镜像 21-jre:如需其他版本可替换。例如:21-jdk
  • 暴露端口为 8080。注意 Java 程序,如 Spring Boot 需配置端口为 8080,或修改暴露端口

构建指令

在 Dockerfile 所在目录执行如下指令:

1
docker buildx build --no-cache --output type=docker,dest=generic-java-run.tar -t tofuwine/generic-java-run:21-jre .

指令说明:

  • 指令最后一个 . 别落下。
  • --no-cache 禁用缓存,可忽略
  • --output type=docker,dest=generic-java-run.tar 输出为 tar 文件,可以方便导入到其他地方(如 Nas Docker 等)

使用说明

参考如下 docker-compose.yml 部署 Java 程序:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
version: '3.9'

services:
  myapp:
    image: tofuwine/generic-java-run:21-jre
    container_name: myapp
    hostname: myapp
    restart: unless-stopped
    ports:
      - "8080:8080"
    volumes:
      - /docker/myapp:/app
    environment:
#      JAR_NAME: myapp.jar  # 当多个 jar 文件时,可指定 jar 文件名。如果只有一个 jar 文件,可忽略此参数。
      JAVA_OPTS: >-
        -Xms512m
        -Xmx1024m
        -XX:+UseG1GC
        -XX:+HeapDumpOnOutOfMemoryError
        -Dspring.profiles.active=prod

打包内容全部放到 /docker/myapp 目录下,即可启动。后续只需要替换该目录内容即可。

如果本文对您有所帮助,欢迎打赏支持作者!

Licensed under CC BY-NC-SA 4.0
最后更新于 2026-08-15 11:21
使用 Hugo 构建
主题 StackJimmy 设计