部署與編排
容器化提供了將應用程式遷移並擴展到雲端與資料中心的能力。容器能有效確保應用程式在任何環境中以相同方式執行,讓您能快速且輕鬆地利用這些環境。此外,當您擴展應用程式時,需要一些工具來協助自動化應用程式的維護,自動更換故障的容器,並管理容器在生命週期內的更新部署與重新配置。
用於管理、擴展與維護容器化應用程式的工具稱為編排器(Orchestrators)。最流行的兩種編排工具是 Kubernetes 與 Docker Swarm。Docker Desktop 為這兩種編排器提供了開發環境。
進階模組將教您如何:
開啟 Kubernetes
Docker Desktop 能快速且輕鬆地為您設定 Kubernetes。請依照適合您作業系統的設定與驗證說明進行操作:
Mac
從 Docker 儀表板,瀏覽至設定 (Settings),並選擇 Kubernetes 分頁。
勾選 啟用 Kubernetes (Enable Kubernetes) 複選框,然後選擇 套用 (Apply)。Docker Desktop 會自動為您設定 Kubernetes。當您在 設定 中看到 'Kubernetes 執行中 (running)' 旁邊出現綠燈時,即表示 Kubernetes 已成功啟用。
若要確認 Kubernetes 已啟動並執行,請建立一個名為
pod.yaml的文字檔,內容如下:apiVersion: v1 kind: Pod metadata: name: demo spec: containers: - name: testpod image: alpine:latest command: ["ping", "8.8.8.8"]這描述了一個包含單一容器的 Pod,該 Pod 對 8.8.8.8 執行簡單的 ping 指令。
在終端機中,瀏覽至您建立
pod.yaml的位置並建立您的 Pod:$ kubectl apply -f pod.yaml檢查您的 Pod 是否已啟動並執行:
$ kubectl get pods您應該會看到類似以下的內容:
NAME READY STATUS RESTARTS AGE demo 1/1 Running 0 4s確認您是否獲得了 ping 程序應有的記錄:
$ kubectl logs demo您應該會看到正常 ping 程序的輸出:
PING 8.8.8.8 (8.8.8.8): 56 data bytes 64 bytes from 8.8.8.8: seq=0 ttl=37 time=21.393 ms 64 bytes from 8.8.8.8: seq=1 ttl=37 time=15.320 ms 64 bytes from 8.8.8.8: seq=2 ttl=37 time=11.111 ms ...最後,刪除您的測試 Pod:
$ kubectl delete -f pod.yaml
Windows
從 Docker 儀表板,瀏覽至設定 (Settings),並選擇 Kubernetes 分頁。
勾選 啟用 Kubernetes (Enable Kubernetes) 複選框,並選擇 套用 (Apply)。Docker Desktop 會自動為您設定 Kubernetes。當您在 設定 選單中看到 'Kubernetes 執行中 (running)' 旁邊出現綠燈時,即表示 Kubernetes 已成功啟用。
若要確認 Kubernetes 已啟動並執行,請建立一個名為
pod.yaml的文字檔,內容如下:apiVersion: v1 kind: Pod metadata: name: demo spec: containers: - name: testpod image: alpine:latest command: ["ping", "8.8.8.8"]這描述了一個包含單一容器的 Pod,該 Pod 對 8.8.8.8 執行簡單的 ping 指令。
在 PowerShell 中,瀏覽至您建立
pod.yaml的位置並建立您的 Pod:$ kubectl apply -f pod.yaml檢查您的 Pod 是否已啟動並執行:
$ kubectl get pods您應該會看到類似以下的內容:
NAME READY STATUS RESTARTS AGE demo 1/1 Running 0 4s確認您是否獲得了 ping 程序應有的記錄:
$ kubectl logs demo您應該會看到正常 ping 程序的輸出:
PING 8.8.8.8 (8.8.8.8): 56 data bytes 64 bytes from 8.8.8.8: seq=0 ttl=37 time=21.393 ms 64 bytes from 8.8.8.8: seq=1 ttl=37 time=15.320 ms 64 bytes from 8.8.8.8: seq=2 ttl=37 time=11.111 ms ...最後,刪除您的測試 Pod:
$ kubectl delete -f pod.yaml
啟用 Docker Swarm
Docker Desktop 主要執行於 Docker Engine 上,後者內建了執行 Swarm 所需的一切。請依照適合您作業系統的設定與驗證說明進行操作:
Mac
開啟終端機,並初始化 Docker Swarm 模式:
$ docker swarm init如果一切順利,您應該會看到類似以下的訊息:
Swarm initialized: current node (tjjggogqpnpj2phbfbz8jd5oq) is now a manager. To add a worker to this swarm, run the following command: docker swarm join --token SWMTKN-1-3e0hh0jd5t4yjg209f4g5qpowbsczfahv2dea9a1ay2l8787cf-2h4ly330d0j917ocvzw30j5x9 192.168.65.3:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.執行一個簡單的 Docker 服務,該服務使用 alpine 檔案系統,並對 8.8.8.8 進行 ping:
$ docker service create --name demo alpine:latest ping 8.8.8.8檢查您的服務是否已建立一個執行中的容器:
$ docker service ps demo您應該會看到類似以下的內容:
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS 463j2s3y4b5o demo.1 alpine:latest docker-desktop Running Running 8 seconds ago確認您是否獲得了 ping 程序應有的記錄:
$ docker service logs demo您應該會看到正常 ping 程序的輸出:
demo.1.463j2s3y4b5o@docker-desktop | PING 8.8.8.8 (8.8.8.8): 56 data bytes demo.1.463j2s3y4b5o@docker-desktop | 64 bytes from 8.8.8.8: seq=0 ttl=37 time=13.005 ms demo.1.463j2s3y4b5o@docker-desktop | 64 bytes from 8.8.8.8: seq=1 ttl=37 time=13.847 ms demo.1.463j2s3y4b5o@docker-desktop | 64 bytes from 8.8.8.8: seq=2 ttl=37 time=41.296 ms ...最後,刪除您的測試服務:
$ docker service rm demo
Windows
開啟 PowerShell,並初始化 Docker Swarm 模式:
$ docker swarm init如果一切順利,您應該會看到類似以下的訊息:
Swarm initialized: current node (tjjggogqpnpj2phbfbz8jd5oq) is now a manager. To add a worker to this swarm, run the following command: docker swarm join --token SWMTKN-1-3e0hh0jd5t4yjg209f4g5qpowbsczfahv2dea9a1ay2l8787cf-2h4ly330d0j917ocvzw30j5x9 192.168.65.3:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.執行一個簡單的 Docker 服務,該服務使用 alpine 檔案系統,並對 8.8.8.8 進行 ping:
$ docker service create --name demo alpine:latest ping 8.8.8.8檢查您的服務是否已建立一個執行中的容器:
$ docker service ps demo您應該會看到類似以下的內容:
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS 463j2s3y4b5o demo.1 alpine:latest docker-desktop Running Running 8 seconds ago確認您是否獲得了 ping 程序應有的記錄:
$ docker service logs demo您應該會看到正常 ping 程序的輸出:
demo.1.463j2s3y4b5o@docker-desktop | PING 8.8.8.8 (8.8.8.8): 56 data bytes demo.1.463j2s3y4b5o@docker-desktop | 64 bytes from 8.8.8.8: seq=0 ttl=37 time=13.005 ms demo.1.463j2s3y4b5o@docker-desktop | 64 bytes from 8.8.8.8: seq=1 ttl=37 time=13.847 ms demo.1.463j2s3y4b5o@docker-desktop | 64 bytes from 8.8.8.8: seq=2 ttl=37 time=41.296 ms ...最後,刪除您的測試服務:
$ docker service rm demo
結論
至此,您已確認可以在 Kubernetes 與 Swarm 中執行簡單的容器化工作負載。下一步是編寫一個 YAML 檔案,描述如何執行與管理這些容器。
CLI 參考
本文中使用的所有 CLI 指令的進一步說明文件可在此處取得: