部署和编排
容器化提供了一种将应用程序迁移到云和数据中心并进行扩展的机会。容器有效地保证了这些应用程序在任何地方都能以相同的方式运行,使您能够快速轻松地利用所有这些环境的优势。此外,当您扩展应用程序时,您需要一些工具来帮助自动化这些应用程序的维护,自动替换失败的容器,并在容器的生命周期内管理更新和重新配置的部署。
用于管理、扩展和维护容器化应用程序的工具称为编排器。两个最流行的编排工具是 Kubernetes 和 Docker Swarm。Docker Desktop 为这两种编排器提供了开发环境。
高级模块将指导您如何:
开启 Kubernetes
Docker Desktop 可以快速轻松地为您设置 Kubernetes。请根据您的操作系统遵循相应的设置和验证说明:
Mac
-
从 Docker 仪表板导航到 Settings(设置),然后选择 Kubernetes 选项卡。
-
选中标有 Enable Kubernetes(启用 Kubernetes)的复选框,然后选择 Apply(应用)。Docker Desktop 会自动为您设置 Kubernetes。当您在 Settings 中看到 'Kubernetes running'(Kubernetes 运行中)旁边出现绿灯时,您就知道 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,用于隔离一个简单的 ping 到 8.8.8.8。
-
在终端中,导航到您创建
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 选项卡。
-
选中标有 Enable Kubernetes(启用 Kubernetes)的复选框,然后选择 Apply(应用)。Docker Desktop 会自动为您设置 Kubernetes。当您在 Settings 菜单中看到 'Kubernetes running'(Kubernetes 运行中)旁边出现绿灯时,您就知道 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,用于隔离一个简单的 ping 到 8.8.8.8。
-
在 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 的文件系统,并隔离一个 ping 到 8.8.8.8:
$ 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 的文件系统,并隔离一个 ping 到 8.8.8.8:
$ 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 命令的进一步文档可在此处获取: