Docker 下載鏡像


文章首發個人網站: https://www.exception.site/docker/docker-pull-image

本文中,我們將需要學習 Docker 如何下載鏡像?

一、前言

大家都知道,鏡像是 Docker 三大核心概念中最重要的。如果我們想要在本地運行容器,就必須保證本地存在對應的鏡像。所以,第一步,我們需要下載鏡像。當我們嘗試下載鏡像時,Docker 會嘗試先從默認的鏡像倉庫(默認使用 Docker Hub 公共倉庫)去下載,當然了,用戶也可以自定義配置想要下載的鏡像倉庫。

二、下載鏡像

鏡像是運行容器的前提,我們可以使用 docker pull [IMAGE_NAME]:[TAG]命令來下載鏡像,其中 IMAGE_NAME 表示的是鏡像的名稱,而 TAG 是鏡像的標簽,也就是說我們需要通過 “鏡像 + 標簽” 的方式來下載鏡像。

注意:您也可以不顯式地指定 TAG, 它會默認下載 latest 標簽,也就是下載倉庫中最新版本的鏡像。這里並不推薦您下載 latest 標簽,因為該鏡像的內容會跟蹤鏡像的最新版本,並隨之變化,所以它是不穩定的。在生產環境中,可能會出現莫名其妙的 bug, 推薦您最好還是顯示的指定具體的 TAG。

舉個例子,如我們想要下載一個 Mysql 5.7 鏡像,可以通過命令來下載:

docker pull mysql:5.7

會看到控制台輸出內容如下:

Docker 下載鏡像

注意:由於官方 DockerHub 倉庫服務器在國外,下載速度較慢,所以我將倉庫的地址更改成了國內的 docker.io 的鏡像倉庫,所以在上圖中,鏡像前面會有 docker.io 出現。

當有 Downloaded 字符串輸出的時候,說明下載成功了!!

二、驗證

讓我們來驗證一下,本地是否存在 Mysql5.7 的鏡像,運行命令:

docker images

驗證本地鏡像是否存在

可以看到本地的確存在該鏡像,確實是下載成功了!

三、下載鏡像相關細節

再說說上面下載鏡像的過程:

Docker 鏡像下載

通過下載過程,可以看到,一個鏡像一般是由多個層(layer) 組成,類似 f7e2b70d04ae這樣的串表示層的唯一 ID。

PS: 實際上完整的 ID 包括了 256 個 bit, 64 個十六進制字符組成的。

您可能會想,如果多個不同的鏡像中,同時包含了同一個層(layer),這樣重復下載,豈不是導致了存儲空間的浪費么?實際上,Docker 並不會這么傻會去下載重復的層(layer),Docker 在下載之前,會去檢測本地是否會有同樣 ID 的層,如果本地已經存在了,就直接使用本地的就好了。

另一個問題,不同倉庫中,可能也會存在鏡像重名的情況發生, 這種情況咋辦?

嚴格意義上,我們在使用 docker pull 命令時,還需要在鏡像前面指定倉庫地址(Registry), 如果不指定,則 Docker 會使用您默認配置的倉庫地址。例如上面,由於我配置的是國內 docker.io 的倉庫地址,我在 pull 的時候,docker 會默認為我加上 docker.io/library 的前綴。

如:當我執行 docker pull mysql:5.7 命令時,實際上相當於 docker pull docker.io/mysql:5.7,如果您未自定義配置倉庫,則默認在下載的時候,會在鏡像前面加上 DockerHub 的地址。

Docker 通過前綴地址的不同,來保證不同倉庫中,重名鏡像的唯一性。

四、PULL 子命令

命令行中輸入:

docker pull --help

會得到如下信息:

[root@iZbp1j8y1bab0djl9gdp33Z ~]# docker pull --help

Usage:  docker pull [OPTIONS] NAME[:TAG|@DIGEST]

Pull an image or a repository from a registry

Options:
  -a, --all-tags                Download all tagged images in the repository
      --disable-content-trust   Skip image verification (default true)
      --help                    Print usage

我們可以看到主要支持的子命令有:

  1. -a, --all-tags=true|false: 是否獲取倉庫中所有鏡像,默認為否;
  2. --disable-content-trust: 跳過鏡像內容的校驗,默認為 true;

五、總結

本文中,我們着重了解了 Docker 中如何下載鏡像,下載鏡像相關的細節,以及 Docker pull 相關子命令。祝您學習愉快!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM