獲取鏡像
docker pull [選項(xiàng)] [Docker Registry 地址 [:端口號(hào)] / ] 倉(cāng)庫(kù)名 [:標(biāo)簽]
示例:
$ docker pull ubuntu:16.04
沒(méi)有給出Docker鏡像倉(cāng)庫(kù)地址,因此將會(huì)從Docker Hub中獲取鏡像
運(yùn)行
$ docker run -it --rm \
ubuntu:16.04 \
bash
" \ "表示 換行
-it :這是兩個(gè)參數(shù),一個(gè)是 -i :交互式操作,一個(gè)是 -t 終端。我們這里打算進(jìn)入 bash 執(zhí)行一些命令并查看返回結(jié)果,因此我們需要交互式終端。
--rm :這個(gè)參數(shù)是說(shuō)容器退出后隨之將其刪除。默認(rèn)情況下,為了排障需求,退出的容器并不會(huì)立即刪除,除非手動(dòng) docker rm 。我們這里只是隨便執(zhí)行個(gè)命令,看看結(jié)果,不需要排障和保留結(jié)果,因此使用 --rm 可以避免浪費(fèi)空間。
ubuntu:16.04 :這是指用 ubuntu:16.04 鏡像為基礎(chǔ)來(lái)啟動(dòng)容器。
bash :放在鏡像名后的是命令,這里我們希望有個(gè)交互式 Shell,因此用的是 bash 。
列出鏡像
// 列出所有已經(jīng)下載的鏡像
$ docker image ls
// 效果同上條命令
$ docker images
結(jié)果:
//倉(cāng)庫(kù)名 標(biāo)簽 鏡像ID 創(chuàng)建時(shí)間 所占用的空間
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 16.04 00fd29ccc6f1 3 weeks ago 111MB
laradock_redis latest 19a977a11685 3 months ago 107MB
<none> <none> a03f07cc3324 3 months ago 15.5MB
laradock_php-fpm latest f4ad9b641995 3 months ago 400MB
laradock_workspace latest 318c7dc4d367 3 months ago 696MB
laradock_mysql latest 59affc42159e 3 months ago 343MB
redis latest b6dddb991dfa 3 months ago 107MB
mysql 8.0 6cfa8ff69d16 3 months ago 343MB
注:
1、這里的所占空間大小和 Docker Hub 上的鏡像大小不同,Docker Hub 中顯示的是壓縮后的大小。
2、這里的所占空間大小總和,并非實(shí)際的硬盤(pán)的占有大小,因?yàn)镈ocker鏡像是多層存儲(chǔ)結(jié)構(gòu),并且可以繼承、復(fù)用,因此不同鏡像可使用相同的基礎(chǔ)鏡像。
中間層鏡像
默認(rèn)的 docker image ls 列表中,只會(huì)顯示頂層鏡像,
// 顯示包括中間層鏡像在內(nèi)的所有鏡像
$ docker image ls -a
注:
這樣會(huì)看到很多無(wú)標(biāo)簽的鏡像,和之后的虛懸鏡像不同,這些無(wú)標(biāo)簽的鏡像很多都是中間層鏡像,這些無(wú)標(biāo)簽鏡像,不能刪除,否則會(huì)導(dǎo)致上層鏡像因?yàn)橐蕾噥G失而出錯(cuò)。
列出部分鏡像
// 根據(jù)倉(cāng)庫(kù)名列出鏡像
$ docker image ls ubuntu
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 16.04 00fd29ccc6f1 3 weeks ago 111MB
ubuntu 15.10 9b9cb95443b5 17 months ago 137MB
// 列出指定鏡像
$ docker image ls ubuntu:16.04
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 16.04 00fd29ccc6f1 3 weeks ago 111MB
// 顯示指定鏡像之后的鏡像列表(可比對(duì)之前的列表)
$ docker image ls -f since=redis
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 16.04 00fd29ccc6f1 3 weeks ago 111MB
laradock_redis latest 19a977a11685 3 months ago 107MB
<none> <none> a03f07cc3324 3 months ago 15.5MB
laradock_php-fpm latest f4ad9b641995 3 months ago 400MB
laradock_workspace latest 318c7dc4d367 3 months ago 696MB
laradock_mysql latest 59affc42159e 3 months ago 343MB
// 查看之前也可以,把 since 換成 before即可
以特定格式顯示
// 顯示鏡像ID
$ docker image ls -q
00fd29ccc6f1
19a977a11685
a03f07cc3324
f4ad9b641995
318c7dc4d367
59affc42159e
// 自定義結(jié)構(gòu)(使用了Go的模板語(yǔ)法)
$ docker image ls --format "{{.ID}}: {{.Repository}}"
00fd29ccc6f1: ubuntu
19a977a11685: laradock_redis
a03f07cc3324: <none>
f4ad9b641995: laradock_php-fpm
318c7dc4d367: laradock_workspace
59affc42159e: laradock_mysql
b6dddb991dfa: redis
// 以表格等距顯示,并且有標(biāo)題行
$ docker image ls --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}"
IMAGE ID REPOSITORY TAG
00fd29ccc6f1 ubuntu 16.04
19a977a11685 laradock_redis latest
a03f07cc3324 <none> <none>
f4ad9b641995 laradock_php-fpm latest
318c7dc4d367 laradock_workspace latest
59affc42159e laradock_mysql latest
b6dddb991dfa redis latest
鏡像、容器、數(shù)據(jù)卷所在空間
$ docker system df
注:因?yàn)樾枰y(tǒng)計(jì)的鏡像的大小,所以執(zhí)行會(huì)有些慢。
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 19 6 2.339GB 2.133GB (91%)
Containers 19 0 292.9kB 292.9kB (100%)
Local Volumes 17 0 0B 0B
Build Cache 0B 0B
虛懸鏡像
上面的列表中,存在一個(gè)特殊的鏡像,這個(gè)鏡像既無(wú)倉(cāng)庫(kù)名也無(wú)標(biāo)簽,均為<none>。
這是由于新舊鏡像同名,舊鏡像名稱被取消,所以出現(xiàn)倉(cāng)庫(kù)名、標(biāo)簽都為<none>的鏡像,也就是虛懸鏡像。
// 檢索此類鏡像
$ docker image ls -f dangling=true
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> a03f07cc3324 3 months ago 15.5MB
// 刪除此類鏡像
$ docker image prune
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y
Total reclaimed space: 0B
注:
再次檢索,可能還會(huì)有虛懸鏡像存在,這是因?yàn)橛衅渌R像依賴。
刪除本地鏡像
$ docker image rm [選項(xiàng)] <鏡像1> [<鏡像2> ...]
<鏡像>可以是鏡像的ID(可以省略后面部分,但要有唯一性)、倉(cāng)庫(kù)名、摘要。
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 16.04 00fd29ccc6f1 3 weeks ago 111MB
laradock_redis latest 19a977a11685 3 months ago 107MB
<none> <none> a03f07cc3324 3 months ago 15.5MB
laradock_php-fpm latest f4ad9b641995 3 months ago 400MB
laradock_workspace latest 318c7dc4d367 3 months ago 696MB
laradock_mysql latest 59affc42159e 3 months ago 343MB
redis latest b6dddb991dfa 3 months ago 107MB
// 刪除 laradock_mysql 鏡像(取ID的前三個(gè)字符)
$ docker image rm 59a
Untagged: laradock_mysql:latest
Deleted: sha256:59affc42159e311116e8505d5012606607109ec7ad8c2c5219fa05c3e1908d2d
Deleted: sha256:3cc7addd185366686786b581d02d88974978b45ecfbe9e836545271d3e7591e0
Deleted: sha256:295affe1cbf149bd05360a6fb9411d575506450f545ce69c08ce700ee341225f
Deleted: sha256:40ff835efbee0a844c96ccb695cb99c4d1f22d44e78ba8cc210423323935f81e
Deleted: sha256:cdb003b7b07a3b2d7809b31d25a77f3ed65bc1dc066f8f4868e5a86e9a77c723
Deleted: sha256:7a38549437804e837bd3cd5073555ce806640a654e011cc8933fb61974b5b2bc
Deleted: sha256:54661a4bf02571f947385c6c1216d9207a54af5127390364c51499df93695717
Deleted: sha256:ebc2d72325235c58372407b2c85c57d514253b88f6f01ecbadd4387f845d7306
Deleted: sha256:a6daead3b1372f15bd02b3e7512ef11030bd2b7d3b641fb54aade329ddb267f7
Deleted: sha256:9689cfa85ce950b075b93d888b105e2aca2b2eed658732a31e20594fcf0ef404
// 使用鏡像名刪除
$ docker image rm laradock_workspace
// 查看鏡像摘要
$ docker image ls --digests
REPOSITORY TAG DIGEST IMAGE ID CREATED SIZE
ubuntu 16.04 sha256:fbaf303d18563e57a3c1a0005356ad102509b60884f3aa89ef9a90c0ea5d1212 00fd29ccc6f1 3 weeks ago 111MB
laradock_redis latest <none> 19a977a11685 3 months ago 107MB
<none> <none> <none> a03f07cc3324 3 months ago 15.5MB
laradock_php-fpm latest <none> f4ad9b641995 3 months ago 400MB
laradock_workspace latest <none> 318c7dc4d367 3 months ago 696MB
redis latest sha256:472c9a984607e6194dc2e645d23907738b77bf76ea0abcf870cbde741d5f650a b6dddb991dfa 3 months ago 107MB
注:
上面命令的運(yùn)行輸出信息
Untagged :表示滿足刪除條件的鏡像標(biāo)簽,都取消,因?yàn)橐粋€(gè)鏡像可以有多個(gè)標(biāo)簽,只有當(dāng)這個(gè)鏡像的所有標(biāo)簽都取消了,才對(duì)觸發(fā)刪除操作,也就是 Deleted 表示的意思??紤]到Docker的多層存儲(chǔ)結(jié)構(gòu),就算是刪除操作,也只會(huì)刪除沒(méi)有任何鏡像的依賴的層。
使用docker image ls 命令配合刪除
// 刪除所有倉(cāng)庫(kù)名為 laradock_php-fpm 的鏡像
$ docker image rm $(docker image ls -q laradock_php-fpm)
// $(docker image ls -q laradock_php-fpm) 返回的是 laradock_php-fpm 鏡像的ID
// 注意 -q 的功能,所以是刪除指定 ID 的鏡像
// 刪除所有在 redis 之前的鏡像(原理同上)
$ docker image rm $(docker image ls -q -f before=redis)