關於 Docker 鏡像的操做,看完這篇就夠啦 !(上)

Docker 鏡像學習上
Docker 鏡像學習上

文章首發於微信公衆號: 小哈學Javamysql

鏡像做爲 Docker 三大核心概念中最重要的一個關鍵詞,它有不少操做,是您想學習容器技術不得不掌握的。本文將帶您一步一步,圖文並重,上手操做來學習它。面試

目錄:sql

  • 1、Docker 下載鏡像
    • 1.1 下載鏡像
    • 1.2 驗證
    • 1.3 下載鏡像相關細節
    • 1.4 PULL 子命令
  • 2、Docker 查看鏡像信息
    • 2.1 images 命令列出鏡像
    • 2.2 使用 tag 命令爲鏡像添加標籤
    • 2.3 使用 inspect 命令查看鏡像詳細信息
    • 2.4 使用 history 命令查看鏡像歷史
  • 3、Docker 搜索鏡像
    • 3.1 search 命令
    • 3.2 search 子命令
  • 4、總結

1、Docker 下載鏡像

若是咱們想要在本地運行容器,就必須保證本地存在對應的鏡像。因此,第一步,咱們須要下載鏡像。當咱們嘗試下載鏡像時,Docker 會嘗試先從默認的鏡像倉庫(默認使用 Docker Hub 公共倉庫)去下載,固然了,用戶也能夠自定義配置想要下載的鏡像倉庫。docker

1.1 下載鏡像

鏡像是運行容器的前提,咱們可使用 docker pull [IMAGE_NAME]:[TAG]命令來下載鏡像,其中 IMAGE_NAME 表示的是鏡像的名稱,而 TAG 是鏡像的標籤,也就是說咱們須要經過 「鏡像 + 標籤」 的方式來下載鏡像。bash

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

舉個例子,如咱們想要下載一個 Mysql 5.7 鏡像,能夠經過命令來下載:微信

docker pull mysql:5.7
複製代碼

會看到控制檯輸出內容以下:ide

Docker 下載鏡像
Docker 下載鏡像

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

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

1.2 驗證

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

docker images
複製代碼

驗證本地鏡像是否存在
驗證本地鏡像是否存在

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

1.3 下載鏡像相關細節

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

Docker 鏡像下載
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 經過前綴地址的不一樣,來保證不一樣倉庫中,重名鏡像的惟一性。

1.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
複製代碼

咱們能夠看到主要支持的子命令有:

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

2、Docker 查看鏡像信息

2.1 images 命令列出鏡像

經過使用以下兩個命令,列出本機已有的鏡像:

docker images
複製代碼

或:

docker image ls
複製代碼

以下圖所示:

Docker 查看鏡像信息
Docker 查看鏡像信息

對上述紅色標註的字段作一下解釋:

  • REPOSITORY: 來自於哪一個倉庫;
  • TAG: 鏡像的標籤信息,好比 5.七、latest 表示不一樣的版本信息;
  • IMAGE ID: 鏡像的 ID, 若是您看到兩個 ID 徹底相同,那麼實際上,它們指向的是同一個鏡像,只是標籤名稱不一樣罷了;
  • CREATED: 鏡像最後的更新時間;
  • SIZE: 鏡像的大小,優秀的鏡像通常體積都比較小,這也是我更傾向於使用輕量級的 alpine 版本的緣由;

注意:圖中的鏡像大小信息只是邏輯上的大小信息,由於一個鏡像是由多個鏡像層(layer)組成的,而相同的鏡像層本地只會存儲一份,因此,真實狀況下,佔用的物理存儲空間大小,可能會小於邏輯大小。

2.2 使用 tag 命令爲鏡像添加標籤

一般狀況下,爲了方便在後續工做中,快速地找到某個鏡像,咱們可使用 docker tag 命令,爲本地鏡像添加一個新的標籤。以下圖所示:

Docker tag 添加標籤
Docker tag 添加標籤

docker.io/mysql 鏡像,添加新的鏡像標籤 allen_mysql:5.7。而後使用 docker images 命令,查看本地鏡像:

Docker tag 添加標籤
Docker tag 添加標籤

能夠看到,本地多了一個 allen_mysql:5.7 的鏡像。細心的你必定還會發現,allen_mysql:5.7docker.io/mysql:5.7 的鏡像 ID 是如出一轍的,說明它們是同一個鏡像,只是別名不一樣而已。

docker tag 命令功能更像是, 爲指定鏡像添加快捷方式同樣。

2.3 使用 inspect 命令查看鏡像詳細信息

經過 docker inspect 命令,咱們能夠獲取鏡像的詳細信息,其中,包括建立者,各層的數字摘要等。

docker inspect docker.io/mysql:5.7
複製代碼

Docker inspect 查看鏡像詳細信息
Docker inspect 查看鏡像詳細信息

docker inspect 返回的是 JSON 格式的信息,若是您想獲取其中指定的一項內容,能夠經過 -f 來指定,如獲取鏡像大小:

docker inspect -f {{".Size"}} docker.io/mysql:5.7
複製代碼

Docker inspect 查看鏡像詳細信息
Docker inspect 查看鏡像詳細信息

2.4 使用 history 命令查看鏡像歷史

前面的小節中,咱們知道了,一個鏡像是由多個層(layer)組成的,那麼,咱們要如何知道各個層的具體內容呢?

經過 docker history 命令,能夠列出各個層(layer)的建立信息,如咱們查看 docker.io/mysql:5.7 的各層信息:

docker history docker.io/mysql:5.7
複製代碼

Docker history 各層信息
Docker history 各層信息

能夠看到,上面過長的信息,爲了方便展現,後面都省略了,若是您想要看具體信息,能夠經過添加 --no-trunc 選項,以下面命令:

docker history --no-trunc docker.io/mysql:5.7
複製代碼

3、Docker 搜索鏡像

3.1 search 命令

您能夠經過下面命令進行搜索:

docker search [option] keyword
複製代碼

好比,您想搜索倉庫中 mysql 相關的鏡像,能夠輸入以下命令:

docker search mysql
複製代碼

Docker 搜索鏡像
Docker 搜索鏡像

3.2 search 子命令

命令行輸入 docker search --help, 輸出以下:

Usage:  docker search [OPTIONS] TERM

Search the Docker Hub for images

Options:
  -f, --filter filter   Filter output based on conditions provided
      --help            Print usage
      --limit int       Max number of search results (default 25)
      --no-index        Don't truncate output --no-trunc Don't truncate output
複製代碼

能夠看到 search 支持的子命令有:

  • -f, --filter filter: 過濾輸出的內容;
  • --limit int:指定搜索內容展現個數;
  • --no-index: 不截斷輸出內容;
  • --no-trunc:不截斷輸出內容;

舉個列子,好比咱們想搜索官方提供的 mysql 鏡像,命令以下:

docker search --filter=is-offical=true mysql
複製代碼

Docker 搜索官方鏡像
Docker 搜索官方鏡像

再好比,咱們想搜索 Stars 數超過 100 的 mysql 鏡像:

docker search --filter=stars=100 mysql
複製代碼

Docker 搜索鏡像
Docker 搜索鏡像

4、總結

本文中,咱們着重學習了 Docker 中下載鏡像, 查看鏡像信息,以及搜索鏡像的相關操做。本文是上篇,下篇的文章中,將帶領您學習更多的鏡像操做,也祝您學習愉快!

贈送 | 面試&學習福利資源

最近在網上發現一個不錯的 PDF 資源《Java 核心面試知識.pdf》分享給你們,不光是面試,學習,你都值得擁有!!!

獲取方式: 關注公衆號: 小哈學Java, 後臺回覆 資源,既可獲取資源連接,下面是目錄以及部分截圖:

福利資源截圖
福利資源截圖

福利資源截圖
福利資源截圖

福利資源截圖
福利資源截圖

福利資源截圖
福利資源截圖

福利資源截圖
福利資源截圖

福利資源截圖
福利資源截圖

福利資源截圖
福利資源截圖

重要的事情說兩遍,獲取方式: 關注公衆號: 小哈學Java, 後臺回覆 資源,既可獲取資源連接 !!!

歡迎關注我的公衆號: 小哈學Java

小哈學Java
相關文章
相關標籤/搜索