書籍來源:《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 ~]#