匠心精神 - 良心品质腾讯认可的专业机构-IT人的高薪实战学院

咨询电话:4000806560

Docker Swarm集群搭建与管理指南

Docker Swarm集群搭建与管理指南

在现代化的IT架构中,容器化技术是不可避免的发展趋势。Docker作为其中的领军企业,其技术也成为了大家广泛关注的焦点。其中,Docker Swarm作为Docker自带的编排工具,可以帮助我们轻松的搭建和管理容器集群,本文将详细介绍Docker Swarm的搭建与管理方法。

环境准备

在开始之前,我们应当准备一台或多台Linux机器作为Docker Swarm的节点。我们选择了三台虚拟机,分别作为管理节点和两台工作节点。

其中,管理节点需要满足以下要求:
- 安装最新版Docker引擎
- 开启防火墙对Swarm端口进行放行
- 确保能够互相ping通其他节点

工作节点则需要满足以下要求:
- 安装最新版Docker引擎
- 确保能够互相ping通其他节点

创建Swarm

在管理节点上,执行以下命令来初始化Swarm:
```
$ sudo docker swarm init --advertise-addr 
```
其中,``为管理节点的IP地址。

执行成功后,会输出类似以下内容的信息:
```
Swarm initialized: current node (xge27bqh6ttz721pkw2zky1h5) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token  :2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
```

在其中,``为Swarm节点的令牌,工作节点需要使用它来加入到Swarm中。我们需要将这个令牌保存下来,后续需要使用。

加入节点

在工作节点中,使用如下命令加入Swarm:
```
$ sudo docker swarm join --token  :2377
```
其中,``为之前管理节点初始化Swarm时生成的令牌,``为管理节点的IP地址。

加入成功后,在管理节点上执行以下命令,查看加入节点的状态:
```
$ sudo docker node ls
```
输出类似以下内容的信息:
```
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
xge27bqh6ttz721pkw2zky1h5 *   manager-1           Ready               Active              Leader              18.09.0
vacf9s9l2gur1g1w7tndmou3u     worker-1            Ready               Active                                  18.09.0
yfvjuph0g4sw6d92e2p2mdk2f     worker-2            Ready               Active                                  18.09.0
```

在其中,`*`表示当前我们的管理节点,而`worker-1`和`worker-2`则是两个已经加入到Swarm中的工作节点。

创建服务

我们使用如下命令来在Swarm中创建一个服务:
```
$ sudo docker service create --name nginx --replicas 3 --publish 80:80 nginx
```
其中,`--name`参数指定了服务的名称,`--replicas`参数指定了需要创建的实例数量,`--publish`参数指定了服务对外暴露的端口映射,`nginx`则为需要部署的镜像名称。

执行成功后,在管理节点上使用如下命令查看创建的服务状态:
```
$ sudo docker service ls
```
输出类似以下内容的信息:
```
ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
qqk1n7sb4toi        nginx               replicated          3/3                 nginx:latest        *:80->80/tcp
```
在其中,我们可以看到当前Swarm中有一个名为`nginx`的服务,已经成功创建了3个实例。

对服务进行扩展

我们可以使用如下命令来对服务进行扩展:
```
$ sudo docker service scale nginx=5
```
其中,`nginx=5`表示需要将`nginx`服务的实例数量扩展到5个。

执行成功后,我们可以在管理节点上使用以下命令查看服务的状态:
```
$ sudo docker service ps nginx
```
输出类似以下内容的信息:
```
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE           ERROR               PORTS
z0jrd6k7j73b        nginx.1             nginx:latest        worker-2            Running             Running 2 minutes ago                       
g4mm9yv7ki10        nginx.2             nginx:latest        worker-1            Running             Running 2 minutes ago                       
v6uqjvqgpn3g        nginx.3             nginx:latest        worker-2            Running             Running 2 minutes ago                       
0bi9ttx5f4t9        nginx.4             nginx:latest        worker-1            Running             Running 2 minutes ago                       
uz8p208bzcsy        nginx.5             nginx:latest        worker-2            Running             Running 2 minutes ago         
```
在其中,我们可以看到`nginx`服务成功扩展到了5个实例。

对服务进行伸缩

我们可以使用如下命令来对服务进行伸缩:
```
$ sudo docker service update --replicas 7 nginx
```
其中,`--replicas`参数指定需要扩展到的实例数量,`nginx`则为我们需要伸缩的服务名称。

执行成功后,我们可以在管理节点上使用以下命令查看服务的状态:
```
$ sudo docker service ps nginx
```
输出类似以下内容的信息:
```
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE             ERROR               PORTS
z0jrd6k7j73b        nginx.1             nginx:latest        worker-2            Running             Running 2 minutes ago                           
g4mm9yv7ki10        nginx.2             nginx:latest        worker-1            Running             Running 2 minutes ago                           
v6uqjvqgpn3g        nginx.3             nginx:latest        worker-2            Running             Running 2 minutes ago                           
0bi9ttx5f4t9        nginx.4             nginx:latest        worker-1            Running             Running 2 minutes ago                           
uz8p208bzcsy        nginx.5             nginx:latest        worker-2            Running             Running 2 minutes ago                           
t6k07shm8ddn        nginx.6             nginx:latest        worker-1            Running             Running about a minute ago                       
4nyoq7b67r0c        nginx.7             nginx:latest        worker-1            Running             Running about a minute ago   
```
在其中,我们可以看到`nginx`服务成功伸缩到了7个实例。

删除服务

我们可以使用如下命令来删除服务:
```
$ sudo docker service rm nginx
```
其中,`nginx`为我们希望删除的服务名称。

执行成功后,在管理节点上使用如下命令查看服务的状态:
```
$ sudo docker service ls
```
输出中不再包含`nginx`服务。

彻底关闭Swarm

我们可以使用如下命令来关闭Swarm:
```
$ sudo docker swarm leave --force
```
其中,`--force`参数表示强制离开Swarm。

执行成功后,我们可以在管理节点上使用如下命令查看节点状态:
```
$ sudo docker node ls
```
输出中不再包含当前节点。

总结

本文详细介绍了Docker Swarm的搭建与管理方法,包括了节点加入、服务创建、扩展、伸缩、删除以及Swarm关闭等基本操作。希望读者们可以根据本文的指南,成功的搭建和管理自己的Docker Swarm集群。