- 鏡像再探
- 基礎指令
- 1 檢視鏡像
- 2 拉取鏡像
- 3 搜尋鏡像
- 4 删除鏡像
1 鏡像再探
docker鏡像是由FileSystem疊加而成的。
和傳統的linux一樣,最底層是bootfs;之上是rootfs。
和linux不同的是,docker裡的rootfs永遠都是隻讀狀态的。之是以你看起來像是修改了它(給它擴充新功能),是因為docker的聯合加載技術(一次同時加載多個檔案系統,并将各層檔案系統的功能組合)。
有了聯合加載技術,最終的檔案系統就有了所有已經加載了的檔案系統的功能。是不是感覺有點像面向對象的繼承呢?
在實際使用中,一個docker鏡像往往都是由另一個docker鏡像擴充而來的。被擴充的那個鏡像就稱之為父鏡像。最原始的那個父鏡像被稱為base image(基礎鏡像)。
看看這個經典的圖吧:
最上面那一層是可讀寫的。在容器第一次啟動的時候,該層是空的。
當我們修改某個檔案時,被修改的檔案會從讀寫層下面的隻讀層複制到讀寫層。這樣一來檔案的隻讀版本還保留着,我們修改的隻是一個副本,并将這個副本保留在了最上面的讀寫層,同時隻讀版本被讀寫層的檔案隐藏了。
而這個正是docker的另一牛逼哄哄的特性
寫時複制
。
通過這種機制,每個隻讀層都是永遠不會發生變化的了。當每次建立或擴充一個容器時,都會在容器棧的最頂層增加一個可寫層。在可寫層發生的變更隐藏掉底層的部分之後,各層在組合功能,進而擴充容器。
總感覺這東西真是和面向對象設計原則中的開閉原則不謀而合啊!!!
對修改關閉(除了第一層的可寫層都是隻讀的),對擴充開放(在最頂層修改,擴充容器)。
2 基礎指令
2.1 檢視鏡像
docker images
-a, --all=true|false
顯示所有鏡像。預設情況下,那些中間層的鏡像不會被顯示.The default is false.
--digests=true|false
Show image digests. The default is false.
--no-trunc=true|false
不會截斷輸出. The default is false.
-f, --filter=[]
帶條件地列出鏡像
鏡像儲存于倉庫中,這裡說的倉庫有點類似于git的倉庫。
一個倉庫可以存儲多個鏡像,通過 TAG 來區分。
倉庫存在于Registry中,預設情況下,Registry是DockerHub。
[root@h1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
csphere/centos e3a35d3b1588 hours ago MB
hub.c..com/library/nginx latest b1d6e5f8fe92 days ago MB
daocloud.io/centos eb24acd8692d weeks ago MB
centos latest baab0af79c4 weeks ago MB
centos e46367f846 weeks ago MB
centos centos7. a77536ad4c weeks ago MB
hello-world latest f0cb9bdcaa69 months ago kB
<none> <none> b45d87d28 months ago MB
[root@h1 ~]#
[root@h1 ~]# docker images centos
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
centos latest baab0af79c4 weeks ago MB
centos e46367f846 weeks ago MB
centos centos7. a77536ad4c weeks ago MB
2.2 拉取鏡像
docker pull 指令其實就是下載下傳鏡像用的。預設情況下是從DockerHub下載下傳。
當我們使用run指令來從一個鏡像啟動容器時,如果鏡像不在本地,docker就會從DockerHub去pull該鏡像對應的最新版本,即TAG為latest的版本。
docker pull
-a, --all-tags=true|false
Download all tagged images in the repository. The default is false.
[[email protected] ~]# docker pull fedora
latest: Pulling from fedora
daf0c008c194: Pull complete
daf0c008c194: Pulling fs layer
Digest: sha256:e34f51fc00844fe87fd2cf3afe43d7e2f360fabedb56a7c81791958df1
Status: Downloaded newer image for fedora:latest
[[email protected] ~]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
csphere/centos e3a35d3b1588 hours ago MB
hub.c.com/library/nginx latest b1d6e5f8fe92 days ago MB
daocloud.io/centos eb24acd8692d weeks ago MB
centos latest baab0af79c4 weeks ago MB
centos f846 weeks ago MB
centos centos7 a77536ad4c weeks ago MB
fedora latest daf0c008c194 weeks ago MB
hello-world latest f0cb9bdcaa69 months ago kB
<none> <none> b45d87d28 months ago MB
[[email protected] ~]#
# 指定TAG
[[email protected] ~]# docker pull fedora:20
: Pulling from fedora
a45be3b30145: Downloading [======>……
…………………………
…………………………
2.3 搜尋鏡像
這裡指的搜尋不是本地搜尋,而是在遠端的DockerHub上搜尋。比如:
[[email protected] ~]# docker search nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. [OK]
jwilder/nginx-proxy Automated Nginx reverse proxy for docker c... [OK]
richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable ... [OK]
million12/nginx-php Nginx + PHP-FPM , , (NG), CentOS... [OK]
# ...............
[[email protected] ~]#
以上搜尋結果的标題含義:
- NAME:鏡像所在倉庫名,可以用它來pull鏡像
- DESCRIPTION:鏡像描述
- STARS:使用者評價
- OFFICIAL:是否是官方的
- AUTOMATED:是否是使用自動建構流程建立的
2.4 删除鏡像
docker rmi:删除指定鏡像
# 删除fedora最新版的鏡像
[[email protected] ~]# docker rmi -f fedora:latest
Untagged: fedora:latest
Deleted: daf0c008c194f2bae4f4bf36327d9166bc1dfa9fbbadb2ad585c1f11037fd787