Docker使用小結

一、配置鏡像加速

Ubuntu 16.04+、Debian 8+、CentOS 7

對於使用 systemd 的系統,請在 /etc/docker/daemon.json 中寫入如下內容(如果文件不存在請新建該文件)
{
    "bip": "10.10.100.1/24",
    "registry-mirrors": ["https://registry.docker-cn.com"],
    "live-restore": true
}

注意,一定要保證該文件符合 json 規範,否則 Docker 將不能啓動。
之後重新啓動服務。

Windows 10

在系統右下角托盤 Docker 圖標內右鍵菜單選擇 Settings ,打開配置窗口後左側導航菜單選擇 Daemon 。
在 Registry mirrors 一欄中填寫加速器地址 https://registry.docker-cn.com ,
之後點擊 Apply 保存後 Docker 就會重啓並應用配置的鏡像地址了。

macOS

在任務欄點擊 Docker for mac 應用圖標 -> Perferences... -> Daemon -> Registry mirrors。
在列表中填寫加速器地址 https://registry.docker-cn.com 。
修改完成之後,點擊 Apply & Restart 按鈕,Docker 就會重啓並應用配置的鏡像地址了。

檢查加速器是否生效

在命令行執行 docker info ,如果從結果中看到了如下內容,說明配置成功。

Registry Mirrors:
https://registry.docker-cn.com/

二、獲取鏡像並運行容器

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

Docker 鏡像倉庫地址:地址的格式一般是 <域名/IP>[:端口號] 。默認地址是 Docker Hub。
倉庫名:這裏的倉庫名是兩段式名稱,即 <用戶名>/<軟件名> 。如果不給出用戶名,則默認爲 library ,也就是官方鏡像。

比如:
$ docker pull ubuntu:16.04

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

$ docker run -it --rm ubuntu:16.04 /bin/bash

docker run 就是運行容器的命令,這裏簡要的說明上面用到的參數。
-it :這是兩個參數,一個是 -i :交互式操作,一個是 -t 終端。
--rm :這個參數是說容器退出後隨之將其刪除。
ubuntu:16.04 :這是指用 ubuntu:16.04 鏡像爲基礎來啓動容器。
/bin/bash :放在鏡像名後的是命令,這裏我們希望有個交互式 Shell

最後我們通過 exit 退出了這個容器。

三、列出鏡像

要想列出已經下載下來的鏡像,可以使用 docker image ls 命令。
列表包含了 倉庫名 、 標籤 、 鏡像 ID 、 創建時間 以及 所佔用的空間 。

$ docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              735f80812f90        3 weeks ago         83.5MB
B
<none>              <none>              00285df0df87        5 days ago          342 M
B

鏡像體積
你可以通過以下命令來便捷的查看鏡像、容器、數據卷所佔用的空間。

$ docker system df
TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              1                   0                   83.49MB             83.49MB (100%)
Containers          0                   0                   0B                  0B
Local Volumes       0                   0                   0B                  0B
Build Cache         0                   0                   0B                  0B

虛懸鏡像
上面的鏡像列表中,還可以看到一個特殊的鏡像,這個鏡像既沒有倉庫名,也沒有標籤,均
爲 <none> 。:

<none>              <none>              00285df0df87        5 days ago          342 M
B

由於新舊鏡像同名,舊鏡像名稱被取消,從而出現倉庫名、標籤均爲 <none> 的鏡像。 docker build 也同樣可以導致這種現象。這類無標籤鏡像也被稱爲 虛懸鏡像(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

中間層鏡像
默認的 docker image ls 列表中只會顯示頂層鏡像,如果希望顯示包括中間層鏡像在內的所有鏡像的話,需要加 -a 參數
$ docker image ls -a

列出部分鏡像

#根據倉庫名列出鏡像
$ docker image ls ubuntu

#列出特定的某個鏡像,也就是說指定倉庫名和標籤
$ docker image ls ubuntu:16.04

#希望看到在mongo:3.2 之後建立的鏡像
$ docker image ls -f since=mongo:3.2

#希望看到在mongo:3.2 之前建立的鏡像
$ docker image ls -f before=mongo:3.2

#如果鏡像構建時定義了 LABEL ,還可以通過 LABEL 來過濾
$ docker image ls -f label=com.example.version=0.1
...

以特定格式顯示

#列出鏡像結果,並且只包含鏡像ID和倉庫名
$ docker image ls --format "{{.ID}}: {{.Repository}}"
735f80812f90: ubuntu
00285df0df87: <none>

#以表格等距顯示,並且有標題行,和默認一樣,不過自己定義列:
$ docker image ls --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}"
IMAGE ID            REPOSITORY          TAG
735f80812f90        ubuntu              latest
00285df0df87        <none>              <none>

四、刪除本地鏡像

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

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

比如我們有這麼一些鏡像:

$ docker image ls
REPOSITORY       TAG           IMAGE ID            CREATED           SIZE
centos           latest        0584b3d2cf6d        3 weeks ago       196.5 MB
redis            alpine        501ad78535f0        3 weeks ago       21.03 MB

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

使用 鏡像短 ID 、 鏡像長 ID 、 鏡像名 刪除鏡像。
$ docker image rm 501
$ docker image rm redis

#當然,更精確的是使用 鏡像摘要 刪除鏡像。
$ docker image ls --digests
$ docker image rm node@sha256:b4f0e0bdeb578043c1ea6862f0d40cc4afe32a4a582f3be235a3b164
422be228

注:如果觀察上面這幾個命令的運行輸出信息的話,你會注意到刪除行爲分爲兩類,一類是Untagged ,另一類是 Deleted 。
當我們刪除鏡像的時候,首先需要做的是將滿足我們要求的所有鏡像標籤都取消,這就是我們看到的 Untagged 的信息。因爲一個鏡像可以對應多個標籤,當我們刪除了所指定的標籤後,可能還有別的標籤指向了這個鏡像,所以並非所有的 docker image rm 都會產生刪除鏡像的行爲,有可能僅僅是取消了某個標籤而已。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章