將 Docker 映像推送到自託管註冊表
一、概述
本教程將演示如何將 Docker 映像推送到自託管的 Docker 註冊表。首先,我們將探討什麼是自託管註冊表以及它與公共註冊表有何不同。然後,我們將學習如何標記我們想要推送到自託管註冊表的圖像。最後,我們將看到如何實際推送這些圖像。
2. 自託管 Docker 註冊表
Docker 註冊表是一種管理容器映像存儲庫的服務。它允許我們執行諸如創建存儲庫、推送和拉取圖像以及管理存儲庫訪問等操作。雖然許多註冊表作為雲服務提供,但註冊表也可以是自託管的。
當通過雲提供註冊表時,我們不必關心它的託管和維護。我們只需要註冊服務,然後使用提供的功能。雲託管的**Docker 註冊表也稱為公共註冊表。** Docker Hub 是一個眾所周知的公共註冊表示例。
但是,如果公司有特殊要求,則可能無法選擇公共註冊。不能使用公共註冊的公司通常有自託管的,他們可以根據自己的要求進行定制。例如,一家公司可能有一項隱私政策,要求存儲庫只能通過公司的內部網絡訪問。或者公司可能需要對其圖像運行特定的漏洞掃描。
3. 為自託管註冊表標記圖像
我們必須以特定方式標記圖像,然後才能將它們推送到自託管註冊表。讓我們學習如何適當地標記圖像。
3.1。圖像名稱模式
推送圖像時,圖像名稱定義了圖像將被推送到的位置。這就是為什麼為了將映像推送到自託管註冊表,使用正確的命名模式至關重要。映像名稱必須包含註冊表主機、端口和存儲庫名稱,並且可以選擇後跟版本標記:
[registry host]:[registry port]/[repository name]:[tag name]
假設我們有一個在localhost
上運行並偵聽端口5000
的註冊表。以下是我們要推送到該註冊表中my-fancy-app
存儲庫的映像版本1.0.0
的示例名稱:
localhost:5000/my-fancy-app:1.0.0
我們將在本文的其餘部分使用這個示例。
現在我們知道要應用什麼命名模式,我們可以為我們的自託管註冊表準備一個圖像。首先,我們將了解如何使用正確的名稱構建新映像。然後我們將學習如何通過重命名來準備現有圖像。
3.2.標記新圖像
如果我們正在構建一個新鏡像並且已經準備好一個應用程序和 Dockerfile,我們可以使用 docker docker build
命令的-t
標誌,以便使用適當的名稱創建鏡像。使用上一節中的示例,命令將是:
$ docker build -t localhost:5000/my-fancy-app:1.0.0 .
這將使用正確的名稱標記新圖像,後跟可選的版本標記。點“。”行尾表示我們正在與 Dockerfile 相同的目錄中執行命令。
3.3.重新標記現有圖像
如果我們想將現有圖像推送到我們的自託管註冊表,我們首先需要使用與我們上面描述的命名模式匹配的新別名來標記圖像。我們可以使用docker tag
命令重新標記圖像:
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
例如,假設我們想要將一個名為my-fancy-app:1.0.0
的現有圖像推送到我們的自託管註冊表。我們只需使用docker tag
命令用與該註冊表匹配的新別名對其進行標記:
$ docker tag my-fancy-app:1.0.0 localhost:5000/my-fancy-app:1.0.0
4.推送圖片
一旦我們正確標記了圖像,我們就可以將其推送到我們的自託管註冊表。
公司通常需要身份驗證來保護他們的自託管註冊表。在這種情況下,我們首先需要使用docker login
命令登錄:
docker login [OPTIONS] [SERVER]
對於託管在localhost:5000
上的自託管註冊表,命令是:
$ docker login localhost:5000
登錄後,我們使用docker push
命令將鏡像推送到我們的自託管註冊表:
docker push [OPTIONS] NAME[:TAG]
讓我們看一下推送我們在上面的部分中準備的圖像的命令:
$ docker push localhost:5000/my-fancy-app:1.0.0
5. 驗證推送
最後一步是驗證映像現在是否在我們的自託管註冊表中可用。為此,我們將從該註冊表中提取圖像,但我們必須首先通過運行docker image rm
命令刪除緩存的本地圖像:
$ docker image rm localhost:5000/my-fancy-app:1.0.0
讓我們通過列出所有本地圖像並檢查我們的圖像是否不存在來驗證我們刪除了圖像:
$ docker images
接下來,讓我們使用docker pull
命令從我們的自託管註冊表中拉取鏡像:
$ docker pull localhost:5000/my-fancy-app:1.0.0
通過再次列出所有本地鏡像,我們可以驗證我們的鏡像是否已成功從我們的自託管註冊表中提取:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost:5000/my-fancy-app 1.0.0 d33a5b65c0f5 20 minutes ago 326MB
六,結論
在本文中,我們了解了自託管 Docker 註冊表是什麼以及我們可能使用它們的原因。我們還探索瞭如何準備鏡像——無論是預先存在的鏡像還是我們正在構建的新鏡像——以便我們可以將其推送到自託管註冊表。最後,我們學習瞭如何將正確標記的圖像推送到我們的示例註冊表。