Docker(二) 镜像详解
2017-11-16 18:44
615 查看
说明:本笔记是在CentOS 7 环境中实践练习的,其他环境可适当改变命令或参考其他。
想要了解Docker就必须了解Docker的三个核心概念,即镜像、容器和仓库。了解了这三个概念也就了解了Docker的生命周期。下面笔记是我在学习Docker过程中的总结。
一、Docker 镜像。
Docker 运行容器之前需要本地存在对应的镜像,如果镜像不存在,Docker 会尝试先从默认镜像仓库下载(默认使用Docker Hub公共注册服务器中的仓库),用户也可以配置,使用自己定义的仓库。
1、获取镜像
获取镜像可以使用命令 docker pull NAME [:TAG],如果不指定TAG,Docker会默认选择latest标签,下载仓库中最新的镜像。
如:下载ubuntu镜像
(1)、下载最新版本,即不指定版本号:docker pull ubuntu
以上命令相当于docker pull registry.hub.docker.com/ubuntu:latest命令,即从[b]registry.hub.docker.com中的ubuntu仓库下载标记为latest的镜像。[/b]
我们也可以从别的注册服务器的仓库中下载,需要在仓库名称钱指定完整的仓库注册服务器地址。例如,从dockerpool社区的镜像源下载最新的镜像:docker pull dl.dockerpool.com:5000/ubuntu
2、查看镜像信息:
(1)、docker images 命令可以查看本地的镜像信息
repository:来源。来自于那个仓库,如上表:有两个来自ununtu仓库,一个来源于centos仓库。
tag:镜像的标签信息,标记来源于同意仓库的不同镜像。如:14.04;latest(表示最新)
iamge id :镜像的id号(唯一),唯一的标识了镜像
created:创建时间
size:镜像大小
(2)、使用docker tag 命令为本地镜像添加新的标签,方便后续使用。
注意:最后两个镜像的ID一样,说明这两个指向了同一个镜像文件。
(3)、使用docker inspect 可以获取镜像的详细信息。
该命令返回了一个JSON格式的数据,包含了该镜像的详细信息。
需要获取镜像某一项信息,可使用 -f 参数:
注意:在指定镜像的时候通常可以使用镜像的前几个字符来代替;如上使用的“dd”来代替“dd6f76d9cc90”
3、查找镜像:使用docker search 命令可以搜索远程仓库中共享的镜像,默认搜索docker hub仓库。
命令:docker search term
返回结果包含了镜像名、描述、星级(表示该镜像的受欢迎程度)、是否官方创建、是否自动创建等。默认输出的顺序是按照星级排序的。
4、删除镜像:docker rmi IMAGE[IMAGE...];其中IMAGE可以为镜像标签或者镜像ID
使用标签删除镜像:docker rmi ubuntu:14.04
使用id删除镜像:docker rmi dd6f76d9cc90 或 [b]docker
rmi dd6(ID为完整ID或能够确定镜像的ID的前半部分)[/b]
注意:删除镜像的时候当该镜像只有一个标签的时候,会彻底删除该镜像。
注意:如果有该镜像创建的容器存在时,该镜像将无法删除,可加-f参数,强制删除。
如:docker rmi -f ubuntu:14.04
这样删除之后会出现原来被删除的镜像换了一个id又继续存在系统中
一般操作先删除容器:docker rm 容器id或id前半部分
4、创建镜像
创建镜像有三种方式:
基于已有镜像的容器创建
基于本地模板导入
基于Dockerfile创建
1)、基于已有镜像的容器创建镜像
命令:docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
主要包括选项:
-a:--author=" ":作者信息
-m:--message=" ":提交信息
-p:--pause=true:提交是暂停容器运行
实战过程:
2)、基于本地模板导入创建镜像
一般推荐使用OpenVZ提供的镜像模板来创建。
3)、存出和导入镜像
把现有镜像,导出为一个文件。
用导出的文件恢复本地镜像
# 1. 先删除镜像
# 2. 再利用文件恢复
# 形式:== docker load --input xb_centos6.tar
# == docker load < frankie-centos.tar
# "xb_centos6.tar" --为文件名
[root@localhost mydoc]# docker load < xb_centos6.tar
0a2f11f7b1ef: Loading layer [==================================================>] 524.3 MB/524.3 MB
Loaded image ID: sha256:479daab2d4ba4bc744813aa57bd27ef7e31594ff8a6bb10184f42a669064c6d8
[root@localhost mydoc]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 479daab2d4ba 3 minutes ago 512.1 MB
test latest d0769584f950 43 minutes ago 122 MB
docker.io/ubuntu latest dd6f76d9cc90 12 days ago 122 MB
centos new d123f4e55e12 12 days ago 196.6 MB
docker.io/centos latest d123f4e55e12 12 days ago 196.6 MB
注意:导出镜像到本地的时候 如果使用的是镜像Id导出,在回复镜像后就会出现上边的仓库和tag为<none>的形式。使用仓库名则不会。
如:
4)、上传镜像:docker push NAME[:TAG]
默认上传到 Docker Hub仓库,需要登陆。
想要了解Docker就必须了解Docker的三个核心概念,即镜像、容器和仓库。了解了这三个概念也就了解了Docker的生命周期。下面笔记是我在学习Docker过程中的总结。
一、Docker 镜像。
Docker 运行容器之前需要本地存在对应的镜像,如果镜像不存在,Docker 会尝试先从默认镜像仓库下载(默认使用Docker Hub公共注册服务器中的仓库),用户也可以配置,使用自己定义的仓库。
1、获取镜像
获取镜像可以使用命令 docker pull NAME [:TAG],如果不指定TAG,Docker会默认选择latest标签,下载仓库中最新的镜像。
如:下载ubuntu镜像
(1)、下载最新版本,即不指定版本号:docker pull ubuntu
[root@localhost xb]# docker pull ubuntu Using default tag: latest Trying to pull repository docker.io/library/ubuntu ... latest: Pulling from docker.io/library/ubuntu ae79f2514705: Pull complete c59d01a7e4ca: Pull complete 41ba73a9054d: Pull complete f1bbfd495cc1: Pull complete 0c346f7223e2: Pull complete Digest: sha256:6eb24585b1b2e7402600450d289ea0fd195cfb76893032bbbb3943e041ec8a65(2)、下载指定版本ubuntu:docker pull ubuntu:14.04
[root@localhost xb]# docker pull ubuntu:14.04 Trying to pull repository docker.io/library/ubuntu ... 14.04: Pulling from docker.io/library/ubuntu bae382666908: Pull complete f1ddd5e846a8: Pull complete 90d12f864ab9: Pull complete a57ea72e3176: Pull complete 783a14252520: Pull complete Digest: sha256:f6eed4def93a3b54da920737f0abf1a8cae2e480bb368280c898265fcaf910a3(3)、下载最新CentOS镜像:docker pull centos
[root@localhost xb]# docker pull centos Using default tag: latest Trying to pull repository docker.io/library/centos ... latest: Pulling from docker.io/library/centos d9aaf4d82f24: Pull complete Digest: sha256:4565fe2dd7f4770e825d4bd9c761a81b26e49cc9e3c9631c58cfc3188be9505a
以上命令相当于docker pull registry.hub.docker.com/ubuntu:latest命令,即从[b]registry.hub.docker.com中的ubuntu仓库下载标记为latest的镜像。[/b]
我们也可以从别的注册服务器的仓库中下载,需要在仓库名称钱指定完整的仓库注册服务器地址。例如,从dockerpool社区的镜像源下载最新的镜像:docker pull dl.dockerpool.com:5000/ubuntu
2、查看镜像信息:
(1)、docker images 命令可以查看本地的镜像信息
[root@localhost xb]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/ubuntu latest dd6f76d9cc90 11 days ago 122 MB docker.io/ubuntu 14.04 3aa18c7568fc 11 days ago 188 MB docker.io/centos latest d123f4e55e12 11 days ago 196.6 MB
repository:来源。来自于那个仓库,如上表:有两个来自ununtu仓库,一个来源于centos仓库。
tag:镜像的标签信息,标记来源于同意仓库的不同镜像。如:14.04;latest(表示最新)
iamge id :镜像的id号(唯一),唯一的标识了镜像
created:创建时间
size:镜像大小
(2)、使用docker tag 命令为本地镜像添加新的标签,方便后续使用。
repository:来源。来自于那个仓库,如上表:有两个来自ununtu仓库,一个来源于centos仓库。 tag:镜像的标签信息,标记来源于同意仓库的不同镜像。如:14.04;latest(表示最新) iamge id :镜像的id号(唯一),唯一的标识了镜像 created:创建时间 size:镜像大小 (2)、使用docker tag 命令为本地镜像添加新的标签,方便后续使用。
注意:最后两个镜像的ID一样,说明这两个指向了同一个镜像文件。
(3)、使用docker inspect 可以获取镜像的详细信息。
[root@localhost xb]# docker inspect dd6f76d9cc90 [ { "Id": "sha256:dd6f76d9cc90f3ec2bded9e1c970bb6a8c5259e05401b52df42c997dec1e79be", "RepoTags": [ "docker.io/ubuntu:latest" ], "RepoDigests": [ "docker.io/ubuntu@sha256:6eb24585b1b2e7402600450d289ea0fd195cfb76893032bbbb3943e041ec8a65" ], "Parent": "", "Comment": "", "Created": "2017-11-04T09:45:35.219223981Z", "Container": "1d47863c2619835d381f791bb5fac859d2d3eefad6cd170ad8023f57d8108f34", "ContainerConfig": { "Hostname": "1d47863c2619", "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:3372a56afc4801e2e46b51f63d2b74d20d92772a20c46d5443d3760676d4a2d3", "Volumes": null, "WorkingDir": "", "Entrypoint": null, "OnBuild": null, "Labels": {} }, "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:3372a56afc4801e2e46b51f63d2b74d20d92772a20c46d5443d3760676d4a2d3", "Volumes": null, "WorkingDir": "", "Entrypoint": null, "OnBuild": null, "Labels": null }, "Architecture": "amd64", "Os": "linux", "Size": 122019781, "VirtualSize": 122019781, "GraphDriver": { "Name": "devicemapper", "Data": { "DeviceId": "22", "DeviceName": "docker-253:0-4707444-dba515e4696d5737c940722f49115cf570cc3b7cdbe70f2369578e9aeeba2913", "DeviceSize": "10737418240" } }, "RootFS": { "Type": "layers", "Layers": [ "sha256:0f5ff0cf6a1c53f94b15f03536c490040f233bc455f1232f54cc8eb344a3a368", "sha256:f1c896f31e4935defe0f9714c011ee31b3179ac745a4ed04e07c2e6ef2a7c349", "sha256:51db18d04d72c86f0fdc6087c6903bc3ad6bec155f6cfbb9b3051e70fb910cf3", "sha256:f51f76255b02ab76a187976397bad344c086ab3b1f132058b09e545beb7e8d2d", "sha256:174a611570d45cc705d866329385f28f25b917b97641013603a85ba148996a05" ] } } ]
该命令返回了一个JSON格式的数据,包含了该镜像的详细信息。
需要获取镜像某一项信息,可使用 -f 参数:
[root@localhost xb]# docker inspect -f {{".Os"}} dd linux
注意:在指定镜像的时候通常可以使用镜像的前几个字符来代替;如上使用的“dd”来代替“dd6f76d9cc90”
3、查找镜像:使用docker search 命令可以搜索远程仓库中共享的镜像,默认搜索docker hub仓库。
命令:docker search term
[root@localhost mydoc]# docker search mysql
返回结果包含了镜像名、描述、星级(表示该镜像的受欢迎程度)、是否官方创建、是否自动创建等。默认输出的顺序是按照星级排序的。
4、删除镜像:docker rmi IMAGE[IMAGE...];其中IMAGE可以为镜像标签或者镜像ID
使用标签删除镜像:docker rmi ubuntu:14.04
使用id删除镜像:docker rmi dd6f76d9cc90 或 [b]docker
rmi dd6(ID为完整ID或能够确定镜像的ID的前半部分)[/b]
[root@localhost mydoc]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/ubuntu latest dd6f76d9cc90 11 days ago 122 MB docker.io/ubuntu 14.04 3aa18c7568fc 11 days ago 188 MB centos new d123f4e55e12 12 days ago 196.6 MB docker.io/centos latest d123f4e55e12 12 days ago 196.6 MB [root@localhost mydoc]# docker rmi ubuntu:14.04 Untagged: ubuntu:14.04 Untagged: docker.io/ubuntu@sha256:f6eed4def93a3b54da920737f0abf1a8cae2e480bb368280c898265fcaf910a3 Deleted: sha256:3aa18c7568fc27f60836c67a0f74947b64da3555978b8437a0be8a23b988d9a2 Deleted: sha256:93c62f500fa88056c0c90a59b23ed647abe96fe532206db98b5133751b051e68 Deleted: sha256:9290981da9b4cf4e5c4a5b3832608e51172eea327c9bbdc99aa4244d6ee988c2 Deleted: sha256:93774300532ae7926e7504f13c12c5a9358f22c09b1a32a2256b4b7351429dcf Deleted: sha256:766364823d7e82cfe25d4393be31f8a5a681e8a610d937d00453df2322edc469 Deleted: sha256:c47d9b229ca4eaf5d3b85b6fa7f794d00910a42634dd0fd5107a9a937b13b20f [root@localhost mydoc]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/ubuntu latest dd6f76d9cc90 11 days ago 122 MB centos new d123f4e55e12 12 days ago 196.6 MB docker.io/centos latest d123f4e55e12 12 days ago 196.6 MB
注意:删除镜像的时候当该镜像只有一个标签的时候,会彻底删除该镜像。
注意:如果有该镜像创建的容器存在时,该镜像将无法删除,可加-f参数,强制删除。
如:docker rmi -f ubuntu:14.04
这样删除之后会出现原来被删除的镜像换了一个id又继续存在系统中
一般操作先删除容器:docker rm 容器id或id前半部分
4、创建镜像
创建镜像有三种方式:
基于已有镜像的容器创建
基于本地模板导入
基于Dockerfile创建
1)、基于已有镜像的容器创建镜像
命令:docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
主要包括选项:
-a:--author=" ":作者信息
-m:--message=" ":提交信息
-p:--pause=true:提交是暂停容器运行
实战过程:
# 启动容器 [root@localhost mydoc]# docker run -ti ubuntu:latest /bin/bash # 创建文件 root@2f8241feb70b:/# touch test # 退出容器 root@2f8241feb70b:/# exit exit # 提交镜像,指定容器id,为上边所示2f8241feb70b , 并指定仓库名为test [root@localhost mydoc]# docker commit -m "created a new file named test" -a "xb" 2f8241feb70b test # 创建成功后返回的新镜像的id信息 sha256:d0769584f950b5affd1c45803267671a11d6d54cd8997afddb0d216b574738c8 # 查看当前镜像 [root@localhost mydoc]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE test latest d0769584f950 7 seconds ago 122 MB docker.io/ubuntu latest dd6f76d9cc90 11 days ago 122 MB centos new d123f4e55e12 12 days ago 196.6 MB docker.io/centos latest d123f4e55e12 12 days ago 196.6 MB
2)、基于本地模板导入创建镜像
一般推荐使用OpenVZ提供的镜像模板来创建。
# 网站地址:https://openvz.org/Download/template/precreated [root@localhost mydoc]# wget http://download.openvz.org/template/precreated/centos-6-x86-minimal.tar.gz # docker import import - (+自定义的名字) [root@localhost mydoc]# cat centos-6-x86-minimal.tar.gz | docker import - centos-6-x86 sha256:1845f9850572ad4bf5c2eb1638fda36151095bbfa2d5201659f42c3349de1007 [root@localhost mydoc]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos-6-x86 latest 1845f9850572 About a minute ago 512.1 MB test latest d0769584f950 19 minutes ago 122 MB docker.io/ubuntu latest dd6f76d9cc90 12 days ago 122 MB docker.io/centos latest d123f4e55e12 12 days ago 196.6 MB centos new d123f4e55e12 12 days ago 196.6 MB
3)、存出和导入镜像
把现有镜像,导出为一个文件。
# 把现有镜像,导出为一个文件。 # -o + 要导出最后的文件名 + 要导出的文件的标签(名) 或id # docker save o - (+ 要导出最后的文件名 + 要导出的文件的标签(名) 或id ) [root@localhost mydoc]# docker save -o filename_centos_6_x86.tar d0769584f950 [root@localhost mydoc]# ls centos-6-x86-minimal.tar.gz filename_centos_6_x86.tar
用导出的文件恢复本地镜像
# 1. 先删除镜像
# 2. 再利用文件恢复
# 形式:== docker load --input xb_centos6.tar
# == docker load < frankie-centos.tar
# "xb_centos6.tar" --为文件名
[root@localhost mydoc]# docker load < xb_centos6.tar
0a2f11f7b1ef: Loading layer [==================================================>] 524.3 MB/524.3 MB
Loaded image ID: sha256:479daab2d4ba4bc744813aa57bd27ef7e31594ff8a6bb10184f42a669064c6d8
[root@localhost mydoc]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 479daab2d4ba 3 minutes ago 512.1 MB
test latest d0769584f950 43 minutes ago 122 MB
docker.io/ubuntu latest dd6f76d9cc90 12 days ago 122 MB
centos new d123f4e55e12 12 days ago 196.6 MB
docker.io/centos latest d123f4e55e12 12 days ago 196.6 MB
注意:导出镜像到本地的时候 如果使用的是镜像Id导出,在回复镜像后就会出现上边的仓库和tag为<none>的形式。使用仓库名则不会。
如:
[root@localhost mydoc]# docker save -o centos6_local.tar centos6 [root@localhost mydoc]# ls centos6_local.tar centos-6-x86-minimal.tar.gz xb_centos6.tar zuul-log [root@localhost mydoc]# docker rmi a2 Untagged: centos6:latest Deleted: sha256:a25a84d41b5b1692738d00416c9694be2d837fdc60a07a1e56f69333d7225fc3 [root@localhost mydoc]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE <none> <none> 479daab2d4ba 9 minutes ago 512.1 MB test latest d0769584f950 49 minutes ago 122 MB docker.io/ubuntu latest dd6f76d9cc90 12 days ago 122 MB centos new d123f4e55e12 12 days ago 196.6 MB docker.io/centos latest d123f4e55e12 12 days ago 196.6 MB [root@localhost mydoc]# docker load < centos6_local.tar Loaded image: centos6:latest [root@localhost mydoc]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos6 latest a25a84d41b5b 2 minutes ago 512.1 MB <none> <none> 479daab2d4ba 9 minutes ago 512.1 MB test latest d0769584f950 50 minutes ago 122 MB docker.io/ubuntu latest dd6f76d9cc90 12 days ago 122 MB centos new d123f4e55e12 12 days ago 196.6 MB docker.io/centos latest d123f4e55e12 12 days ago 196.6 MB
4)、上传镜像:docker push NAME[:TAG]
默认上传到 Docker Hub仓库,需要登陆。
相关文章推荐
- 详解nodejs之创建最小docker镜像
- Docker镜像原理详解
- 详解Docker 修改已有镜像(commit )
- 详解Docker Registry之删除镜像、垃圾回收
- Docker 镜像、容器、仓库的概念及应用详解
- 详解使用Dockerfile创建带Apache服务的CentOS Docker镜像
- 详解Docker创建支持ssh服务的容器和镜像
- Docker 教程之获取镜像基础知识详解
- 利用Docker制作Nginx+PHP镜像的步骤详解
- Docker 教程之基本概念(镜像,容器,仓库)详解
- 详解docker使用阿里云Docker镜像库加速(修订版)
- 详解如何使用Docker部署一个web项目并打包成镜像文件
- 详解制作各种docker镜像
- 详解docker pull 下来的镜像文件存放的位置
- Docker如何多步构建生成dubbo-admin镜像详解
- 3.3、Dcoker-1.12 Dockerfile,镜像制作详解以及使用说明
- Dockerfile制作官方Tomcat镜像及镜像使用详解
- 详解Maven Docker镜像使用技巧
- 详解docker使用阿里云Docker镜像库加速(修订版)
- docker镜像存储详解