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 init
该命令会初始化一个 Docker Swarm 集群,将当前主机作为 Swarm Manager,并生成一组加入 Swarm 集群的命令,你可以通过这些命令将其他主机作为 Swarm 节点加入该集群。
构建 Node.js 应用镜像
接下来,我们需要构建一个 Node.js 应用的 Docker 镜像。假设我们的应用代码位于 /path/to/app
目录中,我们可以在该目录下创建一个名为 Dockerfile
的文件,用于构建镜像:
-- -------------------- ---- ------- ---- ----------------- ------- ---- ---- ------------ --------- -- --- ---- ---- - -- ------ ---- --- -------- --------
该 Dockerfile 定义了一个基于 Node.js 8.9.4 的镜像,将应用代码复制到容器内,并启动应用的入口文件(假设为 index.js
),监听 8080 端口。我们可以使用以下命令构建该镜像:
$ docker build -t myapp /path/to/app
其中 -t
参数指定了该镜像的名称,/path/to/app
为应用代码所在的路径。
部署应用到 Swarm 集群
现在我们已经准备好了应用镜像,可以开始部署到 Docker Swarm 集群中了。我们需要编写一个 docker-compose.yml
文件来描述该应用在 Swarm 集群中的部署方式。下面是一个示例:
-- -------------------- ---- ------- -------- --- --------- ---- ------ ----- ------- --------- - -------------- ------------ - ------ --- --------------- ---------- ---------- ------ - -----------
该 docker-compose.yml
文件定义了一个名为 app
的服务,使用我们之前构建的 myapp
镜像,并在 Swarm 集群中部署 3 个副本,每次更新最多同时更新 2 个,延迟 10 秒,当容器出现故障时自动重启。该服务会将容器内 8080 端口映射到主机的 8080 端口上。我们可以使用以下命令在 Swarm 集群上启动该服务:
$ docker stack deploy -c docker-compose.yml myapp
其中 -c
参数指定了 docker-compose.yml
文件的路径,myapp
为服务的名称。
测试容器运行情况
现在我们已经将应用部署到了 Swarm 集群中,但我们如何知道容器是否运行正常呢?我们可以使用以下命令查看容器运行情况:
$ docker stack ps myapp
该命令将显示 myapp 服务的所有实例以及它们运行的节点。你可以使用以下命令查看容器的日志:
$ docker service logs myapp_app
其中 myapp_app
是应用服务的名称。
负载均衡
我们已经将应用部署到了多个 Swarm 节点上,但我们如何实现负载均衡呢? Docker Swarm 提供了内置的负载均衡功能。我们可以在 Swarm Manager 上查看应用服务所在的节点:
$ docker service ps myapp_app
此时我们可以通过任一 Swarm 节点的 IP 地址访问该应用。 Docker Swarm 会自动将请求转发到某个运行容器的 Swarm 节点上,实现负载均衡的效果。
总结
通过本文的介绍,我们了解了 Docker Swarm 的基本用法,并实战演示了如何使用 Docker Swarm 部署一个 Node.js 应用,并通过内置的负载均衡功能实现负载均衡。希望这份指南能够帮助读者更好地理解和应用 Docker Swarm。附上完整示例代码:https://github.com/your-repo/myapp。
参考文献
- https://docs.docker.com/compose/
- https://docs.docker.com/swarm/
- https://docs.docker.com/engine/reference/commandline/service_create/
- https://github.com/docker/example-voting-app
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64ffefb695b1f8cacde2d119