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.

9.8 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.

Docker使用方法

一、安装

1、脚本安装

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源,科学无国界~

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、启动Docker

systemctl start docker

4、卸载 Docker

yum remove docker-ce

5、删除镜像、容器、配置文件等内容

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 的公共镜像。

Tomcat需要把 /usr/local/tomcat/webapps.dist/目录下的所有文件和文件夹拷贝到 /usr/local/tomcat/webapps/下,才能访问到小猫的页面。

cd /usr/local/tomcat/webapps.dist/
mv docs/ ../webapps/
mv examples/ ../webapps/
mv host-manager/ ../webapps/
mv manager/ ../webapps/
mv ROOT/ ../webapps/

查看Tomcat运行的主界面

2、查看容器

docker ps

3、删除容器

docker rm -f openjdk1.8
或者
docker rm -f 4bf2bd13f5b0

4、进入容器

docker exec -it openjdk1.8 /bin/bash
root@4bf2bd13f5b0:/usr/local/openjdk-8/bin# pwd
/usr/local/openjdk-8/bin

5、将文件复制到容器外

docker cp openjdk1.8:/usr/local/1.txt ./

6、将文件复制回容器

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=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" ]

创建容器

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

查看Docker日志

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、进入容器
docker exec -it b30008f6e67d /bin/bash
2、查看环境变量
root@b30008f6e67d:~# echo $ENV_OPTS
-Dspring.profiles.active=dev

root@b30008f6e67d:~# echo $JAVA_OPTS
-server -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -XX:MaxRAMFraction=1

六、待实验内容

阿里云容器服务springboot版本回退_以及平滑更新蓝绿发布