1.基础镜像
- 生产环境采用亚马逊的JDK版本,稳定可靠。
- 针对JDK17的JVM相关参数进行设置,根据docker内存限制设置为75%
- Tini是一个用于解决容器进程管理的小工具。它可以作为Docker容器的第一个进程,并负责管理子进程的生命周期。Tini可以解决容器内进程无法正常退出的问题,并提供更好的信号处理机制。
- 解决容器时区问题
- 安装了常用的curl,wget常用工具
- 如果你需要镜像体积更小可将
amazoncorretto:17
替换为amazoncorretto:17-alpine
FROM amazoncorretto:17
LABEL maintainer="louislivi.com"
WORKDIR /home
RUN ln -sf /usr/share/zoneinfo/Asia/Chongqing /etc/localtime
RUN echo 'Asia/Chongqing' >/etc/timezone
RUN yum install -y curl && yum install -y wget && yum install -y telnet && yum install -y procps && yum install -y vim
ENV TINI_VERSION v0.19.0
ADD https://gitee.com/wl4g-k8s/tini/releases/download/${TINI_VERSION}/tini /tini
RUN chmod +x /tini
ENV JAVA_OPTS="\
-XX:+UseG1GC \
-XX:+UnlockDiagnosticVMOptions \
-XX:+UnlockExperimentalVMOptions \
-XX:+UseContainerSupport \
-Dfile.encoding=UTF-8 \
-Djava.security.egd=file:/dev/./urandom \
-XX:MaxRAMPercentage=75 \
-XX:MinRAMPercentage=75 \
-XX:InitialRAMPercentage=75 \
-XX:MaxDirectMemorySize=1024m \
--add-opens=java.base/java.lang=ALL-UNNAMED \
--add-opens java.base/java.lang.invoke=ALL-UNNAMED \
--add-opens=java.base/java.io=ALL-UNNAMED \
--add-opens=java.base/java.math=ALL-UNNAMED \
--add-opens=java.base/java.net=ALL-UNNAMED \
--add-opens=java.base/java.nio=ALL-UNNAMED \
--add-opens=java.base/java.security=ALL-UNNAMED \
--add-opens=java.base/java.text=ALL-UNNAMED \
--add-opens=java.base/java.time=ALL-UNNAMED \
--add-opens=java.base/java.util=ALL-UNNAMED \
--add-opens=java.base/jdk.internal.access=ALL-UNNAMED \
--add-opens=java.base/jdk.internal.misc=ALL-UNNAMED"
ENTRYPOINT ["/tini", "--"]
2.服务镜像
FROM louislivi/jdk:17
LABEL maintainer="louislivi.com"
WORKDIR /home
ADD target/app.jar /home/app.jar
ENV MY_JAVA_OPTS=""
CMD java ${JAVA_OPTS} ${MY_JAVA_OPTS} -jar app.jar --spring.profiles.active=prod