Docker Swarm 实战部署应用

阅读时长 4 分钟读完

Docker Swarm 是 Docker 1.12 推出的容器编排工具,可以用于管理多个 Docker 主机上的容器,并保证容器的高可用性、伸缩性和负载均衡性。在本文中,我们将介绍如何使用 Docker Swarm 部署一个 Node.js 应用,并将其负载均衡到多个 Swarm 节点上。本文将提供详细的步骤和示例代码,帮助读者快速上手 Docker Swarm。

安装 Docker Swarm

首先,你需要安装 Docker 1.12 以及 Docker Compose。在安装 Docker Compose 后,你可以通过以下命令安装 Docker Swarm:

该命令会初始化一个 Docker Swarm 集群,将当前主机作为 Swarm Manager,并生成一组加入 Swarm 集群的命令,你可以通过这些命令将其他主机作为 Swarm 节点加入该集群。

构建 Node.js 应用镜像

接下来,我们需要构建一个 Node.js 应用的 Docker 镜像。假设我们的应用代码位于 /path/to/app 目录中,我们可以在该目录下创建一个名为 Dockerfile 的文件,用于构建镜像:

-- -------------------- ---- -------
---- -----------------

------- ----
---- ------------ --------- --
--- ----
---- - --

------ ----
--- -------- --------

该 Dockerfile 定义了一个基于 Node.js 8.9.4 的镜像,将应用代码复制到容器内,并启动应用的入口文件(假设为 index.js),监听 8080 端口。我们可以使用以下命令构建该镜像:

其中 -t 参数指定了该镜像的名称,/path/to/app 为应用代码所在的路径。

部署应用到 Swarm 集群

现在我们已经准备好了应用镜像,可以开始部署到 Docker Swarm 集群中了。我们需要编写一个 docker-compose.yml 文件来描述该应用在 Swarm 集群中的部署方式。下面是一个示例:

-- -------------------- ---- -------
-------- ---

---------
  ----
    ------ -----
    -------
      --------- -
      --------------
         ------------ -
         ------ ---
      ---------------
         ---------- ----------
    ------
      - -----------

docker-compose.yml 文件定义了一个名为 app 的服务,使用我们之前构建的 myapp 镜像,并在 Swarm 集群中部署 3 个副本,每次更新最多同时更新 2 个,延迟 10 秒,当容器出现故障时自动重启。该服务会将容器内 8080 端口映射到主机的 8080 端口上。我们可以使用以下命令在 Swarm 集群上启动该服务:

其中 -c 参数指定了 docker-compose.yml 文件的路径,myapp 为服务的名称。

测试容器运行情况

现在我们已经将应用部署到了 Swarm 集群中,但我们如何知道容器是否运行正常呢?我们可以使用以下命令查看容器运行情况:

该命令将显示 myapp 服务的所有实例以及它们运行的节点。你可以使用以下命令查看容器的日志:

其中 myapp_app 是应用服务的名称。

负载均衡

我们已经将应用部署到了多个 Swarm 节点上,但我们如何实现负载均衡呢? Docker Swarm 提供了内置的负载均衡功能。我们可以在 Swarm Manager 上查看应用服务所在的节点:

此时我们可以通过任一 Swarm 节点的 IP 地址访问该应用。 Docker Swarm 会自动将请求转发到某个运行容器的 Swarm 节点上,实现负载均衡的效果。

总结

通过本文的介绍,我们了解了 Docker Swarm 的基本用法,并实战演示了如何使用 Docker Swarm 部署一个 Node.js 应用,并通过内置的负载均衡功能实现负载均衡。希望这份指南能够帮助读者更好地理解和应用 Docker Swarm。附上完整示例代码:https://github.com/your-repo/myapp。

参考文献

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64ffefb695b1f8cacde2d119

纠错
反馈