使用 Docker Compose 和 Swarm 的多容器应用程序
💡一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ;- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2800+ 小伙伴加入学习 ,欢迎点击围观
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 中进行了解释。
-
开始使用 Swarm 的最简单方法是使用官方 Docker 镜像:
curl https://get.docker.com/builds/Darwin/x86_64/docker-latest > /usr/local/bin/docker
此命令返回一个发现令牌,在本文档中称为 <TOKEN>,并且是唯一的集群 ID。后面创建master和node的时候会用到。此集群 ID 由 Docker Hub 上的托管发现服务返回。它将输出显示为:
最后一行是 <TOKEN>。确保现在记下此集群 ID,因为以后无法列出它。这应该用 #661 修复。curl https://get.docker.com/builds/Darwin/x86_64/docker-latest > /usr/local/bin/docker
-
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。 -
连接到这个新创建的 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
-
创建 Swarm 节点
将curl https://get.docker.com/builds/Darwin/x86_64/docker-latest > /usr/local/bin/docker
<TOKEN>
替换为前面步骤中获得的集群 ID。节点创建与 Docker Hub 上的托管服务对话并加入先前创建的集群。这由--swarm-discovery token://...
指定并指定先前获得的集群 ID。 -
为了使它成为一个真正的集群,让我们创建第二个节点:
将curl https://get.docker.com/builds/Darwin/x86_64/docker-latest > /usr/local/bin/docker
<TOKEN>
替换为上一步中获取的集群 ID。 -
列出目前创建的所有节点:
这显示了类似于下面的输出:curl https://get.docker.com/builds/Darwin/x86_64/docker-latest > /usr/local/bin/docker
作为集群一部分的机器在 SWARM 列中具有集群的名称,否则为空白。例如,“lab”和“summit2015”是独立的机器,而所有其他机器都是“swarm-master”集群的一部分。 Swarm 主节点在 SWARM 列中也由 (master) 标识。curl https://get.docker.com/builds/Darwin/x86_64/docker-latest > /usr/local/bin/docker
-
连接到 Swarm 集群并找到有关它的一些信息:
这将输出显示为: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 上运行。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
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 轻松启动多容器应用程序。
-
使用
该博客
中解释的
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
-
检查集群中运行的容器为:
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-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
-
然后可以使用以下方式再次访问应用程序:
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 。