在 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,您可以存取和管理您的容器映像。
- 啟用管理員使用者:確保啟用管理員使用者許可權,以便您可以完全控制和管理您的容器登入。
檢視登入詳情的步驟
- 存取登入平臺:首先,您需要登入您的容器登入平臺。這通常涉及到輸入您的使用者名和密碼進行身份驗證。
- 導航到登入設定:登入後,導航到與您的容器登入相關的設定或管理頁面。
- 查詢登入名稱和URL:在設定頁面中,您應該能夠找到您的登入名稱和URL。這些訊息對於推播和提取容器映像至關重要。
- 檢查管理員許可權:確認您的使用者帳戶具有管理員許可權,以便您可以執行所有必要的操作,包括建立、編輯和刪除容器映像。
安全考慮
- 保護您的登入:確保您的容器登入受到強大的密碼和適當的存取控制保護。這包括啟用兩步驗證(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 login
和 docker 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 入口網站驗證映像檔是否成功推播到倉函式庫。步驟如下:
- 前往 Azure 入口網站並導航到「所有資源」頁面。
- 找到您的倉函式庫並點選它。
- 點選左側選單中的「Repositories」。
- 您應該可以看到您的映像檔出現在倉函式庫的列表中。如果您點選映像檔,您可以看到其版本號和詳細訊息。
上傳新版本
當您更新映像檔的程式碼時,您需要重新建立、標記和推播映像檔。您可以使用 docker build
和 docker 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 技術的成熟度已足以支援企業核心業務系統的容器化遷移,但仍需謹慎評估並做好風險管理。