Docker swarm 集群通过 docker cli 来创建,并通过docker cli来实现应用的部署和集群的管理。

Docker swarm集群的搭建相对简单,这里使用三台虚拟机(一个管理节点,两个worker节点)来简单演示下集群的搭建过程。

|-----------------------------------------------------------------|
|            hostname           |                IP                  |
|-----------------------------------------------------------------|
|            master                 |     192.168.223.31       |
|-----------------------------------------------------------------|
|            node-01               |     192.168.223.32       |
|-----------------------------------------------------------------|
|            node-02               |     192.168.223.33       |
|-----------------------------------------------------------------|

虚拟机和docker-ce的安装这里就不做赘述了,安装后关闭系统默认的防火墙,关闭selinux,安装最新的docker-ce-20.10.17,并且修改docker.service,增加下面的参数配置。

# vi /lib/systemd/system/docker.service在 ExecStart=/usr/bin/dockerd 后添加 -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock ,修改后的配置如下所示[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock -H fd:// --containerd=/run/containerd/containerd.sock修改后,记得reload配置,并且重启docker服务# systemctl daemon-reload
# systemctl restart docker.service

下面就给大家直接贴出我搭建和使用swarm集群过程的相关命令的记录。

---初始化集群的管理节点
# docker swarm init --advertise-addr 192.168.223.31
Swarm initialized: current node (betygbmft1wkh4kmrf5wx45mc) is now a manager.To add a worker to this swarm, run the following command:docker swarm join --token SWMTKN-1-66syvw9yv8xr457lk4eviixyhd5fviw1gg3ktkwa1nkdp2rb44-14530poeryamdfwlssfynmxhk 192.168.223.31:2377To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.---从节点加入到管理节点
# docker swarm join --token SWMTKN-1-66syvw9yv8xr457lk4eviixyhd5fviw1gg3ktkwa1nkdp2rb44-14530poeryamdfwlssfynmxhk 192.168.223.31:2377
This node joined a swarm as a worker.----查看集群的节点、状态
# docker node ls
ID                            HOSTNAME   STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
betygbmft1wkh4kmrf5wx45mc *   master     Ready     Active         Leader           20.10.17
nq4urvgyfdjedabze9p5oll6q     node-01    Ready     Active                          20.10.17
t6wtou7b5jm07qltlrp35ha85     node-02    Ready     Active                          20.10.17---创建网络
# docker network create --opt encrypted --driver overlay --attachable webnet
7e0huckau0g8olzsyvdts8ta2---创建nginx服务(1)
# docker service create --replicas 2 --network webnet --name nginx --publish published=80,target=80 nginx:1.22.0
gf8n3ad4k1pkxqwej6xpdthhe
overall progress: 2 out of 2 tasks
1/2: running   [==================================================>]
2/2: running   [==================================================>]
verify: Service converged or
---创建nginx服务(2)
# docker service create --replicas 3 --network webnet --name nginx -p 80:80 nginx:1.22.0or---创建nginx服务(3)- 仅允许在非manager节点上运行创建的服务,即只能在node节点上运行服务的副本
# docker service create --replicas 3 --constraint node.role!=manager --network webnet --name nginx -p 80:80 nginx:1.22.0---查看服务信息
# docker service ls
ID             NAME      MODE         REPLICAS   IMAGE          PORTS
gf8n3ad4k1pk   nginx     replicated   2/2        nginx:1.22.0   *:80->80/tcp---查看nginx进程
# docker service ps nginx
ID             NAME      IMAGE          NODE      DESIRED STATE   CURRENT STATE                ERROR     PORTS
4vxulka6ofd2   nginx.1   nginx:1.22.0   master    Running         Running about a minute ago
res3qre7ywcx   nginx.2   nginx:1.22.0   node-01   Running         Running 3 minutes ago    ---查看服务明细
# docker service inspect nginx          ---服务扩展
# docker service scale nginx=3
nginx scaled to 3
overall progress: 3 out of 3 tasks
1/3: running   [==================================================>]
2/3: running   [==================================================>]
3/3: running   [==================================================>]
verify: Service converged # docker service ps nginx
ID             NAME      IMAGE          NODE      DESIRED STATE   CURRENT STATE            ERROR     PORTS
4vxulka6ofd2   nginx.1   nginx:1.22.0   master    Running         Running 10 minutes ago
res3qre7ywcx   nginx.2   nginx:1.22.0   node-01   Running         Running 11 minutes ago
xpwlus8bbo6z   nginx.3   nginx:1.22.0   node-02   Running         Running 25 seconds ago---删除服务
# docker service rm nginx
nginx

使用docker stack deploy部署portainer-ce和portainer-agent,已实现对swarm集群的监控、展示。

首先,我们在master节点和node节点上先pull需要的镜像

# docker pull portainer/portainer-ce
Using default tag: latest
latest: Pulling from portainer/portainer-ce
772227786281: Pull complete
96fd13befc87: Pull complete
35fb5a8b85ea: Pull complete
6665edb137b0: Pull complete
Digest: sha256:f716a714e6cdbb04b3f3ed4f7fb2494ce7eb4146e94020e324b2aae23e3917a9
Status: Downloaded newer image for portainer/portainer-ce:latest
docker.io/portainer/portainer-ce:latest# docker pull portainer/agent:2.14.0
2.14.0: Pulling from portainer/agent
772227786281: Already exists
96fd13befc87: Already exists
3902c362cca3: Pull complete
a215b10008ab: Pull complete
434a8ea542bc: Pull complete
c1c68f189caa: Pull complete
Digest: sha256:8440499b6e1cda88442cf6c58c7fb6bad317708b796a747604ce76f65cc788ba
Status: Downloaded newer image for portainer/agent:2.14.0
docker.io/portainer/agent:2.14.0# docker images
REPOSITORY               TAG       IMAGE ID       CREATED       SIZE
portainer/portainer-ce   latest    e8e975c3a7f0   6 days ago    278MB
portainer/agent          2.14.0    25e2624e6d49   6 days ago    166MB
nginx                    1.22.0    b3c5c59017fb   10 days ago   142MB

第二步,编写portainer-agent-stack.yml文件

version: '3.2'services:agent:image: portainer/agent:latestvolumes:- /var/run/docker.sock:/var/run/docker.sock- /var/lib/docker/volumes:/var/lib/docker/volumesnetworks:- agent_networkdeploy:mode: globalplacement:constraints: [node.platform.os == linux]portainer:image: portainer/portainer-ce:2.14.0command: -H tcp://tasks.agent:9001 --tlsskipverifyports:- "9443:9443"- "9000:9000"- "8000:8000"volumes:- portainer_data:/datanetworks:- agent_networkdeploy:mode: replicatedreplicas: 1placement:constraints: [node.role == manager]networks:agent_network:driver: overlayattachable: truevolumes:portainer_data:

备注:上面yml文件中的constraints字段的值,即node.role == manager,来限制portainer服务仅允许运行在swarm集群的管理节点上。

第三步,部署、启动portainer-ce和portainer-agent

# docker stack deploy -c portainer-agent-stack.yml portainer
Creating network portainer_agent_network
Creating service portainer_agent
Creating service portainer_portainer# docker stack ls
NAME        SERVICES   ORCHESTRATOR
portainer   2          Swarm# docker stack ps portainer
ID             NAME                                        IMAGE                           NODE      DESIRED STATE   CURRENT STATE            ERROR     PORTS
y66nxsac6of4   portainer_agent.betygbmft1wkh4kmrf5wx45mc   portainer/agent:2.14.0          master    Running         Running 11 seconds ago
91uog63d7mth   portainer_agent.nq4urvgyfdjedabze9p5oll6q   portainer/agent:2.14.0          node-01   Running         Running 12 seconds ago
eahaqvm3gyzc   portainer_agent.t6wtou7b5jm07qltlrp35ha85   portainer/agent:2.14.0          node-02   Running         Running 11 seconds ago
wy03vu1phwdq   portainer_portainer.1                       portainer/portainer-ce:latest   master    Running         Running 8 seconds ago        

部署、运行成功之后,我们可以通过下面的地址来访问portainer-ce的管理页面。

https://192.168.223.31:9443/

首次登录,需要在登录页面输入一个不少于12位的密码,以创建登录用户。在主页面我们可以看到系统的一个概况。

查看swarm集群的信息

修改集群节点的状态,可以暂停节点,也可以驱逐当前节点,默认是Active状态。

集群可视化(Cluster Visualizer):

禁止在Manager节点创建Nginx服务后的Visualizer,可以发现Nginx服务只在Node节点上启动和运行了。

Docker swarm集群的特性

1)当swarm集群所有节点关机后重启,重启后,之前创建的服务都可以自动启动;

2)当swarm集群某个从节点宕机,从节点上运行的容器会在其他节点上启动,以确保replicas设置的副本数不变;

3)当swarm集群只有一个主节点,且该主节点宕机,那么主节点上运行的服务,不会在从节点上再启动,replicas指定的服务副本数将无法得到保障;

4)当集群的主节点先启动的时候,有可能所有的副本都会在主节点上启动(如下所示,3个replicas全部在master节点上启动了),这时候我们为了使node节点的资源被合理利用,就需要将主节点上的多余的节点stop,之后被stop的节点就会在其他的node节点上均衡启动。由此我们可以得出一个结论,在启动swarm集群服务器时,最好先启动node节点,然后再启动master节点,这样可以使得管理节点创建的服务可以均衡的分布到node节点和master节点。

[root@master ~]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS     NAMES
ba190e2c7691   nginx:1.22.0   "/docker-entrypoint.…"   27 seconds ago   Up 20 seconds   80/tcp    nginx.3.6ift78belu1ypa22qt3ib5tcu
3a79485f8638   nginx:1.22.0   "/docker-entrypoint.…"   28 seconds ago   Up 20 seconds   80/tcp    nginx.1.l3k4csim2kii8552k1wyg0dq4
33812961a987   nginx:1.22.0   "/docker-entrypoint.…"   28 seconds ago   Up 20 seconds   80/tcp    nginx.2.mplcqurndpu8h6fw8ml8nj6cs

参考:

https://cloud.tencent.com/developer/article/2025737

https://docs.docker.com/engine/reference/commandline/swarm_init/

https://docs.docker.com/engine/reference/commandline/swarm_join/

【Docker】docker swarm集群搭建和相关命令分享相关推荐

  1. Docker Swarm集群搭建以及服务命令等操作

    前言:之前都是采用rancher可视化管理工具进行管理K8S进一步管理容器,但是每次机器宕机后rancher中集群特别容易挂掉,出现的问题五花八门,在网上很难搜到解决方案,所以准备采用docker官方 ...

  2. 【Docker之Swarm详细讲解Swarm集群搭建管理节点工作节点Raft一致性协议overlay网络Docker结合Swarm部署WordPress个人博客实战】

    一.知识回顾 之前的内容都帮你整理好了,在这里哟! [0.Docker相关目录文章整理,可自行查看,包含多节内容] [1.Docker详细安装部署&阿里镜像地址配置] [2.Docker架构& ...

  3. docker swarm 集群搭建与服务更新

    title: "docker swarm 搭建与服务更新"date: 2021-12-15T17:54:53+08:00Description: ""Tags: ...

  4. Swarm集群搭建( docker安装、docker-compose安装、portainer可视化安装、基本使用命令总结、项目集群部署案例)

    docker安装.docker-compose安装.Swarm集群搭建.portainer可视化安装.和项目部署案例 四台服务器,我这里选用四台虚拟机1核2G,系统centos7,ip:192.168 ...

  5. 正式环境docker部署hyperf_应用部署 - Docker Swarm 集群搭建 - 《Hyperf v1.1.1 开发文档》 - 书栈网 · BookStack...

    Docker Swarm 集群搭建 现阶段,Docker容器技术已经相当成熟,就算是中小型公司也可以基于 Gitlab.Aliyun镜像服务.Docker Swarm 轻松搭建自己的 Docker集群 ...

  6. Docker swarm 集群搭建

    Swarm是Docker公司在2014年12月初发布的一套较为简单的工具,用来管理docker集群,它将一群Docker宿主机变成一个单一的,虚拟的主机.Swarm使用标准的Docker API接口作 ...

  7. Docker网络测试;集群搭建;数据卷使用

    Dockers网络管理 Docker默认管理 1.Docker安装时会自动创建三种网络 2.利用命令查看网络详情 自定义网络 1.创建自定义网络;-driver可以指定网络驱动类型 2.使用自定义网络 ...

  8. docker 完成 redis集群搭建

    [Docker那些事]系列文章 docker 安装 与 卸载 centos Dockerfile 文件结构.docker镜像构建过程详细介绍 Dockerfile文件中CMD指令与ENTRYPOINT ...

  9. Docker下ETCD集群搭建

    Docker下ETCD集群搭建 https://www.cnblogs.com/eagle6688/p/8287907.html 搭建集群之前首先准备两台安装了CentOS 7的主机,并在其上安装好D ...

最新文章

  1. Angular5学习笔记 - 虚拟RestfulApi配置与使用(六)
  2. K-means聚类算法的三种改进(K-means++,ISODATA,Kernel K-means)介绍与对比
  3. 未能加载文件或程序集“AspNetPager”或它的某一个依赖项。拒绝访问。(异常来自 HRESULT:0x80070005 (E_ACCESSDENIED))...
  4. 构建良好的敏捷团队氛围
  5. 代码没问题,请求无响应,超时
  6. 高等数学下-赵立军-北京大学出版社-题解-练习10.3
  7. C++描述杭电OJ 2008.数值统计 ||
  8. 架构设计:微服务模式下,实现灰度发布模式
  9. linux下tmux
  10. python os库
  11. Waymo无人卡车高调重返凤凰城,重点路测高速和主干道,但货运先机已失
  12. Spark系列(三)SparkContext分析
  13. python万年历代码带解释_Python 万年历代码简单示例
  14. 什么是Servlet
  15. Web前端布局总体架构
  16. eight后缀勒索病毒百胜系统数据库成功恢复
  17. 在edge浏览器找不到internet选项?
  18. 未能加载文件或程序集“Newtonsoft.Json解决方法
  19. idea 一直 performing vcs refresh
  20. 同步BUCK死区时间产生电路原理及仿真

热门文章

  1. 如何让 OKR 评估和绩效评估一起进行?
  2. 【完美解决】Windows下移动硬盘无法弹出 | 弹出USB大容量存储设备时出问题 | Windows无法停用设备 | \$Extend\$RmMetadata\$TxfLog\$TxfLog.blf
  3. JavaScript基础功能总结
  4. Snail OS 0.03 user是用户进程和系统调用的简单实现
  5. 【论文解读】地空双模式车辆的自主自适应导航
  6. 机场航站楼防火玻璃幕墙NFPA 415美标防火测试认证
  7. mysql limit 排序_采坑笔记——mysql的order by和limit排序问题
  8. mac mysql命令行相关
  9. 李宏毅机器学习——Why Deep总结
  10. Vidmore Video Converter使用教程