文章首發我的網站: https://www.exception.site/docker/docker-pull-imagemysql
本文中,咱們將須要學習 Docker 如何下載鏡像?sql
1、前言
你們都知道,鏡像是 Docker 三大核心概念中最重要的。若是咱們想要在本地運行容器,就必須保證本地存在對應的鏡像。因此,第一步,咱們須要下載鏡像。當咱們嘗試下載鏡像時,Docker 會嘗試先從默認的鏡像倉庫(默認使用 Docker Hub 公共倉庫)去下載,固然了,用戶也能夠自定義配置想要下載的鏡像倉庫。docker
2、下載鏡像
鏡像是運行容器的前提,咱們能夠使用 docker pull [IMAGE_NAME]:[TAG]
命令來下載鏡像,其中 IMAGE_NAME
表示的是鏡像的名稱,而 TAG
是鏡像的標籤,也就是說咱們須要經過 「鏡像 + 標籤」 的方式來下載鏡像。bash
注意:您也能夠不顯式地指定 TAG, 它會默認下載 latest 標籤,也就是下載倉庫中最新版本的鏡像。這裏並不推薦您下載 latest 標籤,由於該鏡像的內容會跟蹤鏡像的最新版本,並隨之變化,因此它是不穩定的。在生產環境中,可能會出現莫名其妙的 bug, 推薦您最好仍是顯示的指定具體的 TAG。服務器
舉個例子,如咱們想要下載一個 Mysql 5.7 鏡像,能夠經過命令來下載:學習
docker pull mysql:5.7
會看到控制檯輸出內容以下:網站
注意:因爲官方 DockerHub 倉庫服務器在國外,下載速度較慢,因此我將倉庫的地址更改爲了國內的
docker.io
的鏡像倉庫,因此在上圖中,鏡像前面會有docker.io
出現。spa
當有 Downloaded 字符串輸出的時候,說明下載成功了!!命令行
2、驗證
讓咱們來驗證一下,本地是否存在 Mysql5.7 的鏡像,運行命令:code
docker images
能夠看到本地的確存在該鏡像,確實是下載成功了!
3、下載鏡像相關細節
再說說上面下載鏡像的過程:
經過下載過程,能夠看到,一個鏡像通常是由多個層(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 經過前綴地址的不一樣,來保證不一樣倉庫中,重名鏡像的惟一性。
4、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
咱們能夠看到主要支持的子命令有:
-a, --all-tags=true|false
: 是否獲取倉庫中全部鏡像,默認爲否;--disable-content-trust
: 跳過鏡像內容的校驗,默認爲 true;
5、總結
本文中,咱們着重瞭解了 Docker 中如何下載鏡像,下載鏡像相關的細節,以及 Docker pull 相關子命令。祝您學習愉快!