You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

37 lines
3.4 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 指定了使用openjdk:8u332-jre-slim-bullseye镜像作为基础镜像并且给这个镜像起了一个别名runner
FROM openjdk:8u332-jre-slim-bullseye AS runner
# WORKDIR指令用于设置容器内部的工作目录即后续指令执行时的当前目录。当Docker容器启动并执行命令时这些命令将在WORKDIR指定的目录中执行。
WORKDIR /root
# ENV TZ这样的用法通常是用来设置时区环境变量TZ代表Time Zone
ENV TZ=Asia/Shanghai
# 将target文件夹下的jar包gw-charge.jar复制到容器的/root目录下
COPY ./target/gw-charge.jar /root/gw-charge.jar
# 每个参数的含义:
#-server选择服务器server模式这是JVM的高性能模式。
#-XX:+UnlockExperimentalVMOptions启用JVM中的实验性选项。
#-XX:+UseCGroupMemoryLimitForHeap让JVM堆内存大小限制与cgroups的内存限制一致。cgroups是一种Linux内核特性用于限制进程组使用的资源。
#-XX:MaxRAMFraction=1设置JVM可以使用的最大堆内存占系统总内存的比例为100%。
#设置这个环境变量后您可以在Docker容器中启动Java应用程序时使用这些参数。
ENV JAVA_OPTS="-server -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -XX:MaxRAMFraction=1 "
# 这行指令设置了名为ENV_OPTS的环境变量其值是一个用于Spring应用程序的命令行参数用来激活名为test的配置文件。
# 这个参数通常在启动Spring应用程序时使用以确保应用程序加载正确的配置。
# Spring Boot会根据以下优先级顺序来确定激活的配置文件
#命令行参数:使用-Dspring.profiles.active=...指定的配置文件具有最高的优先级。
#环境变量如果设置了SPRING_PROFILES_ACTIVE环境变量它将覆盖配置文件中的设置。
#配置文件中的spring.profiles.active在application.properties或bootstrap.properties以及对应的YAML格式中设置的spring.profiles.active具有较低的优先级。
#在您提供的情况中通过ENV指令设置的环境变量ENV_OPTS包含了-Dspring.profiles.active=test这意味着在启动Java应用程序时将通过命令行参数指定test配置文件为激活配置。因此即使bootstrap.yml文件中设置了profiles: active: dev应用程序最终将使用test配置文件因为命令行参数的优先级高于配置文件中的设置。
#所以最终JAR包执行时将使用test配置文件。
ENV ENV_OPTS="-Dspring.profiles.active=dev"
#ENV ENV_OPTS="-Dspring.profiles.active=pro"
# sh -c这告诉Docker容器使用shShell来执行后面的命令字符串。-c参数表示后面跟着的是要执行的命令。
#java $JAVA_OPTS $ENV_OPTS ...这是要执行的Java命令其中$JAVA_OPTS和$ENV_OPTS是之前通过ENV指令设置的环境变量它们将在运行时被替换为它们各自的值。
#-Djava.security.egd=file:/dev/./urandom这是一个Java系统属性用于设置Java加密图形设备EGD的路径。这里指定为/dev/./urandom这是一个提供高熵随机数的Unix特殊文件常用于加密操作。
#-jar /root/gw-charge.jar这指定了要执行的Java归档文件JAR的位置和名称。这里假设JAR文件位于容器的/root目录下名为gw-charge.jar。
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS $ENV_OPTS -Djava.security.egd=file:/dev/./urandom -jar /root/gw-charge.jar" ]