使用 Docker Compose 和 Swarm 的多容器应用程序

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观

Docker Compose to Orchestrate Containers 展示了如何使用 Docker Compose 运行两个链接的 Docker 容器。 使用 Docker Swarm 集群 展示了如何配置 Docker Swarm 集群。

此博客将展示如何在 Docker Swarm 集群中运行使用 Docker Compose 创建的多容器应用程序。

Docker Compose 和 Docker Swarm 的更新版本与 Docker 1.7.0 一起发布。

Docker 1.7.0 命令行界面

获取最新的 Docker CLI:


 curl https://get.docker.com/builds/Darwin/x86_64/docker-latest > /usr/local/bin/docker

并将版本检查为:


 curl https://get.docker.com/builds/Darwin/x86_64/docker-latest > /usr/local/bin/docker

Docker 机器 0.3.0

获取最新的 Docker Machine 作为:


 curl https://get.docker.com/builds/Darwin/x86_64/docker-latest > /usr/local/bin/docker

并将版本检查为:


 curl https://get.docker.com/builds/Darwin/x86_64/docker-latest > /usr/local/bin/docker

码头工人组成 1.3.0

获取最新的 Docker Compose 为:


 curl https://get.docker.com/builds/Darwin/x86_64/docker-latest > /usr/local/bin/docker

并将版本验证为:


 curl https://get.docker.com/builds/Darwin/x86_64/docker-latest > /usr/local/bin/docker

码头群 0.3.0

Swarm 作为 Docker 容器运行,可以下载为:


 curl https://get.docker.com/builds/Darwin/x86_64/docker-latest > /usr/local/bin/docker

您可以在 docs.docker.com/swarm 上了解 Docker Swarm 或 使用 Docker Swarm 进行集群

创建 Docker Swarm 集群

Docker Swarm 的关键组件如下图所示:

并在 Clustering Using Docker Swarm 中进行了解释。

  1. 开始使用 Swarm 的最简单方法是使用官方 Docker 镜像:
    
     curl https://get.docker.com/builds/Darwin/x86_64/docker-latest > /usr/local/bin/docker
    

    此命令返回一个发现令牌,在本文档中称为 <TOKEN>,并且是唯一的集群 ID。后面创建master和node的时候会用到。此集群 ID 由 Docker Hub 上的托管发现服务返回。它将输出显示为:
    
     curl https://get.docker.com/builds/Darwin/x86_64/docker-latest > /usr/local/bin/docker
    
    最后一行是 <TOKEN>。确保现在记下此集群 ID,因为以后无法列出它。这应该用 #661 修复。
  2. Swarm 与 Docker Machine 完全集成,因此是最简单的入门方式。接下来让我们创建一个 Swarm Master:
    
     curl https://get.docker.com/builds/Darwin/x86_64/docker-latest > /usr/local/bin/docker
    
    <TOKEN> 替换为上一步中获取的集群 ID。 --swarm 将机器配置为 Swarm, --swarm-master 将创建的机器配置为 Swarm master。 Swarm master 创建与 Docker Hub 上的托管服务对话,并通知集群中创建了一个 master。
  3. 连接到这个新创建的 master 并找到一些关于它的更多信息:
    
     curl https://get.docker.com/builds/Darwin/x86_64/docker-latest > /usr/local/bin/docker
    
    这会将输出显示为:
    
     curl https://get.docker.com/builds/Darwin/x86_64/docker-latest > /usr/local/bin/docker
    
  4. 创建 Swarm 节点
    
     curl https://get.docker.com/builds/Darwin/x86_64/docker-latest > /usr/local/bin/docker
    
    <TOKEN> 替换为前面步骤中获得的集群 ID。节点创建与 Docker Hub 上的托管服务对话并加入先前创建的集群。这由 --swarm-discovery token://... 指定并指定先前获得的集群 ID。
  5. 为了使它成为一个真正的集群,让我们创建第二个节点:
    
     curl https://get.docker.com/builds/Darwin/x86_64/docker-latest > /usr/local/bin/docker
    
    <TOKEN> 替换为上一步中获取的集群 ID。
  6. 列出目前创建的所有节点:
    
     curl https://get.docker.com/builds/Darwin/x86_64/docker-latest > /usr/local/bin/docker
    
    这显示了类似于下面的输出:
    
     curl https://get.docker.com/builds/Darwin/x86_64/docker-latest > /usr/local/bin/docker
    
    作为集群一部分的机器在 SWARM 列中具有集群的名称,否则为空白。例如,“lab”和“summit2015”是独立的机器,而所有其他机器都是“swarm-master”集群的一部分。 Swarm 主节点在 SWARM 列中也由 (master) 标识。
  7. 连接到 Swarm 集群并找到有关它的一些信息:
    
     curl https://get.docker.com/builds/Darwin/x86_64/docker-latest > /usr/local/bin/docker
    
    这将输出显示为:
    
     curl https://get.docker.com/builds/Darwin/x86_64/docker-latest > /usr/local/bin/docker
    
    有 3 个节点——一个 Swarm master 和 2 个 Swarm 节点。这个集群中总共运行了 4 个容器——master 和每个节点上有一个 Swarm agent,另外还有一个 swarm-agent-master 在 master 上运行。
  8. 使用以下命令列出集群中的节点:
    
     curl https://get.docker.com/builds/Darwin/x86_64/docker-latest > /usr/local/bin/docker
    
    这将输出显示为:
    
     curl https://get.docker.com/builds/Darwin/x86_64/docker-latest > /usr/local/bin/docker
    

使用 Docker Compose 将 Java EE 应用程序部署到 Docker Swarm 集群

Docker Compose to Orchestrate Containers 解释了如何使用 Docker Compose 轻松启动多容器应用程序。

  1. 使用 该博客 中解释的 docker-compose.yml 文件启动容器:
    
     curl https://get.docker.com/builds/Darwin/x86_64/docker-latest > /usr/local/bin/docker
    

    docker-compose.yml 文件如下所示:
    
     curl https://get.docker.com/builds/Darwin/x86_64/docker-latest > /usr/local/bin/docker
    
  2. 检查集群中运行的容器为:
    
     curl https://get.docker.com/builds/Darwin/x86_64/docker-latest > /usr/local/bin/docker
    

    将输出视为:
    
     curl https://get.docker.com/builds/Darwin/x86_64/docker-latest > /usr/local/bin/docker
    
  3. “swarm-node-02”正在运​​行三个容器,所以让我们看一下在那里运行的容器列表:
    
     curl https://get.docker.com/builds/Darwin/x86_64/docker-latest > /usr/local/bin/docker
    

    并查看正在运行的容器列表:
    
     curl https://get.docker.com/builds/Darwin/x86_64/docker-latest > /usr/local/bin/docker
    
  4. 然后可以使用以下方式再次访问应用程序:
    
     curl https://get.docker.com/builds/Darwin/x86_64/docker-latest > /usr/local/bin/docker
    

    并将输出显示为:
    
     curl https://get.docker.com/builds/Darwin/x86_64/docker-latest > /usr/local/bin/docker
    

此设置的最新说明始终位于: github.com/javaee-samples/docker-java/blob/master/chapters/docker-swarm.adoc