main
黄海 12 months ago
parent c72fea45ee
commit ea128635ee

@ -26,8 +26,8 @@ ENV JAVA_OPTS="-server -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimi
#配置文件中的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=test"
ENV ENV_OPTS="-Dspring.profiles.active=pro"
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指令设置的环境变量它们将在运行时被替换为它们各自的值。

@ -84,14 +84,22 @@ docker pull tomcat:9.0 # 下载9.0版本的Tomcat
docker pull tomcat:8.0 # 下载8.0版本的Tomcat
```
#### 查看已经下载到机器里的$Tomcat$镜像
#### 查看镜像
```
docker images|grep tomcat
docker images
```
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/202408070750107.png)
#### 删除镜像
```
docker rmi -f <IMAGE_NAME_OR_ID>
```
#### 运行$Tomcat$容器
```
@ -201,3 +209,123 @@ docker cp openjdk1.8:/usr/local/1.txt ./
docker cp ./1.txt openjdk1.8:/usr/local/
```
### 四、使用$Dockerfile$创建镜像
> dockerfile 内容如下:
```
# 指定了使用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=test"
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" ]
```
```
mkdir /usr/local/publish
cd /usr/local/publish
yum install lrzsz -y
rz -be
选择D:\dsWork\YltProject\Ylt\gw-charge\Dockerfile文件后上传
```
将$Java$的微服务项目打包:
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/202408070818789.png)
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/202408070818135.png)
```
cd /usr/local/publish
mkdir target
cd target
rz -be
选择D:\dsWork\YltProject\Ylt\gw-charge\target\gw-charge.jar
cd ..
docker build -t gw-charge .
```
这里 `-t gw-charge` 为新创建的镜像指定了一个标签($tag$`.` 表示 $Dockerfile$ 在当前目录。
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/202408070821632.png)
生成结束:
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/202408070821581.png)
##### 查看本地是不是多了一个镜像
```
docker images
```
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/202408070823604.png)
**运行容器**:一旦镜像构建完成,您可以使用 `docker run` 命令从该镜像启动一个新容器。
```
docker run -d -p 7001:7001 gw-charge
```
`-d` 参数表示在后台运行容器,`-p 7001:7001` 表示将容器内部的 $7001$ 端口映射到宿主机的 $7001$ 端口。
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/202408070824703.png)
#### 查看正在运行的容器
```
docker ps
```
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/202408070827585.png)
#### 查看$Docker$日志
```
docker logs c128a94e5884
```
发现是将发布的版本设置为Pro导致与实际环境不符修改回$Dev$,重新生成镜像尝试:
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/202408070839957.png)

Loading…
Cancel
Save