docker入門與實踐之【03-鏡像】

1. 獲取鏡像

1.1 獲取鏡像

docker獲取鏡像的命令是pull,命令格式爲:nginx

docker pull [選項] [Docker Registry 地址[:端口號]/]倉庫名[:標籤]

具體的選項能夠經過 docker pull --help 命令看到,這裏咱們說一下鏡像名稱的格式。redis

  • Docker 鏡像倉庫地址:地址的格式通常是 <域名/IP>[:端口號]。默認地址是 Docker Hub。
  • 倉庫名:如以前所說,這裏的倉庫名是兩段式名稱,即 <用戶名>/<軟件名>。對於 Docker Hub,若是不給出用戶名,則默認爲 library,也就是官方鏡像。

示例:docker

docker pull ubuntu:16.04

1.2 運行

有了鏡像後,咱們就可以以這個鏡像爲基礎啓動並運行一個容器。以上面的 ubuntu:16.04 爲例,若是咱們打算啓動裏面的 bash 而且進行交互式操做的話,能夠執行下面的命令。ubuntu

$ docker run -it --rm \
    ubuntu:16.04 \
    bash
說明:

docker run 就是運行容器的命令,後面再細講。centos

  • -it:這是兩個參數,一個是 -i:交互式操做,一個是 -t 終端。咱們這裏打算進入 bash 執行一些命令並查看返回結果,所以咱們須要交互式終端。
  • --rm:這個參數是說容器退出後隨之將其刪除。默認狀況下,爲了排障需求,退出的容器並不會當即刪除,除非手動 docker rm。咱們這裏只是隨便執行個命令,看看結果,不須要排障和保留結果,所以使用 --rm 能夠避免浪費空間。
  • ubuntu:16.04:這是指用 ubuntu:16.04 鏡像爲基礎來啓動容器。
  • bash:放在鏡像名後的是命令,這裏咱們但願有個交互式 Shell,所以用的是 bash。

1.3 搜索鏡像

能夠經過 docker search 命令來查找官方倉庫中的鏡像bash

docker search centos
NAME                                            DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
centos                                          The official build of CentOS.                   465       [OK]
tianon/centos                                   CentOS 5 and 6, created using rinse instea...   28

1.4 推送鏡像

能夠經過 docker push 命令來將本身的鏡像推送到 Docker Hub。ui

$ docker tag ubuntu:17.10 USERNAME/ubuntu:17.10
$ docker push USERNAME/ubuntu:17.10

2. 列出鏡像

2.1列出鏡像

可使用docker image ls列出鏡像。code

$ docker image ls
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
redis                latest              5f515359c7f8        5 days ago          183 MB
nginx                latest              05a60462f8ba        5 days ago          181 MB

列表包含了 倉庫名、標籤、鏡像 ID、建立時間 以及 所佔用的空間。orm

2.2 鏡像體積

  • Docker Hub 中顯示的體積是壓縮後的體積,由於鏡像下載和上傳過程當中鏡像是保持着壓縮狀態
  • docker image ls 顯示的是鏡像下載到本地後,展開的大小,準確說,是展開後的各層所佔空間的總和
  • docker image ls 列表中的鏡像體積總和並不是是全部鏡像實際硬盤消耗。因爲 Docker 鏡像是多層存儲結構,而且能夠繼承、複用,所以不一樣鏡像可能會由於使用相同的基礎鏡像,從而擁有共同的層。因爲 Docker 使用 Union FS,相同的層只須要保存一份便可,所以實際鏡像硬盤佔用空間極可能要比這個列表鏡像大小的總和要小的多。

可使用docker system df來便捷的查看鏡像、容器、數據卷所佔用的空間。繼承

$ docker system df
TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              24                  0                   1.992GB             1.992GB (100%)
Containers          1                   0                   62.82MB             62.82MB (100%)
Local Volumes       9                   0                   652.2MB             652.2MB (100%)
Build Cache                                                 0B                  0B

2.3 虛懸鏡像

在鏡像列表中,還能夠看到一個特殊的鏡像,這個鏡像既沒有倉庫名,也沒有標籤,均爲 <none>。:

<none>               <none>              00285df0df87        5 days ago          342 MB
  • 這個鏡像本來是有鏡像名和標籤的,但隨着官方鏡像維護,發佈了新版本後,從新 docker pull 時,鏡像名被轉移到了新下載的鏡像身上,而舊的鏡像上的這個名稱則被取消,從而成爲了 <none>。除了 docker pull 可能致使這種狀況,docker build 也一樣能夠致使這種現象。
  • 因爲新舊鏡像同名,舊鏡像名稱被取消,從而出現倉庫名、標籤均爲 <none> 的鏡像。
  • 這類無標籤鏡像也被稱爲 虛懸鏡像(dangling image) ,能夠用下面的命令專門顯示這類鏡像:
$ docker image ls -f dangling=true
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
<none>              <none>              00285df0df87        5 days ago          342 MB

通常來講,虛懸鏡像已經失去了存在的價值,是能夠隨意刪除的,能夠用下面的命令刪除。

$ docker image prune

2.4 中間層鏡像

爲了加速鏡像構建、重複利用資源,Docker 會利用 中間層鏡像。docker image ls 列表中只會顯示頂層鏡像,若是但願顯示包括中間層鏡像在內的全部鏡像的話,須要加 -a 參數。

$ docker image ls -a

2.5 列出部分鏡像

不加任何參數的狀況下,docker image ls 會列出全部頂級鏡像,可是有時候咱們只但願列出部分鏡像。docker image ls有好幾個參數能夠幫助作到這個事情。

  • 根據倉庫名列出鏡像
$ docker image ls ubuntu
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              16.04               f753707788c5        4 weeks ago         127 MB
ubuntu              latest              f753707788c5        4 weeks ago         127 MB
  • 列出特定的某個鏡像,也就是說指定倉庫名和標籤
$ docker image ls ubuntu:16.04
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              16.04               f753707788c5        4 weeks ago         127 MB

除此之外,docker image ls 還支持強大的過濾器參數 --filter,或者簡寫 -f。以前咱們已經看到了使用過濾器來列出虛懸鏡像的用法,它還有更多的用法。好比,咱們但願看到在 mongo:3.2 以後創建的鏡像,能夠用下面的命令:

$ docker image ls -f since=mongo:3.2
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
redis               latest              5f515359c7f8        5 days ago          183 MB
nginx               latest              05a60462f8ba        5 days ago          181 MB

想查看某個位置以前的鏡像也能夠,只須要把 since 換成 before 便可。

此外,若是鏡像構建時,定義了 LABEL,還能夠經過 LABEL 來過濾。

$ docker image ls -f label=com.example.version=0.1

2.6 以特定格式顯示

默認狀況下,docker image ls 會輸出一個完整的表格,可使用-q參數僅列出鏡像id:

$ docker image ls -q
5f515359c7f8
05a60462f8ba

另一些時候,咱們可能只是對錶格的結構不滿意,但願本身組織列;或者不但願有標題,這樣方便其它程序解析結果等,這就用到了 Go 的模板語法。

示例1:列出鏡像結果,而且只包含鏡像ID和倉庫名

$ docker image ls --format "{{.ID}}: {{.Repository}}"
5f515359c7f8: redis
05a60462f8ba: nginx

示例2:以表格等距顯示,而且有標題行,自定義列:

$ docker image ls --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}"
IMAGE ID            REPOSITORY          TAG
5f515359c7f8        redis               latest
05a60462f8ba        nginx               latest

3.刪除鏡像

3.1 刪除本地鏡像

若是要刪除本地的鏡像,可使用 docker image rm 命令,其格式爲:

$ docker image rm [選項] <鏡像1> [<鏡像2> ...]

3.2 用 ID、鏡像名、摘要刪除鏡像

其中,<鏡像> 能夠是 鏡像短 ID、鏡像長 ID、鏡像名 或者 鏡像摘要。

也能夠用鏡像名,也就是 <倉庫名>:<標籤>,來刪除鏡像。

3.3 用 docker image ls 命令來配合

像其它能夠承接多個實體的命令同樣,可使用 docker image ls -q 來配合使用 docker image rm,這樣能夠成批的刪除但願刪除的鏡像。

好比,咱們須要刪除全部倉庫名爲 redis 的鏡像:

$ docker image rm $(docker image ls -q redis)
相關文章
相關標籤/搜索