天天看點

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 ~]#           

繼續閱讀