标签:label run work commit devops 临时 2.0 rip env
一、使用Docker镜像二、操作docker容器
2.1 创建容器
2.2 终止容器
2.3 进入容器
2.4 删除容器
2.5 导入和导出容器
三、访问Docker仓库
一、docker基本管理
1.1 docker常用命令
1.1.1 docker images # 列出本机已有镜像
1.1.2 tag命令添加镜像标签
1.1.3 docker inspect 查看镜像详细信息
1.1.4 history 查看镜像历史
1.1.5 docker search 搜索镜像
1.1.6 docker rmi 删除镜像
1.1.1 docker images 命令详解:
列出镜像:
[root@node1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/centos latest 5182e96772bf 7 days ago 200 MB
docker.io/nginx latest c82521676580 2 weeks ago 109 MB
常用参数:
-a , —all=true|false # 列出所有的镜像文件(包括临时文件),默认为否;
—digests=true|false # 列出镜像的数字摘要值,默认为否;
-q , —quiet=true|false # 仅输出ID信息,默认为否
—digests=true|false # 列出镜像的数字摘要值,默认为否;
[root@node1 ~]# docker images --digests
REPOSITORY TAG DIGEST IMAGE ID CREATED SIZE
docker.io/centos latest sha256:6f6d986d425aeabdc3a02cb61c02abb2e78e57357e92417d6d58332856024faf 5182e96772bf 7 days ago 200 MB
docker.io/nginx latest sha256:d85914d547a6c92faa39ce7058bd7529baacab7e0cd4255442b04577c4d1f424 c82521676580 2 weeks ago 109 MB
-q , —quiet=true|false # 仅输出ID信息,默认为否
[root@node1 ~]# docker images -q
5182e96772bf
c82521676580
1.1.2 tag命令添加镜像标签
[root@node1 ~]# docker tag centos:latest ylcentos:latest
[root@node1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/centos latest 5182e96772bf 7 days ago 200 MB
ylcentos latest 5182e96772bf 7 days ago 200 MB
centos:latest 镜像的ID和 ylcentos:latest 完全一致,它们实际指向同一个镜像文件,只是别名不同,docker tag命令添加的标签实际上起到了类似链接的作用;
1.1.3 docker inspect 查看镜像详细信息
包括:制作者、适应架构、各层的数字摘要等
[root@node1 ~]# docker inspect ylcentos:latest
[
{
"Id": "sha256:5182e96772bf11f4b912658e265dfe0db8bd314475443b6434ea708784192892",
"RepoTags": [
"docker.io/centos:latest",
"ylcentos:latest"
],
"RepoDigests": [
"docker.io/centos@sha256:6f6d986d425aeabdc3a02cb61c02abb2e78e57357e92417d6d58332856024faf"
],
"Parent": "",
"Comment": "",
"Created": "2018-08-06T19:21:48.235227329Z",
"Container": "d60ffc9ddd12462af4bdcdbe45b74f3b3f99b46607ada80c3ed877b7def84250",
"ContainerConfig": {
"Hostname": "d60ffc9ddd12",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": [
"/bin/sh",
"-c",
"#(nop) ",
"CMD [\"/bin/bash\"]"
],
"ArgsEscaped": true,
"Image": "sha256:748eacc0f236df2fc9ba87c4d76a66cb10742120387e99e2acdb9454915c841d",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {
"org.label-schema.build-date": "20180804",
"org.label-schema.license": "GPLv2",
"org.label-schema.name": "CentOS Base Image",
"org.label-schema.schema-version": "1.0",
"org.label-schema.vendor": "CentOS"
}
},
"DockerVersion": "17.06.2-ce",
"Author": "",
"Config": {
"Hostname": "",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": [
"/bin/bash"
],
"ArgsEscaped": true,
"Image": "sha256:748eacc0f236df2fc9ba87c4d76a66cb10742120387e99e2acdb9454915c841d",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {
"org.label-schema.build-date": "20180804",
"org.label-schema.license": "GPLv2",
"org.label-schema.name": "CentOS Base Image",
"org.label-schema.schema-version": "1.0",
"org.label-schema.vendor": "CentOS"
}
},
"Architecture": "amd64",
"Os": "linux",
"Size": 199723824,
"VirtualSize": 199723824,
"GraphDriver": {
"Name": "overlay2",
"Data": {
"MergedDir": "/var/lib/docker/overlay2/b06aedc45e998ab1b8761a2ddd98a6b75fc73f293dba4693ca8bcb0ee1aa5d6b/merged",
"UpperDir": "/var/lib/docker/overlay2/b06aedc45e998ab1b8761a2ddd98a6b75fc73f293dba4693ca8bcb0ee1aa5d6b/diff",
"WorkDir": "/var/lib/docker/overlay2/b06aedc45e998ab1b8761a2ddd98a6b75fc73f293dba4693ca8bcb0ee1aa5d6b/work"
}
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:1d31b5806ba40b5f67bde96f18a181668348934a44c9253b420d5f04cfb4e37a"
]
}
}
]
返回的是JSON格式的内容,如果只需要其中一项可以用-f 参数来指定
[root@node1 ~]# docker inspect -f "{{ .Architecture }}" ylcentos
amd64
1.1.4 history 查看镜像历史
查看nginx:latest 镜像的创建过程
[root@node1 ~]# docker history nginx:latest
IMAGE CREATED CREATED BY SIZE COMMENT
c82521676580 2 weeks ago /bin/sh -c #(nop) CMD ["nginx" "-g" "daem... 0 B
<missing> 2 weeks ago /bin/sh -c #(nop) STOPSIGNAL [SIGTERM] 0 B
<missing> 2 weeks ago /bin/sh -c #(nop) EXPOSE 80/tcp 0 B
<missing> 2 weeks ago /bin/sh -c ln -sf /dev/stdout /var/log/ngi... 22 B
<missing> 2 weeks ago /bin/sh -c set -x && apt-get update && a... 53.7 MB
<missing> 2 weeks ago /bin/sh -c #(nop) ENV NJS_VERSION=1.15.2.... 0 B
<missing> 2 weeks ago /bin/sh -c #(nop) ENV NGINX_VERSION=1.15.... 0 B
<missing> 3 weeks ago /bin/sh -c #(nop) LABEL maintainer=NGINX ... 0 B
<missing> 4 weeks ago /bin/sh -c #(nop) CMD ["bash"] 0 B
<missing> 4 weeks ago /bin/sh -c #(nop) ADD file:919939fa0224727... 55.3 MB
1.1.5 docker search 搜索镜像
可以搜索远端仓库中共享的镜像,默认搜素官方仓库中的镜像;
—automated=true|false # 仅显示自动创建的镜像,默认为否
—no-trunc=true|false # 输出信息不截断显示,默认为否
-s # 指定仅显示为指定星级以上的镜像,默认为0,即输出所有镜像
[root@node1 ~]# docker search --automated -s 3 nginx
Flag --automated has been deprecated, use --filter=automated=true instead
Flag --stars has been deprecated, use --filter=stars=3 instead
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/jwilder/nginx-proxy Automated Nginx reverse proxy for docker c... 1381 [OK]
docker.io docker.io/richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable ... 609 [OK]
docker.io docker.io/jrcs/letsencrypt-nginx-proxy-companion LetsEncrypt container to use with nginx as... 394 [OK]
docker.io docker.io/webdevops/php-nginx Nginx with PHP-FPM 109 [OK]
docker.io docker.io/zabbix/zabbix-web-nginx-mysql Zabbix frontend based on Nginx web-server ... 61 [OK]
docker.io docker.io/bitnami/nginx Bitnami nginx Docker Image 57 [OK]
docker.io docker.io/1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5 ubuntu-16-nginx-php-phpmyadmin-mysql-5 43 [OK]
docker.io docker.io/tobi312/rpi-nginx NGINX on Raspberry Pi / armhf 20 [OK]
docker.io docker.io/blacklabelops/nginx Dockerized Nginx Reverse Proxy Server. 12 [OK]
docker.io docker.io/wodby/drupal-nginx Nginx for Drupal container image 10 [OK]
docker.io docker.io/nginxdemos/hello NGINX webserver that serves a simple page ... 8 [OK]
docker.io docker.io/webdevops/nginx Nginx container 8 [OK]
docker.io docker.io/1science/nginx Nginx Docker images that include Consul Te... 4 [OK]
1.1.6 docker rmi 删除镜像
1.1.6.1 使用标签删除镜像
命令格式:docker rmi IMAGE[IMAGE…] # 其中image可以为标签或者ID
[root@node1 ~]# docker rmi ylcentos:latest
Untagged: ylcentos:latest
Untagged: docker.io/centos@sha256:6f6d986d425aeabdc3a02cb61c02abb2e78e57357e92417d6d58332856024faf
本地的centos:latest 镜像是否会受此命令的影响?当同一镜像有多个标签的时候,docker rmi命令指示删除该镜像多个标签中的指定标签而已,并不影响镜像文件。因此上面的操作相当于知识删除了镜像5182e96772bf的一个标签而已;
但是当镜像只剩下一个标签的时候要注意,此时再使用docker rmi命令会彻底删除镜像
1.1.6.2 使用镜像ID删除镜像
当使用docker rmi命令,并且后面跟上镜像的ID(也可以是能进行区分的部分ID串前缀)时,会先尝试删除所有指向该镜像的标签,然后删除该镜像文件本身。
如果想要强行删除镜像,可以使用-f参数
[root@node1 ~]# docker rmi -f ylcentos:latest
Untagged: ylcentos:latest
注意:通常并不推荐使用-f参数来强行删除一个存在容器依赖的镜像;正确的做法是,先先删除依赖该镜像的所有容器,再来删除镜像;
1.2 创建镜像
创建镜像的方法有三种:
1、基于已有镜像的容器创建
2、基于本地模版导入
3、基于Dockerfile创建
1.2.1 基于已有镜像的容器创建
使用命令 docker commit
命令格式: docker commit [OPTIONS] CONTAINER [REPOSITORY[ : TAG]]
-a , —author=“” # 作者信息
-c , —change=[] : 提交的时候执行Dockerfile指令
-m , —message=“” : 提交信息
-p , —pause=true : 提交时暂停容器运行
[root@node1 ~]# docker run -it centos:latest /bin/bash
[root@8eebcce9722a /]# touch test
记住容器的ID为:8eebcce9722a
此时该容器跟原centos:latest 镜像相比,已经发生了改变,可以使用 docker commit 命令来提交为一个新的镜像,提交时可以使用ID或名称来指定容器;
[root@node1 ~]# docker commit -m "Added a new file" -a "Docker Newbee" 8eebcce9722a test:0.1
sha256:7c0264a9876f6eb69d90b93ed3dcc2a651ddffc59b11cf3bf3729ef9e3b9ece5
docker commit提交完新的镜像后,会返回新创建的镜像ID信息,例如:7c0264a9876f6eb69d90b93ed3dcc2a651ddffc59b11cf3bf3729ef9e3b9ece5
此时新创建的镜像 test:0.1已经存在于本地镜像列表当中:
[root@node1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test 0.1 7c0264a9876f 8 minutes ago 200 MB
docker.io/centos latest 5182e96772bf 7 days ago 200 MB
docker.io/nginx latest c82521676580 2 weeks ago 109 MB
1.2.2 基于本地模版导入
用户也可以直接从一个操作系统模板文件导入一个镜像,主要是用docker import命令;
命令格式: docker import [OPTION] file|URL|-[REPOSITORY[:tag]]
1.3 存出和载入镜像
使用 docker save和docker load 命令来存出和载入镜像
1.3.1 存出镜像
[root@node1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test 0.1 7c0264a9876f 8 minutes ago 200 MB
docker.io/centos latest 5182e96772bf 7 days ago 200 MB
docker.io/nginx latest c82521676580 2 weeks ago 109 MB
You have new mail in /var/spool/mail/root
[root@node1 ~]# docker save -o test_0.1.tar test:0.1
[root@node1 images]# ll
total 406848
-rw------- 1 root root 208305664 Aug 14 15:46 test_0.1.tar
用户可以通过复制 test_0.1.tar 文件将该镜像分享给他人;
1.3.2 载入镜像
[root@node1 images]# docker load --input test_0.1.tar
1cee2207e92e: Loading layer [==================================================>] 2.048 kB/2.048 kB
Loaded image: test:0.1
或者:
[root@node1 images]# docker load < test_0.1.tar
1cee2207e92e: Loading layer [==================================================>] 2.048 kB/2.048 kB
Loaded image: test:0.1
[root@node1 images]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test 0.1 7c0264a9876f 32 minutes ago 200 MB
docker.io/centos latest 5182e96772bf 7 days ago 200 MB
docker.io/nginx latest c82521676580 2 weeks ago 109 MB
1.4 上传镜像
可以使用docker push 命令上传镜像到仓库,默认上传到DockerHub官方仓库(需要登录)
命令格式:
docker push NAME[:TAG] | [REGISTRY_HOST[:REGISTRY_PORT]/] NAME[:TAG]
二、操作docker容器
容器是Docker的另一个核心概念,简单来说,容器是镜像的一个运行实例。所不同的是,镜像是静态的只读文件,而容器带有运行时需要的可写文件层。如果认为虚拟机时模拟运行的一整套操作系统(包括内核、应用运行态环境和其他系统环境)和跑在上面的应用,那么Docker容器就是独立运行的一个(或一组)应用,以及它们必需的运行环境。
2.1 创建容器
2.1.1 docker create 新建一个镜像
[root@node1 images]# docker create -it centos:latest
d166acc28fb35b0998a8fd275219c36019270ebba005d819424dff01c9cfa912
[root@node1 images]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d166acc28fb3 centos:latest "/bin/bash" 16 seconds ago Created angry_dubinsky
使用docker create 创建的容器处于停止状态,可以使用docker start 命令来启动;
2.1.2 docker start 启动一个容器
[root@node1 images]# docker start d166acc28fb3
d166acc28fb3
使用docker ps查看运行的容器
[root@node1 images]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d166acc28fb3 centos:latest "/bin/bash" 9 minutes ago Up 11 seconds angry_dubinsky
2.1.3 docker run 新建镜像并启动容器
docker run等价于先执行docker create命令,再执行docker start命令
例如:
[root@node1 images]# docker run centos /bin/echo ‘Hello World!‘
Hello World!
这和在本地直接执行/bin/echo ‘Hello World!’几乎感觉不出任何区别。
当利用docker run 创建并启动容器时,docker在后台运行的标准操作包括:
下面启动一个bash终端,允许用户进行交互
[root@node1 images]# docker run -it centos:latest /bin/bash
[root@367ec9a9e5b3 /]#
[root@367ec9a9e5b3 /]# pwd
/
[root@367ec9a9e5b3 /]#
[root@367ec9a9e5b3 /]# ls
anaconda-post.log bin dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[root@367ec9a9e5b3 /]# ps
PID TTY TIME CMD
1 ? 00:00:00 bash
16 ? 00:00:00 ps
在容器内用ps命令查看进程,可以看到,只运行了bash应用,并没有运行其他无关进程;
用户可以按 Ctrl + d或者exit命令来退出容器
有时候,执行docker run会出错,因为命令无法正常执行容器会直接退出,此时可以查看退出的错误代码:
默认情况下,常见错误代码包括:
* 125 : docker daemon 执行出错,例如指定了不支持的Docker命令参数;
* 126 : 所指定命令无法执行,例如权限出错;
* 127 : 容器内命令无法找到;
命令执行后出错,会默认返回错误码。
2.1.4、守护态运行
更多的时候,需要让Docker容器在后台以守护态(Daemonized)形式运行。此时,可以通过添加 -d 参数来实现。
例如:
[root@node1 images]# docker run -d centos /bin/sh -c "while true;do echo hello world;sleep 1;done"
972fa26b30d3704d42659bf07163101c6df1f8284094694672a5e77208908a1d
容器启动后会返回一个唯一的id,也可以通过docker ps命令来查看容器信息;
[root@node1 images]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
972fa26b30d3 centos "/bin/sh -c ‘while..." 5 seconds ago Up 5 seconds relaxed_spence
如果要获取容器的输出信息,可以如下使用docker logs命令:
[root@node1 images]# docker logs 972fa26b30d3
hello world
hello world
hello world
2.2 终止容器
可以使用docker stop来终止一个运行中的容器。
命令格式:docker stop [-t | —time[=10]][CONTAINER…]
首先向容器发送SIGTERM信号,等待一段超时时间(默认为10S)后,在发送SIGKILL信号来终止容器:
[root@node1 images]# docker stop 972fa26b30d3
972fa26b30d3
docker ps -qa命令看到所有容器ID,例如:
[root@node1 images]# docker ps -qa
972fa26b30d3
367ec9a9e5b3
e9cd796bf46b
2711b952d41a
d166acc28fb3
docker restart命令会将一个运行态的容器先终止,然后再重新启动它:
[root@node1 images]# docker restart 972fa26b30d3
972fa26b30d3
2.3 进入容器
2.3.1 attach 命令
attach是Docker自带的命令,命令格式为:
docker attach [—detach-key[=[]]] [—no-stdin] [—sig-proxy[=true]] CONTAINER
[root@node1 images]# docker run -itd centos
519fe978cd650b265d76b5703c7e322cfabcbb35863a4e73294baff1e6590f31
[root@node1 images]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
519fe978cd65 centos "/bin/bash" 6 seconds ago Up 5 seconds elegant_bassi
[root@node1 images]# docker attach elegant_bassi
[root@519fe978cd65 /]#
但是使用attach命令有时候并不方便,当多个窗口同时用attach命令连到同一个容器的时候,所有窗口都会同步显示,当某个窗口因命令阻塞时,其他窗口也无法执行操作了。
2.3.2 exec 命令
命令格式:
docker exec [-d | —detach] [—detach-key[=[]]] [-I | —interactive] [—privileged] [-t | —tty] [-u | —user[=USER]] CONTAINER COMMAND [ARG…]
[root@node1 images]# docker exec -it 519fe978cd65 /bin/bash
[root@519fe978cd65 /]#
可以看到,一个bash终端打开了,在不影响容器内其他应用的前提下,用户可以很容易与容器进行交互。
注意:通过指定 -it 参数来保持标准输入打开,并且分配一个伪终端。通过exec命令对容器执行操作是最为推荐的方式;
2.3.3 nsenter 工具
提示:生产场景是不使用docker attach的,需要我们使用nsenter这个工具,这个工具包含在util-linux软件包里面;
[root@linux-node1 ~]# yum install util-linux -y
Centos7默认最小化已经安装
为了使用nsenter连接到容器,还需要找到容器进程的PID,可以通过下面的命令获取:
PID=$(docker inspect —format “{{ .State.Pid }}”) <container>
[root@node1 images]# docker inspect -f "{{ .State.Pid }}" 519fe978cd65
29435
[root@node1 images]# docker inspect -f "{{ .State.Pid }}" elegant_bassi
29435
通过这个PID,就可以连接到这个容器:
[root@node1 images]# nsenter --target 29435 -m -u -i -n -p
[root@519fe978cd65 /]#
例子:
[root@node1 images]# docker run -itd centos
48aa2e39595a3f1ed63b872eeb0efd5f651ed39fe8d506779dd3287cdf120402
[root@node1 images]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
48aa2e39595a centos "/bin/bash" 7 seconds ago Up 6 seconds hardcore_davinci
[root@node1 images]# docker inspect -f "{{ .State.Pid }}" 48aa2e39595a
29624
[root@node1 images]# nsenter --target 29624 -m -u -i -n -p
[root@48aa2e39595a /]#
2.4 删除容器
可以使用 docker rm 命令来删除处于终止或退出状态的容器;
命令格式:docker rm [-f | —force] [-l | —link] [-v | —volumes] CONTAINER[CONTAINER…]
主要支持的选项包括:
-f , —force=false : 是否强行终止并删除一个运行中的容器;
-l , —link=false : 删除容器的连接,但保留容器;
-v, —volumes=false : 删除容器挂载的数据卷;
例如,查看处于终止状态的容器,并删除:
[root@node1 images]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
972fa26b30d3 centos "/bin/sh -c ‘while..." 4 hours ago Exited (137) 3 hours ago relaxed_spence
[root@node1 images]# docker rm 972fa26b30d3
972fa26b30d3
默认情况下,docker rm命令智能删除处于终止或退出状态的容器,并不能删除还处于运行状态的容器。
如果要直接删除一个运行中的容器,可以添加-f 参数。Docker会先发送SIGKILL信号给容器,终止其中的应用,之后强行删除;
例子:
[root@node1 images]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
48aa2e39595a centos "/bin/bash" 3 hours ago Up 3 hours hardcore_davinci
[root@node1 images]# docker rm 519fe978cd65
Error response from daemon: You cannot remove a running container 519fe978cd650b265d76b5703c7e322cfabcbb35863a4e73294baff1e6590f31. Stop the container before attempting removal or use -f
[root@node1 images]# docker rm -f 48aa2e39595a
48aa2e39595a
2.5 导入和导出容器
有些时候,需要将容器从一个系统迁移到另外一个系统,此时可以使用Docker的导入和导出功能,这也是Docker自身提供的一个重要特性;
2.5.1 导出容器
导出容器是指导初一个已经创建的容器到一个文件,不管此时这个容器是否处于运行状态,可以使用docker export命令;
命令格式:
docker export [-o | —output[=“”]] CONTAINER
其中,可以通过-o 选项来指定导出的tar文件名,也可以直接通过重定向来实现。
[root@node1 images]# docker export -o centos_7.1.tar 519fe978cd65
或者
[root@node1 images]# docker export 519fe978cd65 > centos_7.2.tar
[root@node1 images]# ll
total 813680
-rw------- 1 root root 208294400 Aug 15 15:45 centos_7.1.tar
-rw-r--r-- 1 root root 208294400 Aug 15 15:46 centos_7.2.tar
之后,可将导出的tar文件传输到其他机器上,然后再通过导入命令导入到系统中,从而实现容器的迁移;
2.5.2 导入容器
导出的文件又可以使用 docker import命令导入变成镜像
[root@node1 images]# docker import centos_7.1.tar test/centos:v1.0
sha256:6433c6458e515b27e4e98387685f6d791c34ff5c4b55184b13e075a51b08d5ac
[root@node1 images]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test/centos v1.0 6433c6458e51 31 seconds ago 200 MB
docker load命令来导入一个镜像文件,与docker export命令十分相似;
实际上,既可以使用docker load命令来导入镜像存储文件到本地镜像库,也可以使用docker import命令来导入一个容器快照到本地镜像库。
这两者的区别在与容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也更大。此外,从容器快照文件导入时可以重新指定标签等元数据信息。
标签:label run work commit devops 临时 2.0 rip env
原文地址:http://blog.51cto.com/11019859/2160616