部署和編排

容器化為將應用程式遷移和擴充套件到雲和資料中心提供了機會。容器有效地保證了這些應用程式在任何地方都以相同的方式執行,使您能夠快速輕鬆地利用所有這些環境。此外,隨著應用程式規模的擴大,您需要一些工具來幫助自動化應用程式的維護,實現故障容器的自動替換,並管理其生命週期中容器的更新和重新配置的推出。

用於管理、擴充套件和維護容器化應用程式的工具稱為編排器。兩個最流行的編排工具是 Kubernetes 和 Docker Swarm。Docker Desktop 為這兩個編排器都提供了開發環境。

高階模組教您如何

  1. 在您的開發機器上設定和使用 Kubernetes 環境
  2. 在您的開發機器上設定和使用 Swarm 環境

開啟 Kubernetes

Docker Desktop 可以為您快速輕鬆地設定 Kubernetes。請遵循適用於您作業系統的設定和驗證說明。

Mac

  1. 從 Docker 儀表盤,導航到 設定 (Settings),然後選擇 Kubernetes 選項卡。

  2. 選中標有 啟用 Kubernetes (Enable Kubernetes) 的複選框,然後選擇 應用 (Apply)。Docker Desktop 會自動為您設定 Kubernetes。當您在 設定 (Settings) 中看到“Kubernetes running”旁邊有綠燈時,就表示 Kubernetes 已成功啟用。

  3. 要確認 Kubernetes 是否已啟動並執行,請建立一個名為 pod.yaml 的文字檔案,內容如下:

    apiVersion: v1
    kind: Pod
    metadata:
      name: demo
    spec:
      containers:
        - name: testpod
          image: alpine:latest
          command: ["ping", "8.8.8.8"]

    這描述了一個帶單個容器的 pod,隔離了一個簡單的 ping 操作到 8.8.8.8。

  4. 在終端中,導航到您建立 pod.yaml 的位置並建立您的 pod:

    $ kubectl apply -f pod.yaml
    
  5. 檢查您的 pod 是否已啟動並執行:

    $ kubectl get pods
    

    您應該會看到類似下面的內容:

    NAME      READY     STATUS    RESTARTS   AGE
    demo      1/1       Running   0          4s
  6. 檢查您是否能獲取到 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
    ...
  7. 最後,拆除您的測試 pod:

    $ kubectl delete -f pod.yaml
    

Windows

  1. 從 Docker 儀表盤,導航到 設定 (Settings),然後選擇 Kubernetes 選項卡。

  2. 選中標有 啟用 Kubernetes (Enable Kubernetes) 的複選框,然後選擇 應用 (Apply)。Docker Desktop 會自動為您設定 Kubernetes。當您在 設定 (Settings) 選單中看到“Kubernetes running”旁邊有綠燈時,就表示 Kubernetes 已成功啟用。

  3. 要確認 Kubernetes 是否已啟動並執行,請建立一個名為 pod.yaml 的文字檔案,內容如下:

    apiVersion: v1
    kind: Pod
    metadata:
      name: demo
    spec:
      containers:
        - name: testpod
          image: alpine:latest
          command: ["ping", "8.8.8.8"]

    這描述了一個帶單個容器的 pod,隔離了一個簡單的 ping 操作到 8.8.8.8。

  4. 在 PowerShell 中,導航到您建立 pod.yaml 的位置並建立您的 pod:

    $ kubectl apply -f pod.yaml
    
  5. 檢查您的 pod 是否已啟動並執行:

    $ kubectl get pods
    

    您應該會看到類似下面的內容:

    NAME      READY     STATUS    RESTARTS   AGE
    demo      1/1       Running   0          4s
  6. 檢查您是否能獲取到 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
    ...
  7. 最後,拆除您的測試 pod:

    $ kubectl delete -f pod.yaml
    

啟用 Docker Swarm

Docker Desktop 主要執行在 Docker Engine 上,它內建了執行 Swarm 所需的一切。請遵循適用於您作業系統的設定和驗證說明。

Mac

  1. 開啟一個終端,並初始化 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.
  2. 執行一個簡單的 Docker 服務,該服務使用基於 alpine 的檔案系統,並隔離一個 ping 操作到 8.8.8.8:

    $ docker service create --name demo alpine:latest ping 8.8.8.8
    
  3. 檢查您的服務是否建立了一個正在執行的容器:

    $ 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
  4. 檢查您是否能獲取到 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
    ...
  5. 最後,拆除您的測試服務:

    $ docker service rm demo
    

Windows

  1. 開啟一個 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.
  2. 執行一個簡單的 Docker 服務,該服務使用基於 alpine 的檔案系統,並隔離一個 ping 操作到 8.8.8.8:

    $ docker service create --name demo alpine:latest ping 8.8.8.8
    
  3. 檢查您的服務是否建立了一個正在執行的容器:

    $ 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
  4. 檢查您是否能獲取到 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
    ...
  5. 最後,拆除您的測試服務:

    $ docker service rm demo
    

結論

至此,您已經確認可以在 Kubernetes 和 Swarm 中執行簡單的容器化工作負載。下一步是編寫一個 YAML 檔案,描述如何執行和管理這些容器。

CLI 參考

本文中使用的所有 CLI 命令的進一步文件可在此處找到: