前言
Docker 是一款流行的应用容器化工具,可以将软件以容器的形式进行打包和部署,并能够实现快速移植、运维方便等优点。Docker Swarm 是 Docker 官方提供的集群管理工具,能够将多台 Docker 主机组成一个集群,方便进行 Docker 应用的部署和管理。本文将针对 Docker Swarm 集群搭建与容器部署的实践进行详细介绍。
环境准备
在进行 Docker Swarm 集群搭建前,需要满足以下条件:
- 多台 Linux 主机准备:Docker Swarm 集群至少需要两台主机,建议使用同样版本的 Linux 发行版;
- Docker 版本一致:所有主机上安装的 Docker 版本需一致;
- 各主机之间网络联通:各主机需要在同一网络中,并且需要互相能够访问。
Docker Swarm 集群搭建
初始化 Swarm 集群
使用 docker swarm init
命令初始化一个 Swarm 集群,其中 --advertise-addr
用于指定 Swarm 管理节点的 IP 地址:
$ docker swarm init --advertise-addr <node1-ip>
执行命令后,将会创建一个 Swarm 集群,并返回一个加入该集群的命令,例如:
Swarm initialized: current node <node1-ip> is now a manager. To add a worker to this swarm, run the following command: docker swarm join --token <token> <node1-ip>:<port> To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
加入节点
使用 docker swarm join
命令将其他主机加入到当前 Swarm 集群中,如下所示:
$ docker swarm join --token <token> <node1-ip>:<port>
其中 <token>
是初始化时生成的令牌,<node1-ip>
是 Swarm 集群管理节点的 IP 地址,<port>
则是指定的端口号。
重复以上步骤,将所有需要加入到 Swarm 集群中的主机都加入进来。
查看节点信息
使用 docker node ls
命令查看集群节点信息,如下所示:
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION j9zsg0j03qs0itkoezeo02fga * node1 Ready Active Leader 19.03.12 nw5yy5zgixj2dcf1m5kbwof8a node2 Ready Active 19.03.12 wwf0n7cjyaos217g833o7w3ch node3 Ready Active 19.03.12
其中 *
表示当前节点为 Swarm 集群管理节点,即 Leader 节点。
容器部署
创建服务
在 Swarm 集群中,使用 docker service create
命令创建服务并部署到集群中,例如:
$ docker service create --name app --replicas 3 -p 80:80 <image>
其中 --name
参数用于指定服务名称,--replicas
参数用于指定需要部署的容器数量,-p 80:80
则是将容器的 80 端口映射到主机的 80 端口上,<image>
则是 Docker 镜像的名称。
查看服务状态
使用 docker service ls
命令查看服务状态,如下所示:
ID NAME MODE REPLICAS IMAGE PORTS j7aejjmh1ah2 app replicated 3/3 <image> *:80->80/tcp
其中 MODE
表示服务的部署模式,REPLICAS
表示容器的副本数量。
扩容和缩容
使用 docker service scale
命令可以实现服务的扩容和缩容,例如:
$ docker service scale app=5
该命令将服务 app
的容器数量扩容到 5 个。
更新服务
使用 docker service update
命令可以更新服务的配置信息,例如修改容器镜像版本:
$ docker service update --image <new-image>:<new-version> app
删除服务
使用 docker service rm
命令可以删除服务:
$ docker service rm app
示例代码
下面是一个基于 Node.js 和 Express 框架的示例应用程序,使用 Docker Swarm 进行部署:
// javascriptcn.com 代码示例 # Dockerfile FROM node:14-alpine WORKDIR /app COPY package.json . RUN npm install --production COPY . . ENV PORT=80 EXPOSE 80 CMD ["npm", "start"] # index.js const express = require('express'); const app = express(); const os = require('os'); app.get('/', (req, res) => { res.send(`Hello World from ${os.hostname()}\n`); }); app.listen(process.env.PORT, () => { console.log(`Server listening on port ${process.env.PORT}`); });
总结
Docker Swarm 集群可以实现容器化应用的快速部署和管理,简化了分布式应用的开发和维护过程,有助于提高应用的可扩展性和稳定性。本文详细阐述了 Docker Swarm 集群的搭建和容器部署实践,并提供了示例代码进行参考。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6531d7bf7d4982a6eb3d11c8