Kubernetes认证考试自学系列 | 镜像管理

书籍来源:《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 ~]#

猜你喜欢

转载自blog.csdn.net/guolianggsta/article/details/130180188