Docker安装

Docker学习

环境准备

1、需要一点Linux基础

2、CentOS7

3、Xshell

系统内核

#系统内核
[root@iZwz9agfsj3krw28awnk3aZ /]# uname -r
3.10.0-514.26.2.el7.x86_64

系统版本

#系统版本
[root@iZwz9agfsj3krw28awnk3aZ /]# cat etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

安装帮助文档

# 1、卸载旧环境
yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
# 2、安装环境
yum install -y yum-utils
# 3、设置镜像的仓库
yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo #默认是国外的!
    
yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #推荐使用阿里云的
 
# 4、更新索引
[root@iZwz9agfsj3krw28awnk3aZ /]# yum makecache fast
 
  
# 5、安装Docker相关的  docker-ce  是社区版
yum install docker-ce docker-ce-cli containerd.io

# 6、启动Docker
systemctl start docker

# 7、使用 docker version查看是否安装成功

Docker安装_第1张图片

docker run hello-world #运行hello-word

#查看镜像
[root@iZwz9agfsj3krw28awnk3aZ /]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              bf756fb1ae65        9 months ago        13.3kB

了解卸载

# 1、卸载依赖
yum remove docker-ce docker-ce-cli containerd.io

# 2、删除资源--->默认路径
rm -rf /var/lib/docker

阿里云镜像加速

  1. 服务控制

  2. 找到镜像容器

Docker安装_第2张图片

  1. 配置使用
# 1、创建目录
sudo mkdir -p /etc/docker

# 2、配置文件
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://x4hefn9e.mirror.aliyuncs.com"]
}
EOF

# 3、重启docker
sudo systemctl daemon-reload

# 4、开启Docker
sudo systemctl restart docker

docker run hello-world流程

Docker安装_第3张图片

底层原理

Docker是如何工作的?

Docker是一个 Client-Server的结构。通过Socket从客户端访问!

Docker-Server接收到Docker-Client的指令,就会执行这个命令

Docker安装_第4张图片

Docker为什么比Linux快?

  • VM要重新加载操作系统CentOS7

  • Docker不需要加载操作系统

Docker的常用命令

帮助命令

docker version #显示docker版本信息
docker info		#显示docker的系统信息,包括镜像和容器数量
docker --help	#帮助命令

镜像命令

Docker安装_第5张图片

Docker安装_第6张图片

Docker安装_第7张图片

[root@iZwz9agfsj3krw28awnk3aZ mysql]# docker pull mysql:5.7
5.7: Pulling from library/mysql
bb79b6b2107f: Pull complete 
49e22f6fb9f7: Pull complete 
842b1255668c: Pull complete 
9f48d1f43000: Pull complete 
c693f0615bce: Pull complete 
8a621b9dbed2: Pull complete 
0807d32aef13: Pull complete 
f15d42f48bd9: Pull complete 
098ceecc0c8d: Pull complete 
b6fead9737bc: Pull complete 
351d223d3d76: Pull complete 
Digest: sha256:4d2b34e99c14edb99cdd95ddad4d9aa7ea3f2c4405ff0c3509a29dc40bcb10ef
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7

镜像下载地址:https://hub.docker.com/search/?type=image

在这里插入图片描述

是镜像Id

[root@iZwz9agfsj3krw28awnk3aZ mysql]# docker rmi -f $(docker images -aq) #遍历删除

容器命令

说明:我们有了镜像才可以创建容器,Linux ,下载一个 centos 镜像来测试学习

docker pull centos

Docker安装_第8张图片

Docker安装_第9张图片

退出容器

exit 			#退出并停止容器
Ctrl + P + Q	#退出不停止容器

删除容器

docker rm 容器id						#删除指定的容器,无法删除正在运行的容器
docker rm -f $(docker ps -aq)		#删除所有容器
docker -a -q|xargs docker rm		#删除所有容器

停止和重启容器

docker start 容器id		#启动容器
docker restart 容器id		#重启容器
docker stop 容器id		#停止当前正在运行的容器
docker kill 容器id		#强制停止容器

常用其它命令

Docker安装_第10张图片

-d 后台运行

Docker安装_第11张图片

Docker安装_第12张图片

查看镜像的元数据

#命令
docker inspect 容器id

#测试
[root@iZwz9agfsj3krw28awnk3aZ /]# docker inspect 480ddf3e2ce7
[
    {
        "Id": "480ddf3e2ce7b7642441836b7e92073c8b35c34bcffdeedd5897fd75b582f028",
        "Created": "2020-10-26T08:55:52.347136353Z",
        "Path": "/bin/sh",
        "Args": [
            "-c",
            "while true;do echo carter;sleep 1;done"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 11665,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2020-10-26T08:55:52.780052286Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        "Image": "sha256:0d120b6ccaa8c5e149176798b3501d4dd1885f961922497cd0abef155c869566",
        "ResolvConfPath": "/var/lib/docker/containers/480ddf3e2ce7b7642441836b7e92073c8b35c34bcffdeedd5897fd75b582f028/resolv.conf"
    }
]

进入当前运行的容器

#命令
docker exec -it 容器id bash shell

#测试
[root@iZwz9agfsj3krw28awnk3aZ /]# docker exec -it 480ddf3e2ce7 /bin/bash

[root@480ddf3e2ce7 /]# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 08:55 ?        00:00:00 /bin/sh -c while true;do echo carter;sleep 1;done
root       340     0  0 09:01 pts/0    00:00:00 /bin/bash
root       362   340  0 09:01 pts/0    00:00:00 ps -ef

Docker安装_第13张图片

Docker安装_第14张图片

#命令
docker ps -a -n=1 显示1个最近的历史

#测试 
[root@iZwz9agfsj3krw28awnk3aZ /]# docker ps -a -n=1
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
c481d007b0cf        centos              "/bin/bash"         2 minutes ago       Exited (0) 34 seconds

Docker安装_第15张图片

作业练习

Docker安装Nginx

#搜索nginx
docker search nginx --filter STARS=90
#下载nginx
docker pull nginx
#查看所有镜像
[root@iZwz9agfsj3krw28awnk3aZ /]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              f35646e83998        13 days ago         133MB
centos              latest              0d120b6ccaa8        2 months ago        215MB

#运行nginx
#3344是主机端口
#80是容器端口
#nginx-01是别名
[root@iZwz9agfsj3krw28awnk3aZ /]# docker run -d --name nginx-01 -p 3344:80 nginx
1b6859135b371af58cc50555e6ee234e8c6f5f5706aa994a4362828187eb6203
[root@iZwz9agfsj3krw28awnk3aZ /]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
1b6859135b37        nginx               "/docker-entrypoint.…"   8 seconds ago       Up 7 seconds        0.0.0.0:3344->80/tcp   nginx-01

#测试nginx
[root@iZwz9agfsj3krw28awnk3aZ /]# curl localhost:3344

Docker安装_第16张图片

在这里插入图片描述

Docker安装_第17张图片

进入Nginx-01容器

#显示正在运行的进程
docker ps
#测试
[root@iZwz9agfsj3krw28awnk3aZ /]# docker ps
CONTAINER ID        IMAGE            STATUS              PORTS                  NAMES
1b6859135b37        nginx          Up 16 hours         0.0.0.0:3344->80/tcp   nginx-01

#进入Nginx容器
[root@iZwz9agfsj3krw28awnk3aZ /]# docker exec -it nginx-01 /bin/bash

#找到Nginx位置
root@1b6859135b37:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
root@1b6859135b37:/# cd /etc/nginx
root@1b6859135b37:/etc/nginx#

作业2 docker装一个Tomcat

Docker安装_第18张图片

安装es+kibana

# --net somenetwork 网络配置

#启动elasticsearch
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2 #启动就直接卡了

docker stats  查看CUP的状态

# es是十分耗内存的

#停止整个docker

#限制内存运行
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xms512m" elasticsearch:7.6.2

可视化

  • portainer(先用这个)
#安装
docker run -d -p 8088:9000 \
--restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer

#访问测试
http://47.115.120.36:8088/

Docker镜像讲解

镜像是什么

镜像是一种轻量级、可执行的独立软件包,用来打包运行环境开发的软件,它包含某个软件所有的内容,包括代码、运行时、库、环境变量和配置文件。

所有的应用,直接打包成镜像,可以直接跑起来

如何得到镜像:

  • 从远程下载
  • 朋友拷贝
  • 自己制作

Docker镜像加载原理

UnionFS(联合文件系统)

将所有的信息进行分层管理,我们下载的时候一层一层的是这个!

Docker的镜像实际上就是由一层一层的文件系统组成,这种层级的文件系统UnionFS。

bootfs:bootloader【加载器】+kernel【内核】,bootloader主要引导加载kernel

rootfs:在bootfs之上,主要是一些文件、目录… rootfs就是各种不同的操作系统发行版本,比如Ubuntu,CentOS等等

分层理解

[root@iZwz9agfsj3krw28awnk3aZ /]# docker pull redis
Using default tag: latest
latest: Pulling from library/redis
bb79b6b2107f: Already exists #这一层已经曾在,不会继续下载
1ed3521a5dcb: Pull complete 
5999b99cee8f: Pull complete 
dd17877d8f2d: Pull complete 
4863b56b12a8: Pull complete 
069e700bc397: Pull complete 
Digest: sha256:a0494b60a0bc6de161d26dc2d2f9d2f1c5435e86a9e5d48862a161131affa6bd
Status: Downloaded newer image for redis:latest
docker.io/library/redis:latest
[root@iZwz9agfsj3krw28awnk3aZ /]#

Docker安装_第19张图片

Commit镜像

如何提交自己的镜像

docker commit 提交容器成为一个新的副本

#命令和Git原理一样
docker commit -m="提交的描述信息" -a="作者" 容器ID 目标镜像名:[TAG]

#运行tomcat 
docker run -it -p 8080:8080 tomcat

#进入默认tomcat
docker exec -it ee5e125ade19 /bin/bash

#拷贝样式---默认的tomcat无页面
cp -r webapps.dist/* webapps

#退出
exit

#查看容器进程
docker ps

#CommitImage  Author:Carter Message:add webapps application ContainerId NewName:Version
docker commit -a="Carter" -m="add webapps application" ee5e125ade19 tomcat01:1.0

#Container to start and open
docker run -it tomcat01 /bin/bash

容器数据卷

什么是数据卷

程序保存数据在容器中,那么我们删除容器,我们的数据就也被删除了~

需求:数据可不可以持久化,存储在本地

容器之间有一个数据共享技术!Docker容器中产生的数据同步到本地!

这就是数据卷技术,目录挂载,将容器内的目录,挂载到Linux中

Docker安装_第20张图片

总结一句话:容器的持久化和同步操作!容器间也是可以数据共享的

使用数据卷

方法一:直接使用命令来挂载 -v

docker run -it -v 主机目录:容器目录 -p 主机端口:容器端口

#测试---会话1
[root@iZwz9agfsj3krw28awnk3aZ home]# docker run -it -v /home/test:/home centos /bin/bash
[root@696416ec7208 /]#

#查看容器是否挂载---克隆会话2
docker inspect 容器Id

#挂载信息
"Mounts": [
            {
                "Type": "bind",
                "Source": "/home/test", #本地Linux目录
                "Destination": "/home", #容器目录
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ]
        
#测试文件同步
#容器中新建---carter.java
[root@696416ec7208 home]# touch carter.java
[root@696416ec7208 home]# ls
carter.java

#Linux中路径下
[root@iZwz9agfsj3krw28awnk3aZ test]# ls
carter.java

实战部署 MySQL

#搜索mysql镜像
[root@iZwz9agfsj3krw28awnk3aZ /]# docker search mysql	

#下载获取镜像
[root@iZwz9agfsj3krw28awnk3aZ /]# docker pull mysql:5.7

#查看镜像
[root@iZwz9agfsj3krw28awnk3aZ /]# docker images

#启动数据挂载
-d 后台运行
-p 端口映射
-v 数据卷挂载x2
-e 环境配置
--name 别名

[root@iZwz9agfsj3krw28awnk3aZ /]# docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v/home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root --name mysql01 mysql:5.7

#启动成功之后本地测试连接
-h 主机地址【默认localhost】
-P SQLServer的端口
-u 账户
-p 密码
mysql -h47.115.120.36 -P3310 -uroot -p

#删除容器
docker rm -f 容器name --可以删除正在运行的容器
docker rm -f 容器id --可以删除正在运行的容器

Docker安装_第21张图片

具名和匿名挂载

#匿名挂载
-v 容器内路径---未指定容器外路径
-P 大P 随机映射端口
--name 别名
docker run -d -P --name nginx01 -v /etc/ngix nginx

#查看所有卷的情况
docker volume ls

#具名挂载--->前面不加/表示:naming-nginx只是个配置文件
docker run -d -P --name nginx -v naming-nginx nginx

#查看具名卷的位置
docker volume inspect naming-nginx

Docker安装_第22张图片

大多数情况下我们使用具名挂载

Docker安装_第23张图片

DockerFile

就是用来构建Docker镜像的镜像文件!命令脚本,通过这个脚本可以生成镜像,脚本就是一个一个命令,每一个命令就是一层

#创建一个dockerfile文件
#文件内容都是大写的

#脚本文件
FROM centos

VOLUME ["volume01","volume02"]

CMD echo "-----end-----"

CMD /bin/bash

#这里的每个命令就是一层
#脚本内容
[root@iZwz9agfsj3krw28awnk3aZ docker-test-volume]# cat dockerfile1 
FROM centos

VOLUME ["volume01","volume02"]

CMD echo "-----end-----"

CMD /bin/bash

#生成镜像
[root@iZwz9agfsj3krw28awnk3aZ docker-test-volume]# docker build -f dockerfile1 -t carter/centos .
Sending build context to Docker daemon  2.048kB
Step 1/4 : FROM centos
 ---> 0d120b6ccaa8
Step 2/4 : VOLUME ["volume01","volume02"]
 ---> Running in dd63c90ee839
Removing intermediate container dd63c90ee839
 ---> 482f49ff7b5c
Step 3/4 : CMD echo "-----end-----"
 ---> Running in c7e0f05ed913
Removing intermediate container c7e0f05ed913
 ---> 769f3e9bc4d2
Step 4/4 : CMD /bin/bash
 ---> Running in 4e9d29158f92
Removing intermediate container 4e9d29158f92
 ---> 236d4157063a
Successfully built 236d4157063a
Successfully tagged carter/centos:latest

#查看生成镜像
[root@iZwz9agfsj3krw28awnk3aZ docker-test-volume]# docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
carter/centos         latest              236d4157063a        2 minutes ago       215MB

Docker安装_第24张图片

Docker安装_第25张图片

数据卷容器

两个MySQL同步数据

Docker安装_第26张图片

 #启动一个容器
 docker run -it --name docker01 carter/centos
 #容器docker02继承docker01
 docker run -it --name docker02 --volumes-from docker01 carter/centos

两个容器的数据卷存放位置一样,所以一个容器死亡,并不会影响另一个容器数据

/var/lib/docker/volumes/bbbc2824b1267ff1f4d9b93e95b1469eba99474f17e0c788e956d8cc4ba88794/_data
    /var/lib/docker/volumes/b3496be393d1b062d9dbb1a38a6f44388ec340ed585b9f6ddb2074b4792b6831/_data
    
/var/lib/docker/volumes/bbbc2824b1267ff1f4d9b93e95b1469eba99474f17e0c788e956d8cc4ba88794/_data
    /var/lib/docker/volumes/b3496be393d1b062d9dbb1a38a6f44388ec340ed585b9f6ddb2074b4792b6831/_data

Dockerfile 命令

步骤:

DokcerFile:构建文件,定义一切的步骤,源代码

DockerImages:通过DockerFile生成的镜像,最终发布和运行的产品

Docker容器:容器是镜像运行起来提供服务器

以前我们用别人的,现在我们自己写

FROM		# 基础镜像,一切从这里开始构建
MAINTAINER	# 镜像是谁写的:姓名+邮箱
RUN			# Docker镜像构建的时候需要运行的命令
ADD			# 步骤:tomcat镜像,这个tomcat镜像 的压缩包
WORKDIR		# 镜像工作目录
VOLUME		# 挂载的目录
EXPOSE		# 暴露端口配置
CMD			# 指定容器启动的时候要运行的命令,只有最后一个回生效,可以被替代
ENTRYPOINT	# 指定这个容器启动时要运行的命令,可以追加命令
ONBUILD		# 当构建一个被继承 DockerFile 这个时候就会运行 ONBUILD 的指令。触发指令
COPY		# 类似ADD 将我们的文件拷贝到镜像中
ENV			# 构建的时候设置环境变量

实战测试

DokcerHup 中 99%镜像都是从这个基础镜像过来的 FROM scratch , 然后配置我们需要的软件来进行构建

Docker安装_第27张图片

创建一个自己的centos

# 编写dockerfile的文件
FROM centos
        
MAINTAINER carter<[email protected]>		# 建造者

ENV MYPATH /usr/local						# 运行后直接到local目录

WORKDIR $MYPATH

RUN yum -y install vim						# 增加vim命令
RUN yum -y install net-tools				# 增加 ifconfig 命令

EXPOSE 80

CMD echo $MYPATH
CMD echo "------end------"

CMD /bin/bash


# 构建镜像
docker build -f mydockerfile -t mycentos:1.0 .


# 查看历史
docker history 792b31f69875

CMD 和 ENTRYPOINT 区别

CMD			# 指定容器启动的时候要运行的命令,只有最后一个回生效,可以被替代
ENTRYPOINT	# 指定这个容器启动时要运行的命令,可以追加命令
# 测试cmd命令
[root@iZwz9agfsj3krw28awnk3aZ dockerfile]# vim dockerfile-cmd-test
	FROM centos
	CMD ["ls","-a"]		# 列出当前所有的目录

[root@iZwz9agfsj3krw28awnk3aZ dockerfile]# docker build -f dockerfile-cmd-test -t cmdtest . #创建cmdtest
	Successfully built 7f2825a96870
	Successfully tagged cmdtest:latest

# docker run 7f2825a96870	#运行镜像,输出centos中当前所有目录
[root@iZwz9agfsj3krw28awnk3aZ dockerfile]docker run 7f2825a96870
	.
	bin
	dev

# 后面追加命令 -l    ls -al ==》返回列表的详细数据
[root@iZwz9agfsj3krw28awnk3aZ dockerfile]# docker run 7f2825a96870 -l
	docker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting 		container process caused "exec: \"-l\": executable file not found in $PATH": unknown.

# 用CMD的情况下 -l 替换了 CMD ["ls","-a"] 命令,-l不是命令,运行报错
# 必须自己写好
docker run 7f2825a96870 ls -al
# 测试entrypoint
FROM centos
ENTRYPOINT ["ls","-a"]

# 构建镜像
docker build -f dockerfile-entrypoint-test -t entrypoint-test .

# 运行镜像
docker run 7ff8394f8f0b

# 追加命令 -l  ===> ENTRYPOINT ["ls","-al"] ===》列出当前所有目录详情
 docker run 7ff8394f8f0b -l

实战Tomcat镜像

1、准备镜像文件 tomcat的压缩包,JDK压缩包!

Docker安装_第28张图片

2、编写DockerFile文件 , 官方命令Dockerfile ,build会自动寻找这个文件,就不需要-f指定了

# 配置Dockerfile
FROM centos
MAINTAINER carter<[email protected]>
COPY remember.txt /usr/local/remember.txt
ADD jdk-8u271-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.39.tar.gz /usr/local/
RUN yum -y install vim
ENV MYPATH /usr/local
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk1.8.0_271
ENV CLASS_PATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.39
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.39
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-9.0.39/startup.sh && tail -F /usr/local/apache-tomcat-9.0.39/logs/catalina.out

# 构建镜像
docker build -t diytomcat .

# 运行测试
docker run 
-d 																					# 后台运行
-p 9090:8080 																		# 端口映射
--name cartertomcat 																#设置别名
-v /home/carter/build/tomcat/test:/usr/local/apache-tomcat-9.0.39/webapps/test 		# 文件挂载
-v /home/carter/build/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.39/logs 		# 日志挂载
diytomcat 																			# 镜像名称

# 等上一段时间后,进入容器
docker exec -it 59c2ac47f960 /bin/bash

#测试tomcat
curl localhost:9090
docker run -it -p 9090:8080 --name cartertomcat -v /home/carter/build/tomcat/test:/usr/local/apache-tomcat-9.0.39/webapps/test -v /home/carter/build/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.39/logs diytomcat /bin/bash

docker run -d -p 9090:8080 --name cartertomcat -v /home/carter/build/tomcat/test:/usr/local/apache-tomcat-9.0.39/webapps/test -v /home/carter/build/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.39/logs diytomcat /bin/bash

发布自己的镜像

DockerHub

#发布到Docker Hub
[root@iZwz9agfsj3krw28awnk3aZ test]# docker login --help

Usage:  docker login [OPTIONS] [SERVER]

Log in to a Docker registry.
If no server is specified, the default is defined by the daemon.

Options:
  -p, --password string   Password
      --password-stdin    Take the password from stdin
  -u, --username string   Username
 
docker login -u carter # 登录Docker Hub
  
docker push author's name/docekr image's name : version #发布

# Docker 发布问题?
docker tag {IMAGE ID}  carter/tomcat:1.0 # 设置作者+版本 标签

阿里云 镜像发布

# 1.登录阿里云功能

# 2.找到容器镜像服务

# 3.创建一个命名空间【只能注册3个】

# 4.创建 本地 镜像仓库

# 5.参考carter_test官方文档

你可能感兴趣的:(Linux,docker,linux,容器)