书籍来源:《CKA/CKAD应试指南:从Docker到Kubernetes完全攻略》
一边学习一边整理读书笔记,并与大家分享,侵权即删,谢谢支持!
附上汇总贴:Kubernetes认证考试自学系列 | 汇总_COCOgsta的博客-CSDN博客
1.3.1 镜像的命名
一般情况下,镜像是按照如下格式命名的。
服务器IP:端口/分类/镜像名:tag
复制代码
如果不指明端口,默认为80,tag默认为latest,比如192.168.26.101:5000/cka/centos:v2,再比如hub.c.163.com/library/mysql:latest。分类也可以不写,比如docker.io/nginx:latest。
在把镜像上传(push)到仓库的时候,镜像必须要按这种格式命名,因为仓库地址就是由镜像前面的IP决定的。如果只是在本机使用镜像的话,可以随意命名。
查看当前系统有多少镜像。
[root@vms100 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/nginx latest 5a3221f0137b 2 weeks ago 126MB
registry.cn-hangzhou.aliyuncs.com/nginx-phpfpm/nginx-end
1.2 3432fc9580db 10 months ago 109MB
hub.c.163.com/library/wordpress latest dccaeccfba36 2 years ago 406MB
hub.c.163.com/library/centos latest 328edcd84f1b 2 years ago 193MB
hub.c.163.com/library/mysql latest 9e64176cd8a2 2 years ago 407MB
[root@vms100 ~]#
复制代码
这里因为显示太长,拐弯了。
1.3.2 对镜像重新做标签
如果想给本地已经存在的镜像起一个新的名字,可以用tag来做,语法如下。
docker tag 旧的镜像名 新的镜像名
复制代码
tag之后,新的镜像名和旧的镜像名是同时存在的。
步骤1:给镜像做新标签。
[root@vms100 ~]# docker tag registry.cn-hangzhou.aliyuncs.com/nginx-phpfpm/nginx-end:1.2 xxxx-nginx:v11-v1
[root@vms100 ~]#
复制代码
这里是为registry.cn-hangzhou.aliyuncs.com/nginx-phpfpm/nginx-end:1.2重新做个tag,名字为xxxx-nginx:v11-v1,镜像名为xxx-nginx,标签为v11-v1,建议tag可以设置为版本号、日期等有意义的字符。
步骤2:再次查看镜像。
[root@vms100 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/nginx latest 5a3221f0137b 2 weeks ago 126MB
xxxx-nginx v11-v1 3432fc9580db 10 months ago 109MB
registry.cn-hangzhou.aliyuncs.com/nginx-phpfpm/nginx-end
1.2 3432fc9580db 10 months ago 109MB
...
[root@vms100 ~]#
复制代码
可以看到对某镜像做了标签之后,看似是两个镜像,其实对应的是同一个,镜像ID都是一样的。删除其中一个镜像是不会删除存储在硬盘上的文件的,只有把image id所对应的所有名字全部删除,才会从硬盘上删除。
1.3.3 删除镜像
如果要删除镜像的话,需要按如下语法来删除。
语法:docker rmi 镜像名:tag
复制代码
比如下面要把registry.cn-hangzhou.aliyuncs.com/nginx-phpfpm/nginx-end:1.2删除。
步骤1:删除镜像。
[root@vms100 ~]# docker rmi registry.cn-hangzhou.aliyuncs.com/nginx-phpfpm/nginx-end:1.2
Untagged: registry.cn-hangzhou.aliyuncs.com/nginx-phpfpm/nginx-end:1.2
Untagged: registry.cn-hangzhou.aliyuncs.com/nginx-phpfpm/nginx-end@sha256:6054e809cd219d7acbc364e983a268d13ee8dc585935172a80b146ff09292e6d
[root@vms100 ~]#
复制代码
这里可以看到只是简单的一个untagged操作,并没有任何的deleted操作。
步骤2:查看镜像。
[root@vms100 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/nginx latest 5a3221f0137b 2 weeks ago 126MB
xxxx-nginx v11-v1 3432fc9580db 10 months ago 109MB
hub.c.163.com/library/wordpress latest dccaeccfba36 2 years ago 406MB
hub.c.163.com/library/centos latest 328edcd84f1b 2 years ago 193MB
hub.c.163.com/library/mysql latest 9e64176cd8a2 2 years ago 407MB
[root@vms100 ~]#
复制代码
可以看到3432fc9580db对应的本地文件依然是存在的,因为它(id为3432fc9580db)有两个名字,现在只是删除了一个名字而已,所以在硬盘上仍然是存在的。
只有删除最后一个名字,本地文件才会被删除。
步骤3:删除镜像。
[root@vms100 ~]# docker rmi xxxx-nginx:v11-v1
Untagged: xxxx-nginx:v11-v1
Deleted: sha256:3432fc9580db77d3ba98817f651c271a3acf02cb
...输出...
Deleted: sha256:f246685cc80c2faa655ba1ec9f0a3516f46c5bca14
Deleted: sha256:d626a8ad97a1f9c1f2c4db3814751ad94fcd88363
[root@vms100 ~]#
复制代码
1.3.4 查看镜像的层结构
如果要看某镜像制作过程,可以用docker history命令,语法如下。
docker history 镜像名
复制代码
查看镜像的结构。
[root@vms100 ~]# docker history hub.c.163.com/library/centos
IMAGE CREATED CREATED BY SIZE COMMENT
328edcd84f1b 2 years ago /bin/sh -c #(nop) CMD["/bin/bash"] 0 B
<missing> 2 years ago /bin/sh -c #(nop) LABEL name=CentOS Base.. 0 B
<missing> 2 years ago /bin/sh -c #(nop) ADD file: 63492ba809361c5.. 193 MB
[root@vms100 ~]#
复制代码
最上层的CMD定义为,使用这个镜像生成的容器里运行的进程为/bin/bash。
1.3.5 导出镜像
在还没有私有仓库的情况下,如何把现有的镜像传输到其他机器上呢?这里我们就需要把本地已经pull下来的镜像导出为一个本地文件,这样就可以很容易地传输到其他机器。导出镜像的语法如下。
docker save 镜像名 > file.tar。
复制代码
先查看当前目录里的内容:
[root@vms100 ~]# ls
anaconda-ks.cfg set.sh
[root@vms100 ~]#
复制代码
步骤1:把docker.io/nginx:latest导出为nginx.tar。
[root@vms100 ~]# docker save docker.io/nginx > nginx.tar
[root@vms100 ~]# ls
anaconda-ks.cfg nginx.tar set.sh
[root@vms100 ~]#
复制代码
如果导出多个镜像的话,语法如下。
docker save 镜像名1 镜像名2 镜像名3 ... > file.tar
复制代码
不可以使用如下方式。
docker save 镜像名1 > file.tar
docker save 镜像名2 >> file.tar
...
复制代码
步骤2:导出所有的镜像。
[root@vms100 ~]# docker save docker.io/nginxhub.c.163.com/library/wordpress hub.c.163.com/library/centos hub.c.163.com/library/mysql > all.tar
[root@vms100 ~]#
复制代码
步骤3:删除所有的镜像,有以下3种方法。
(1) 关闭docker,清空/var/ib/docker/,记住是清空/var/lib/docker/里的内容,不是删除此目录。
(2)手动一个一个地删除。
(3)写脚本,内容如下。
[root@vms100 ~]# cat rm_all_image.sh
#!/bin/bash
file=$(mktemp)
docker images | grep -v REPOSITORY | awk '{print $1":"$2}' >> $file
while read line ; do
docker rmi $line
done < $file
[root@vms100 ~]#
[root@vms100 ~]# chmod +x rm_all_image.sh
[root@vms100 ~]# ./rm_all_image.sh
...大量的输出...
[root@vms100 ~]#
复制代码
步骤4:查看现有镜像。
[root@vms100 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
[root@vms100 ~]#
复制代码
1.3.6 导入镜像
既然上面已经把镜像导出为一个文件了,那么我们就需要把这个文件导入,语法如下。
docker load -i file.tar
复制代码
步骤1:把nginx.tar导入为镜像。
[root@vms100 ~]# docker load -i nginx.tar
cb42413394c4: Loading layer 72.51MB/72.51MB
1c91bf69a08b: Loading layer 64.6MB/64.6MB
56bc37de0858: Loading layer 3.072kB/3.072kB
3e5288f7a70f: Loading layer 4.096kB/4.096kB
85fcec7ef3ef: Loading layer 3.584kB/3.584kB
Loaded image: nginx:latest
[root@vms100 ~]#
复制代码
步骤2:导入所有镜像。
[root@vms100 ~]# docker load -i all.tar
1c95c77433e8: Loading layer[=============>] 72.47 MB/72.47 MB
002a63507c1c: Loading layer[=============>] 57.31 MB/57.31 MB
...
8129a85b4056: Loading layer[=============>] 1.536 kB/1.536 kB
Loaded image: hub.c.163.com/library/mysql:latest
[root@vms100 ~]#