|
|
|
|
|
|
|
|
|
|
|
|
|
|
# $Docker$使用方法
|
|
|
|
|
|
|
|
|
|
### 一、安装
|
|
|
|
|
|
|
|
|
|
#### 1、脚本安装
|
|
|
|
|
|
|
|
|
|
```shell
|
|
|
|
|
yum install -y yum-utils
|
|
|
|
|
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
|
|
|
|
|
yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
#### 2、配置镜像源
|
|
|
|
|
|
|
|
|
|
> 因为 “**未知**” 的原因,造成国内的$Docker$源全部失效,只好使用老毛子的$Docker$源,科学无国界~
|
|
|
|
|
|
|
|
|
|
```shell
|
|
|
|
|
mkdir -p /etc/docker
|
|
|
|
|
|
|
|
|
|
tee /etc/docker/daemon.json <<EOF
|
|
|
|
|
{
|
|
|
|
|
"registry-mirrors": [
|
|
|
|
|
"https://docker.m.daocloud.io",
|
|
|
|
|
"https://huecker.io",
|
|
|
|
|
"https://dockerhub.timeweb.cloud",
|
|
|
|
|
"https://noohub.ru"
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
EOF
|
|
|
|
|
|
|
|
|
|
systemctl daemon-reload
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
#### 3、常用命令
|
|
|
|
|
|
|
|
|
|
```shell
|
|
|
|
|
# 启动Docker
|
|
|
|
|
systemctl start docker
|
|
|
|
|
# 卸载Docker
|
|
|
|
|
yum remove docker-ce
|
|
|
|
|
# 删除镜像、容器、配置文件等内容
|
|
|
|
|
rm -rf /var/lib/docker
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 二、镜像
|
|
|
|
|
|
|
|
|
|
**查看可用版本**
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
docker search tomcat
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
**下载$Tomcat$镜像**
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
docker pull tomcat # 下载最新版本的Tomcat
|
|
|
|
|
|
|
|
|
|
docker pull tomcat:9.0 # 下载9.0版本的Tomcat
|
|
|
|
|
|
|
|
|
|
docker pull tomcat:8.0 # 下载8.0版本的Tomcat
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
**查看本地镜像**
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
docker images
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
**删除本地下载好的镜像**
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
docker rmi -f <IMAGE_NAME_OR_ID>
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 三、容器
|
|
|
|
|
|
|
|
|
|
#### 1、运行容器
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
docker run --name tomcat -p 8080:8080 -v $PWD/test:/usr/local/tomcat/webapps/test -d tomcat
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
**命令说明**:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
-p 8080:8080:将主机的 8080 端口映射到容器的 8080 端口
|
|
|
|
|
-v $PWD/test:/usr/local/tomcat/webapps/test: 将主机中当前目录下的 test 挂载到容器的 /test
|
|
|
|
|
-d:这个参数表示以“detached”模式运行容器,即在后台运行。
|
|
|
|
|
tomcat:这是要运行的 Docker 镜像的名称。在这个命令中,它假定您已经有了一个名为 tomcat 的本地镜像,或者 Docker 将尝试从 Docker Hub 拉取一个名为 tomcat 的公共镜像。
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
#### 2、查看容器
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
docker ps
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
#### 3、删除容器
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
docker rm -f 4bf2bd13f5b0
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
#### 4、进入容器
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
docker exec -it 4bf2bd13f5b0 /bin/bash
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
#### 5、将文件复制到容器外
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
docker cp 4bf2bd13f5b0:/usr/local/1.txt ./
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
#### 6、将文件复制回容器
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
docker cp ./1.txt 4bf2bd13f5b0:/usr/local/
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 四、使用$Dockerfile$创建镜像
|
|
|
|
|
|
|
|
|
|
> $dockerfile$ 内容如下:
|
|
|
|
|
|
|
|
|
|
```shell
|
|
|
|
|
# 指定了使用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容器使用sh(Shell)来执行后面的命令字符串。-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$的微服务项目打包:
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
#### 继续打包
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
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$ 在当前目录。
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
生成结束:
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
##### 本地多了一个镜像
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
docker images
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
**运行容器**:一旦镜像构建完成,您可以使用 `docker run` 命令从该镜像启动一个新容器。
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
docker run -d -p 7001:7001 gw-charge
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
`-d` 参数表示在后台运行容器,`-p 7001:7001` 表示将容器内部的 $7001$ 端口映射到宿主机的 $7001$ 端口。
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
#### 查看容器
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
docker ps -a
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### 查看日志
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
docker logs c128a94e5884
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### 查看启动界面
|
|
|
|
|
|
|
|
|
|
http://10.10.14.212:7001
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
### 五、未来可能的操作
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
# 拷贝出来做备份
|
|
|
|
|
docker cp b30008f6e67d:/root/gw-charge.jar ./gw-charge-backup.jar
|
|
|
|
|
|
|
|
|
|
# 拷贝回去
|
|
|
|
|
docker cp ./gw-charge.jar b30008f6e67d:/root
|
|
|
|
|
|
|
|
|
|
#重启Docker
|
|
|
|
|
docker restart b30008f6e67d
|
|
|
|
|
|
|
|
|
|
# 查看
|
|
|
|
|
docker ps
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
#### 查看容器的启动脚本(或命令)
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
docker inspect --format '{{.Config.Entrypoint}}' b30008f6e67d
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
结果:
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
[sh -c java $JAVA_OPTS $ENV_OPTS -Djava.security.egd=file:/dev/./urandom -jar /root/gw-charge.jar]
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$Q$: \$$JAVA\_OPTS$ \$$ENV\_OPTS$中什么东西呢?
|
|
|
|
|
办法:
|
|
|
|
|
|
|
|
|
|
##### 1、进入容器
|
|
|
|
|
|
|
|
|
|
```shell
|
|
|
|
|
docker exec -it b30008f6e67d /bin/bash
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
##### 2、查看环境变量
|
|
|
|
|
|
|
|
|
|
```shell
|
|
|
|
|
root@b30008f6e67d:~# echo $ENV_OPTS
|
|
|
|
|
-Dspring.profiles.active=dev
|
|
|
|
|
|
|
|
|
|
root@b30008f6e67d:~# echo $JAVA_OPTS
|
|
|
|
|
-server -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -XX:MaxRAMFraction=1
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### 安装$OpenJDK 21$
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
docker pull openjdk:21
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
**删除镜像**
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
docker rmi -f 079114de2be1
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 六、实测阿里云容器服务
|
|
|
|
|
|
|
|
|
|
> **参考文档**:[使用个人版实例推送拉取Docker镜像_容器镜像服务(ACR)](https://help.aliyun.com/zh/acr/user-guide/use-a-container-registry-personal-edition-instance-to-push-and-pull-images?spm=a2c4g.11186623.0.0.631a1ecdldRK92)
|
|
|
|
|
|
|
|
|
|
```shell
|
|
|
|
|
docker login --username=东师黄海 registry.cn-hangzhou.aliyuncs.com
|
|
|
|
|
Password: DsideaL4r5t6y7u
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
```shell
|
|
|
|
|
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
|
|
|
|
|
Configure a credential helper to remove this warning. See
|
|
|
|
|
https://docs.docker.com/engine/reference/commandline/login/#credential-stores
|
|
|
|
|
Login Succeeded
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```[root@Docker ~]# docker images
|
|
|
|
|
REPOSITORY TAG IMAGE ID CREATED SIZE
|
|
|
|
|
ms-manager-sass-ui-ylt-main latest 15dfab4dc6ce 5 hours ago 207MB
|
|
|
|
|
gw-charge latest 45fdc8de8e89 7 hours ago 234MB
|
|
|
|
|
[root@Docker ~]# docker tag 45fdc8de8e89 registry.cn-hangzhou.aliyuncs.com/yltproject/yltproject:1.0
|
|
|
|
|
[root@Docker ~]# docker push registry.cn-hangzhou.aliyuncs.com/yltproject/yltproject:1.0
|
|
|
|
|
The push refers to repository [registry.cn-hangzhou.aliyuncs.com/yltproject/yltproject]
|
|
|
|
|
6ad13f10ba81: Pushed
|
|
|
|
|
5f70bf18a086: Pushed
|
|
|
|
|
602b7d6108d1: Pushed
|
|
|
|
|
d279e3a2f938: Pushed
|
|
|
|
|
771f5a5313b8: Pushed
|
|
|
|
|
43b3c4e3001c: Pushed
|
|
|
|
|
1.0: digest: sha256:d4d017f42400a68867bb4a12b0bc64d04a4ec6ffb40fe2f75c6949632f3d618d size: 1577
|
|
|
|
|
[root@Docker ~]#
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
#### 新写的模块打包发布
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
# 生成镜像
|
|
|
|
|
docker build -t jfinal .
|
|
|
|
|
|
|
|
|
|
# 查看镜像
|
|
|
|
|
docker images
|
|
|
|
|
|
|
|
|
|
# 删除镜像
|
|
|
|
|
docker rmi -f <IMAGE_NAME_OR_ID>
|
|
|
|
|
|
|
|
|
|
# 运行容器
|
|
|
|
|
docker run --name jfinal -p 8888:8888 -d jfinal
|
|
|
|
|
|
|
|
|
|
# 查看日志
|
|
|
|
|
docker logs d70ce374a7ad
|
|
|
|
|
|
|
|
|
|
# 删除容器
|
|
|
|
|
docker rm -f 8ed8d718533e
|
|
|
|
|
|
|
|
|
|
# 查看容器
|
|
|
|
|
docker ps -a
|
|
|
|
|
|
|
|
|
|
# 进入容器
|
|
|
|
|
docker exec -it d70ce374a7ad /bin/bash
|
|
|
|
|
|
|
|
|
|
# 重启容器
|
|
|
|
|
docker restart d70ce374a7ad
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|