部署和编排

容器化提供了将应用程序迁移和扩展到云和数据中心的机会。容器有效地保证这些应用程序在任何地方都以相同的方式运行,使您能够快速轻松地利用所有这些环境。此外,当您扩展应用程序时,您需要一些工具来帮助自动维护这些应用程序,自动替换出现故障的容器,并在这些容器的生命周期内管理更新和重新配置的推出。

管理、扩展和维护容器化应用程序的工具称为编排器。两种最流行的编排工具是 Kubernetes 和 Docker Swarm。 Docker Desktop 为这两个编排器提供了开发环境。

高级模块教您如何:

  1. 在开发机器上设置并使用 Kubernetes 环境
  2. 在您的开发机器上设置并使用 Swarm 环境

开启 Kubernetes

Docker Desktop 可以快速轻松地为您设置 Kubernetes。请遵循适合您的操作系统的设置和验证说明:


苹果

  1. 从 Docker 仪表板中,导航至Settings,然后选择Kubernetes选项卡。

  2. 选择标记为Enable Kubernetes 的复选框,然后选择Apply & Restart。 Docker Desktop 会自动为您设置 Kubernetes。当您在“设置”中看到“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. 最后,拆掉你的测试盒:

    $ kubectl delete -f pod.yaml
    

Windows

  1. 从 Docker 仪表板中,导航至Settings,然后选择Kubernetes选项卡。

  2. 选择标记为Enable Kubernetes 的复选框,然后选择Apply & Restart。 Docker Desktop 会自动为您设置 Kubernetes。当您在“设置”菜单中看到“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. 最后,拆掉你的测试盒:

    $ kubectl delete -f pod.yaml
    

启用 Docker Swarm

Docker Desktop 主要在 Docker Engine 上运行,该引擎内置了运行 Swarm 所需的一切。请遵循适合您的操作系统的设置和验证说明:


苹果

  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 命令的更多文档可在此处找到: