Docker入门教程第四部分,部署到Swarm。

先决条件

  • 完成第二部分的容器化应用程序。

  • 确保在Docker Desktop上启用了Swarm,通过输入docker system info并查找消息Swarm:active,(您可能需要向上滚动一点)。

    如果Swarm没有运行,只需在shell提示符下键入docker swarm init进行设置。

介绍

现在,我们已经演示了应用程序的各个组件作为独立容器运行,并展示了如何使用Kubernetes进行部署,让我们看看如何安排它们由Docker Swarm管理。 Swarm提供了许多工具,可以扩展,联网,保护和维护您的容器化应用程序,而容器本身无法提供这些工具。

为了验证我们的容器化应用程序是否可以在Swarm上正常工作,我们将在开发机器上使用Docker Desktop内置的Swarm环境来部署我们的应用程序,然后再将其交付以在生产中的完整Swarm集群上运行。 Docker Desktop创建的Swarm环境具有_完整功能,这意味着它具有您的应用程序将在真实集群上享有的所有Swarm功能,可通过开发机器的便利地进行访问。

使用堆栈文件描述应用

Swarm从来不会像本教程的上一步那样创建单个容器。 相反,所有Swarm工作负载都作为services调度,它们是可扩展的容器组,具有由Swarm自动维护的网络功能。 此外,所有Swarm对象都可以并且应该在称为stack files的清单中进行描述。 这些YAML文件描述了Swarm应用程序的所有组件和配置,可用于在任何Swarm环境中轻松创建和销毁您的应用程序。

  1. 让我们编写一个简单的堆栈文件来运行和管理公告板。 将以下内容放在一个名为bb-stack.yaml:

    version: '3.7'    
    
    services:
      bb-app:
        image: bulletinboard:1.0
        ports:
          - "8000:8080"    
    

    在这个Swarm YAML文件中,我们只有一个对象:service,描述一组可扩展的相同容器。 在这个例子中,只有一个容器(默认),该容器将基于本教程第2步中的bulletinboard:1.0镜像。 我们还要求Swarm将所有到达开发机器上8000端口的流量转发到公告板容器内的8080端口。

    **Kubernetes服务和Swarm服务有很大的不同!**尽管名称相似,但两个编排工具中service一词中的含义却截然不同。 在Swarm中,服务提供了调度和联网功能,创建容器以及提供用于将流量路由到它们的工具。 在Kubernetes中,调度和联网分别被处理:deployments(或其他控制器)将容器调度为Pod,而services仅负责向这些Pod添加联网功能。

部署和检查您的应用程序

  1. 将您的应用程序部署到Swarm:

    docker stack deploy -c bb-stack.yaml demo
    

    如果一切顺利,Swarm将报告创建所有堆栈对象而不会产生任何错误:

    Creating network demo_default
    Creating service demo_bb-app
    

    请注意,除了服务之外,Swarm还会默认创建一个Docker网络,以隔离作为堆栈一部分部署的容器。

  2. 通过列出您的服务来确保一切正常:

    docker service ls
    

    如果一切顺利,您的服务将报告其创建的副本的1/1:

    ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
    il7elwunymbs        demo_bb-app         replicated          1/1                 bulletinboard:1.0   *:8000->8080/tcp
    

    这表示您在服务中要求的1/1个容器已启动并正在运行。 此外,我们看到开发计算机上的端口8000已转发到公告板容器中的端口8080。

  3. 打开浏览器,访问位于localhost:8000的公告板; 您应该看到您的公告板,就像在本教程的步骤2中将其作为独立容器运行时一样。

  4. 验证完这些后,请删除您的应用程序:

    docker stack rm demo
    

结论

至此,我们已经成功地使用Docker Desktop将我们的应用程序部署到开发机器上的功能齐全的Swarm环境中。 我们还没有对Swarm做很多事情,但是现在已经敞开了大门:您可以开始在您自己的计算机上向应用程序添加其他组件,并利用Swarm的所有功能和能力。

除了部署到Swarm之外,我们还将应用程序描述为堆栈文件。 这个简单的文本文件包含在运行状态下创建应用程序所需的一切; 我们可以将其签入版本控制与同事共享,从而使我们可以轻松地将应用程序分发到其他集群(例如可能在我们开发环境之后的测试和生产集群)。

第五部分 >>

Swarm & CLI 参考

此处提供了本文中使用的所有新Swarm对象和CLI命令的更多文档: