在 Azure 平臺上佈署微服務,私有容器登入函式庫扮演著關鍵角色。本文將引導您逐步建立 Azure 私有容器登入函式庫,並示範如何將 Docker 映象安全地釋出到其中。首先,您需要在 Azure 入口網站中建立資源群組,並組態登入函式庫的相關細節,例如名稱、SKU 等。完成後,啟用 Admin User 選項以取得完整的管理許可權。接著,利用 docker login 指令驗證登入函式庫,使用 docker tag 標記映象版本,最後使用 docker push 指令將映象推播至私有容器登入函式庫。過程中,我們還會示範如何檢視已上傳的映象版本,並直接從登入函式庫啟動容器進行測試,確保佈署流程的正確性。此外,文章也提供本地環境清理的步驟,移除不必要的容器和映象,維持開發環境的整潔。

步驟 3:建立登入函式庫

在審核過程中,確認所有細節正確無誤後,點選「Create」按鈕來建立私有容器登入函式庫。這個過程可能需要一些時間,建立完成後會出現「Deployment Succeeded」通知。

步驟 4:檢視登入函式庫細節

建立完成後,可以透過點選「Go to Resource」按鈕來檢視新建立的登入函式庫的細節。或者,可以透過點選左側選單中的「All Resources」來找到所有的資源,包括新建立的登入函式庫。

步驟 5:啟用 Admin User 選項

為了能夠與登入函式庫進行身份驗證,需要啟用「Admin User」選項。這樣就可以在推播和提取映象時使用登入函式庫的 URL 和憑證進行身份驗證。

步驟 6:記錄登入函式庫憑證

最後,需要記錄下登入函式庫的使用者名稱和密碼(只需要第一個密碼)。這些憑證將用於後續的映象推播和提取操作。

內容解密:

上述過程描述瞭如何在 Azure 中建立私有容器登入函式庫的步驟。這個過程涉及到建立資源群組、組態登入函式庫細節、建立登入函式庫、檢視登入函式庫細節、啟用 Admin User 選項和記錄登入函式庫憑證等幾個重要步驟。每一步都需要仔細操作,以確保私有容器登入函式庫的順利建立和後續的映象管理。

  flowchart TD
    A[建立資源群組] --> B[組態登入函式庫細節]
    B --> C[建立登入函式庫]
    C --> D[檢視登入函式庫細節]
    D --> E[啟用 Admin User 選項]
    E --> F[記錄登入函式庫憑證]

圖表翻譯:

此圖表描述了建立私有容器登入函式庫的流程。從左到右,分別是建立資源群組、組態登入函式庫細節、建立登入函式庫、檢視登入函式庫細節、啟用 Admin User 選項和記錄登入函式庫憑證。每個步驟都對應著上述過程中的具體操作,透過這個圖表,可以清晰地看到整個過程的邏輯順序和相互關係。

容器登入詳情觀看

在建立新的容器登入後,瞭解其詳情至關重要。以下是您需要觀看的關鍵訊息:

身份驗證詳情

  • 登入名稱:您的容器登入的名稱,這是您用來識別和存取登入的唯一標識。
  • 登入URL:這是您的容器登入的網址,透過這個URL,您可以存取和管理您的容器映像。
  • 啟用管理員使用者:確保啟用管理員使用者許可權,以便您可以完全控制和管理您的容器登入。

檢視登入詳情的步驟

  1. 存取登入平臺:首先,您需要登入您的容器登入平臺。這通常涉及到輸入您的使用者名和密碼進行身份驗證。
  2. 導航到登入設定:登入後,導航到與您的容器登入相關的設定或管理頁面。
  3. 查詢登入名稱和URL:在設定頁面中,您應該能夠找到您的登入名稱和URL。這些訊息對於推播和提取容器映像至關重要。
  4. 檢查管理員許可權:確認您的使用者帳戶具有管理員許可權,以便您可以執行所有必要的操作,包括建立、編輯和刪除容器映像。

安全考慮

  • 保護您的登入:確保您的容器登入受到強大的密碼和適當的存取控制保護。這包括啟用兩步驗證(2FA)以增加安全性。
  • 監控登入活動:定期檢查您的容器登入的活動記錄,以確保沒有未經授權的存取或操作。

透過遵循這些步驟和考慮安全性,您可以有效地管理您的容器登入,保護您的容器映像,並確保您的DevOps工作流程順暢高效。

圖表翻譯:

  flowchart TD
    A[存取登入平臺] --> B[導航到登入設定]
    B --> C[查詢登入名稱和URL]
    C --> D[檢查管理員許可權]
    D --> E[保護您的登入]
    E --> F[監控登入活動]

此流程圖展示了檢視和管理容器登入詳情的步驟,從存取登入平臺開始,到保護您的登入和監控活動為止。每一步驟都對於確保您的容器映像的安全和可管理性至關重要。

發布微服務到私有容器登入函式庫

現在,我們已經擁有一個私有的容器登入函式庫,可以用來發布我們的第一個微服務。為了發布微服務,我們需要將其封裝為 Docker 映像,並將其推播到登入函式庫。

驗證與私有容器登入函式庫

在推播映像到登入函式庫之前,我們需要先驗證 ourselves。由於我們已經啟用了驗證,因此只有授權的使用者才能將映像發布到登入函式庫。在之前的章節中,我們建立了一個私有的容器登入函式庫,並記下了其詳細訊息。為了與登入函式庫進行通訊,我們需要知道其 URL。同時,我們還需要使用者名和密碼來推播和提取映像。

使用 Docker 登入命令進行驗證

為了驗證,我們將使用 docker login 命令。這個命令需要提供登入函式庫的 URL、使用者名和密碼。請注意,這些訊息是特定於您的登入函式庫的,因此您需要使用您自己的登入函式庫詳細訊息。

docker login <registry_url>

推播映像到私有容器登入函式庫

一旦驗證成功後,我們就可以使用 docker push 命令將映像推播到私有容器登入函式庫。這個命令需要指定映像的名稱和標籤,以及登入函式庫的 URL。

docker push <registry_url>/<image_name>

公共與私有映像

雖然本章主要關注私有 Docker 映像,但您也可以發布公共映像。例如,如果您建立了一個開源微服務,您可以建立一個 Docker 映像,並將其發布到 Docker Hub。這樣可以幫助您的使用者快速地執行您的微服務。

私有容器登入函式庫與 Docker Hub

Docker Hub 同時支援公共和私有映像的發布。然而,要發布多個私有映像,您需要升級到付費賬戶。

內容解密:

在上述過程中,我們使用了 docker logindocker push 命令來驗證和推播映像到私有容器登入函式庫。這些命令需要提供登入函式庫的 URL、使用者名和密碼,以確保只有授權的使用者才能發布映像。

圖表翻譯:

以下是使用 Mermaid 語法繪製的私有容器登入函式庫和 Docker 映像之間的關係圖表:

  flowchart TD
    A[私有容器登入函式庫] --> B[Docker 映像]
    B --> C[發布]
    C --> D[驗證]
    D --> E[推播]
    E --> F[私有容器登入函式庫]

這個圖表展示了私有容器登入函式庫、Docker 映像、發布、驗證和推播之間的關係。

釋出微服務的映象到容器登入函式庫

當我們準備好微服務的映象後,就可以釋出它到容器登入函式庫中。登入函式庫可以包含多個映象,每個映象都代表著一個特定的軟體版本。

登入到容器登入函式庫

在釋出映象之前,我們需要先登入到容器登入函式庫。這可以透過 docker login 命令來完成。登入命令的格式如下:

docker login <你的登入函式庫 URL> --username <你的使用者名稱> --password <你的密碼>

請注意,你需要替換 <你的登入函式庫 URL><你的使用者名稱><你的密碼> 為你的實際登入函式庫 URL、使用者名稱和密碼。

標記映象

在釋出映象之前,我們需要給映象打上標籤,以指定它將被推播到哪個登入函式庫。標籤命令的格式如下:

docker tag <現有的映象> <登入函式庫 URL>/<映象名稱>:<版本>

這裡,<現有的映象> 是你要標記的映象名稱,<登入函式庫 URL> 是你的登入函式庫 URL,<映象名稱> 是你要給映象的名稱,<版本> 是你要給映象的版本號。

驗證標籤

在給映象打上標籤後,我們可以透過 docker images 命令來驗證標籤是否已經被應用:

docker images

這將顯示所有可用的映象,包括剛剛被標記的映象。

內容解密:

在上面的命令中,我們使用 docker tag 命令給映象打上標籤。這個命令的格式是 docker tag <現有的映象> <登入函式庫 URL>/<映象名稱>:<版本>。這裡,<現有的映象> 是你要標記的映象名稱,<登入函式庫 URL> 是你的登入函式庫 URL,<映象名稱> 是你要給映象的名稱,<版本> 是你要給映象的版本號。

例如,如果我們要給一個名為 my-image 的映象打上標籤,並將它推播到一個名為 my-registry 的登入函式庫中,我們可以使用以下命令:

docker tag my-image my-registry/my-image:latest

這將給 my-image 映象打上 my-registry/my-image:latest 的標籤。

圖表翻譯:

  graph LR
    A[登入到容器登入函式庫] --> B[標記映象]
    B --> C[驗證標籤]
    C --> D[推播映象到登入函式庫]

在上面的圖表中,我們展示了釋出微服務的映象到容器登入函式庫的過程。首先,我們需要登入到容器登入函式庫,然後給映象打上標籤,以指定它將被推播到哪個登入函式庫。最後,我們可以驗證標籤是否已經被應用,並將映象推播到登入函式庫中。

釋出微服務

釋出微服務到登入函式庫是最後一步。為了完成這個步驟,我們需要使用 docker tag 命令來標記我們的映象。這個命令的語法如下:

docker tag <映象名稱> <登入函式庫URL>/<使用者名稱>/<映象名稱>:<版本>

在這裡, <映象名稱> 是我們要標記的映象名稱, <登入函式庫URL> 是我們的登入函式庫 URL, <使用者名稱> 是我們的使用者名稱, <映象名稱> 是我們要釋出的映象名稱, <版本> 是映象的版本號。

例如,如果我們想要將一個名為 my-microservice 的映象釋出到 Docker Hub 登入函式庫,我們可以使用以下命令:

docker tag my-microservice:latest玄貓/my-microservice:latest

這個命令會將 my-microservice:latest 映象標記為 玄貓/my-microservice:latest,並將其釋出到 Docker Hub 登入函式庫。

圖表翻譯:

  graph LR
    A[映象名稱] --> B[登入函式庫URL]
    B --> C[使用者名稱]
    C --> D[映象名稱]
    D --> E[版本號]
    E --> F[標記映象]
    F --> G[釋出到登入函式庫]

內容解密:

在上面的命令中,我們使用 docker tag 命令來標記我們的映象。這個命令會將現有的映象標記為新的名稱和版本號。注意,Docker 沒有建立一個新的映象,而是簡單地應用了一個新的標記到現有的映象上。

程式碼:

# 標記映象
docker tag my-microservice:latest玄貓/my-microservice:latest

# 釋出映象到登入函式庫
docker push 玄貓/my-microservice:latest

圖表:

  flowchart TD
    A[標記映象] --> B[釋出映象]
    B --> C[登入函式庫]

圖表翻譯:

在這個流程圖中,我們可以看到標記映象和釋出映象到登入函式庫的步驟。首先,我們使用 docker tag 命令來標記我們的映象。然後,我們使用 docker push 命令來釋出映象到登入函式庫。

Docker 推播指令格式

Docker 推播指令的基本格式為:

docker push <registry-url>/<image-name>:<version>

其中,<registry-url> 是倉函式庫的 URL,<image-name> 是映像檔的名稱,<version> 是映像檔的版本號。

推播映像檔到倉函式庫

當您執行 docker push 指令時,Docker 會將指定的映像檔推播到指定的倉函式庫中。推播過程中,Docker 會顯示推播的進度和結果。

驗證映像檔是否成功推播到倉函式庫

推播完成後,您可以透過 Azure 入口網站驗證映像檔是否成功推播到倉函式庫。步驟如下:

  1. 前往 Azure 入口網站並導航到「所有資源」頁面。
  2. 找到您的倉函式庫並點選它。
  3. 點選左側選單中的「Repositories」。
  4. 您應該可以看到您的映像檔出現在倉函式庫的列表中。如果您點選映像檔,您可以看到其版本號和詳細訊息。

上傳新版本

當您更新映像檔的程式碼時,您需要重新建立、標記和推播映像檔。您可以使用 docker builddocker push 指令來完成這個過程。例如:

docker build -t <image-name>:<version>.
docker push <registry-url>/<image-name>:<version>

請記得替換 <registry-url><image-name> 為您的倉函式庫 URL 和映像檔名稱。

自動化推播過程

在第 8 章中,您將學習如何自動化推播過程,以便更容易地管理您的微服務。

檢視已上傳至私人登入函式庫的所有映像檔

在 Azure 入口網站中,我們可以檢視私人登入函式庫的詳細資訊,包括已上傳的映像檔。點選映像檔名稱,即可檢視其版本詳細資訊。

檢視映像檔版本

當我們點選映像檔名稱後,會看到已釋出的版本清單。目前,我們只釋出了一個版本。

從登入函式庫啟動微服務

恭喜您,剛剛釋出了第一個映像檔至私人登入函式庫!現在,您可以將此映像檔佈署至生產環境,但我們將在第 6 章中學習如何將微服務佈署至 Kubernetes。 在那之前,您仍有工作要做和東西要學習。

在繼續之前,我們應該確認已釋出的映像檔是否正常工作。也就是說,我們應該能夠直接從雲端登入函式庫中的映像檔啟動容器。即使我們尚未設定生產環境,也不意味著我們不能在開發電腦上模擬佈署。這並不困難,而且與您在本章中學習的內容沒有太大區別。無論映像檔是本地建立的還是來自遠端登入函式庫,執行容器的過程基本相同。

清理本地環境

在測試登入函式庫中的映像檔之前,有一件事需要做:我們必須先移除本地版本的映像檔。如果不這樣做,當我們執行 docker run 命令時,它將啟動本地版本的映像檔,而不是從遠端登入函式庫中提取映像檔。因此,我們需要確保移除本地容器和映像檔。

# 刪除本地容器
docker container rm <container_id>

# 刪除本地映像檔
docker image rm <image_id>

從登入函式庫執行容器

現在,我們可以使用 docker run 命令從登入函式庫中執行容器了。

docker run -p 8080:8080 <registry_url>/<image_name>:<tag>

這將啟動一個新的容器例項,使用登入函式庫中的映像檔,並將其連線埠 8080 對映至主機的連線埠 8080。

圖表翻譯:

  flowchart TD
    A[從登入函式庫中提取映像檔] --> B[執行容器]
    B --> C[啟動微服務]
    C --> D[測試微服務]

這個流程圖描述了從登入函式庫中提取映像檔、執行容器、啟動微服務以及測試微服務的過程。

容器化佈署與管理

在上一節中,我們已經成功將 Docker 映像檔釋出到私有容器登入函式庫中。現在,我們將學習如何使用 docker run 命令來啟動容器,並測試我們釋出的映像檔。

啟動容器

當我們執行 docker run 命令時,Docker 會從登入函式庫中下載映像檔,如果本地尚未存在的話。然後,Docker 會根據映像檔建立一個新的容器例項。

docker run [options] image_name [command]

在這個命令中,image_name 是我們要啟動的映像檔名稱,command 是可選的,指定容器啟動後要執行的命令。

移除容器與映像檔

在我們完成測試後,需要移除不再需要的容器與映像檔,以節省系統資源。然而,在移除映像檔之前,我們必須先移除所有根據該映像檔的容器。

docker container list --all

這個命令會顯示所有容器,包括正在執行和已停止的容器。找到我們要移除的容器,並記下其容器 ID。

docker stop <container_id>
docker rm <container_id>

<container_id> 替換為我們要移除的容器 ID。這兩個命令分別用於停止容器和移除容器。

內容解密:

  • docker run 命令用於啟動一個新的容器例項。
  • docker container list --all 命令用於顯示所有容器,包括正在執行和已停止的容器。
  • docker stop 命令用於停止一個容器。
  • docker rm 命令用於移除一個容器。

圖表翻譯:

  flowchart TD
    A[啟動容器] --> B[下載映像檔]
    B --> C[建立容器例項]
    C --> D[啟動容器]
    D --> E[測試容器]
    E --> F[停止容器]
    F --> G[移除容器]
    G --> H[移除映像檔]

這個流程圖描述了從啟動容器到移除映像檔的整個過程。每一步驟都對應到特定的 Docker 命令或操作。

移除容器和映象

在上一節中,我們建立並推播了映象到私有容器登入中心。現在,我們需要移除本地的容器和映象,以確保我們的環境保持乾淨。

首先,讓我們移除容器:

docker rm <your-container-id>

然後,我們可以使用 docker ps 命令來檢查容器是否已經被移除。

接下來,讓我們移除映象:

docker image list

這個命令會顯示所有本地的映象。我們需要移除我們的微服務映象:

docker rmi <your-image-id> --force

注意,你需要使用你自己的映象 ID,而不是 <your-image-id>

從登入中心執行容器

現在,我們可以從私有容器登入中心執行容器:

docker run -d -p 3000:3000 -e PORT=3000 <registry-url>/<image-name>:<version>

這個命令會從登入中心下載映象並執行容器。

刪除容器登入中心

如果你不需要容器登入中心了,你可以透過 Azure 入口網站刪除它。

清除所有 Docker 容器和映象

如果你需要清除所有 Docker 容器和映象,你可以使用以下命令:

docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
docker system prune --volumes --all

這些命令會停止和移除所有容器,然後清除所有快取的映象。

Docker 概覽

在這一章中,我們學習瞭如何建立 Dockerfile、構建映象、推播映象到私有容器登入中心、執行容器等。以下是本章的摘要:

  • 建立 Dockerfile 來指示 Docker 如何構建映象
  • 使用 docker build 命令來構建映象
  • 建立私有容器登入中心並推播映象到其中
  • 使用 docker run 命令來執行容器

以下是本章中使用的命令:

命令說明
docker build構建映象
docker tag標記映象
docker login登入私有容器登入中心
docker push推播映象到私有容器登入中心
docker run執行容器
docker rm移除容器
docker rmi移除映象
docker system prune清除所有快取的映象

容器化技術正推動著雲原生應用的快速發展。深入剖析 Docker 的核心功能,我們可以看到它在構建、釋出和執行微服務方面扮演著關鍵角色。Docker 提供了一套完整的工具鏈,涵蓋了從映象構建、標記、推播至私有倉函式庫,再到容器執行和管理的完整生命週期。透過標準化的容器格式,Docker 簡化了應用佈署流程,提升了開發效率。

然而,Docker 技術也存在一些限制。例如,安全性管理、映象大小控制、網路組態等方面仍需仔細考量。尤其在私有倉函式庫的管理上,許可權控制和安全策略的制定至關重要,以防止未經授權的存取和資料洩露。此外,在選擇公共或私有映象策略時,需要權衡成本、安全性、便利性等多重因素。

展望未來,隨著雲原生技術的持續演進,預計 Docker 將與 Kubernetes 等容器協調平臺更加緊密地整合,形成更完整的雲原生應用生態。同時,安全性、可觀察性、多雲支援等方面也將成為 Docker 未來發展的重點方向。

對於企業而言,採用 Docker 容器化技術是邁向雲原生架構的關鍵一步。技術團隊應著重於掌握 Docker 的核心概念和最佳實踐,並結合自身業務需求,制定合理的容器化策略,才能最大化地發揮 Docker 的價值,並在競爭激烈的市場中保持領先地位。玄貓認為,Docker 技術的成熟度已足以支援企業核心業務系統的容器化遷移,但仍需謹慎評估並做好風險管理。