一、使用Dockerfile构建镜像
FROM ubuntu:24.04
ENV DEBIAN_FRONTEND=noninteractive
ARG TZ=Asia/Shanghai RUN apt-get update && \ apt-get install -y --no-install-recommends \ ca-certificates \ p11-kit \ tzdata && \ ln -fs /usr/share/zoneinfo/${TZ} /etc/localtime && \ echo "${TZ}" > /etc/timezone && \ dpkg-reconfigure --frontend noninteractive tzdata && \ rm -rf /var/lib/apt/lists/*
ENV JAVA_HOME=/usr/local/openjdk-21 ENV PATH=$JAVA_HOME/bin:$PATH ENV LANG=C.UTF-8
ENV TZ=${TZ}
ENV JAVA_TOOL_OPTIONS="-Xmx1024M -Xms256M"
COPY jdk-21_linux-x64_bin.tar.gz /tmp/openjdk.tgz
RUN set -eux; \ mkdir -p "$JAVA_HOME"; \ tar --extract \ --file /tmp/openjdk.tgz \ --directory "$JAVA_HOME" \ --strip-components 1 \ --no-same-owner; \ rm /tmp/openjdk.tgz; \ rm -f "$JAVA_HOME/lib/src.zip"; \ rm -rf "$JAVA_HOME/demo" "$JAVA_HOME/sample" "$JAVA_HOME/man"; \ { \ echo '#!/usr/bin/env bash'; \ echo 'set -Eeuo pipefail'; \ echo 'trust extract --overwrite --format=java-cacerts --filter=ca-anchors --purpose=server-auth "$JAVA_HOME/lib/security/cacerts"'; \ } > /etc/ca-certificates/update.d/docker-openjdk; \ chmod +x /etc/ca-certificates/update.d/docker-openjdk; \ /etc/ca-certificates/update.d/docker-openjdk; \ find "$JAVA_HOME/lib" -name '*.so' -exec dirname '{}' ';' | sort -u > /etc/ld.so.conf.d/docker-openjdk.conf; \ ldconfig; \ java -Xshare:dump; \ javac --version; \ java --version
WORKDIR /app
ENTRYPOINT ["java", "-jar"] CMD ["/app/app.jar"]
|
docker build -t moshangjunmowen/jdk:v17.0.18 .
|
二、镜像使用
基础:
docker run -d -p 8450:1024 -v $(pwd)/jun-admin-dev-3.0.0.jar:/app/app.jar moshangjunmowen/jdk:v17.0.18
|
若想更改时区:
docker run -d -e TZ=UTC -p 8450:1024 -v $(pwd)/jun-admin-dev-3.0.0.jar:/app/app.jar moshangjunmowen/jdk:v17.0.18
|
如果需要自定义端口(例如应用监听 8081,映射到宿主机 9090)
docker run --rm -p 9090:8081 \ -v $(pwd)/jun-admin-dev-3.0.0.jar:/app/app.jar \ jdk17-ubuntu --server.port=8081
|
如果需要传递其他 JVM 参数或应用参数
直接在镜像名后面添加即可,例如设置 JVM 内存:
docker run --rm -p 8080:8080 \ -v $(pwd)/jun-admin-dev-3.0.0.jar:/app/app.jar \ jdk17-ubuntu -Xmx512m --server.port=8080
|