【docker專欄5】詳解docker映象管理命令

字母哥部落格發表於2022-07-12

一、國內Docker映象倉庫

由於大家都知道的原因,從國外的docker 倉庫中pull映象的下載速度實際上是很慢的。國內的一些一線廠商以及docker官方都在國內免費提供了一些docker映象倉庫,使用國內的映象倉庫下載速度會有很大的提升。例如:

  • Docker 官方提供的中國 registry mirror
  • 阿里雲加速器
  • DaoCloud 加速器

我們以Docker官方提供的中國 registry mirror為例,來講解國內映象倉庫源的配置方式。將 /etc/docker/daemon.json檔案內容修改為如下內容,如果該檔案不存在就新建一個

{
"registry-mirrors":["https://registry.docker-cn.com"]
}

配置完成之後,重啟docker服務

sudo systemctl restart docker

再去下載pull映象,會發現比以前快了很多。就這麼簡單!

三、搜尋映象

Docker Hub上有很多的官方映象以及第三方上傳的高質量映象,下面就為大家介紹如何搜尋並獲取這些映象。

  • 第一種方式就是在Dcoker hub上直接搜尋映象,比如我搜尋redis映象,下方出現綠色盾牌標誌的就是redis官方提供的映象,安全性穩定性都是有保證的。
  • 第二種方式可以使用docker search來搜尋映象,

我們也可以使用 命令來搜尋映象。比如我們需要一個tomcat的映象來作為我們的web服務。我們可以通
過 docker search 命令搜尋tomcat來尋找適合我們的映象。

docker search redis

OFFICIAL欄位值為OK的那一條記錄為官方的映象。

四、拉取映象

從 Docker 映象倉庫獲取映象的命令是 docker pull其命令格式為:

docker pull [選項] [Docker Registey 地址[:埠號]/] 映象名[:標籤]

具體的選項可以通過 docker pull --help 命令看到,這裡我們說一下映象名稱的格式。

  • Docker 映象倉庫地址: 地址的格式一般是 <域名/IP>[:埠號]。如果使用預設映象倉庫,是不用寫倉庫地址的,如本文第一小節的配置。
  • 映象名稱:映象名稱包含兩部分 <使用者名稱>/<軟體名>。一般來說,軟體官方提供的映象一般都是沒有使用者名稱的。

示例:通過 docker pull獲取redis最新版本的映象

docker pull redis:latest

等同於

docker pull redis

五、列出映象

要想列出已經下載下來的映象,可以使用 docker image ls 命令。

docker images   //等同於docker image ls

  • REPOSITORY:倉庫及映象名稱
  • TAG:標籤及版本號
  • IMAGE ID:映象ID,映象的唯一標識
  • CREATED:該映象的構建時間
  • SIZE: 該映象檔案的大小

六、虛懸映象

在映象列表中,可能會存在一種特殊的映象,該映象既沒有倉庫名/映象名稱,也沒有標籤/版本號,這兩個位置均顯示<none>,這種映象通常被稱為虛懸映象,如下入所示。

虛懸映象產生的原因是什麼?
其實虛懸映象最開始pull下載的時候是有映象名稱和標籤版本號名稱的,比如redis官方釋出了一個docker映象6.0版本,過了一段時間發現6.0版本的映象有可能存在安全問題,所以重新構建了一個6.0版本的映象。
映象名稱redis和6.0的TAG都被新發布的映象佔用了,舊版本的映象就丟失了映象名稱和標籤,變成了虛懸映象。

一般來說,虛懸映象已經失去了存在的價值,是可以隨意刪除的,使用下面的命令刪除:

docker image prune

七、刪除本地映象

下面的兩種語法都可以完成映象刪除的操作:

docker rmi [選項] <映象1> [<映象2>.....]
docker image rm <映象1>  [<映象2>.....]

上文語法中可以使用 映象ID、映象名作為映象的唯一標識用來刪除映象。常用的[選項]是-f表示強制刪除,有的時候同一個映象上傳到多個倉庫,此時映象ID就不再是唯一標識,需要使用-f強制刪除才能刪除映象(具有同一個映象ID的所有本地映象全部刪除)。

需要注意的是:刪除映象之前必須確認被刪除的映象,沒有被任何容器使用,否則無法刪除。

如下所示,刪除hello-world映象的響應結果。

# docker rmi hello-world
Untagged: hello-world:latest
Untagged: hello-world@sha256:bfea6278a0a267fad2634554f4f0c6f31981eea41c553fdf5a83e95a41d40c38
Deleted: sha256:feb5d9fea6a5e9606aa995e879d862b825965ba48de054caab5ef356dc6b3412
Deleted: sha256:e07ee1baac5fae6a26f30cabfe54a36d3402f96afda318fe0a96cec4ca393359

八、映象的匯入匯出

用 save 子命令將本地倉庫的映象儲存為當前目錄下的tar檔案。

docker save -o <自定義包名>.tar <映象名稱>

如下面的命令將 hello-world映象匯出為一個helloworld.tar存放在當前目錄

docker save -o helloworld.tar hello-world

我們可以在另一臺伺服器上,將hello-world映象匯入,匯入方法如下:

匯入方式一(不輸出詳細資訊)

# docker load -i helloworld.tar

匯入方式二(輸出詳細資訊)

# docker load < helloworld.tar

映象匯出匯入功能可以用於映象備份,在沒有映象倉庫的公司中也可以使用這種tar包的方式傳遞映象檔案。
歡迎關注我的公告號:字母哥雜談,回覆003贈送本文所在專欄《docker修煉之道》的PDF版本,30餘篇精品docker文章。字母哥部落格:zimug.com

相關文章