一 Docker Swarm简介

Swarm 在 Docker 1.12 版本之前属于一个独立的项目,在 Docker 1.12 版本发布之后,该项目合并到了 Docker 中,成为 Docker 的一个子命令。

Swarm 是 Docker 社区提供的唯一一个原生支持 Docker 集群管理的工具。

Swarm可以把多个 Docker 主机组成的系统转换为单一的虚拟 Docker 主机,使得容器可以组成跨主机的子网网络。

Docker Swarm 是一个为 IT 运维团队提供集群和调度能力的编排工具

 Docker Swarm 优点

任何规模都有高性能表现

灵活的容器调度

服务的持续可用性

和 Docker API 及整合支持的兼容性

Docker Swarm 为 Docker 化应用的核心功能(诸如多主机网络和存储卷管理)提供原生支持。

docker swarm 相关概念

节点分为管理 (manager) 节点和工作 (worker) 节点

任务 (Task)是 Swarm 中的最小的调度单位,目前来说就是一个单一的容器。

服务 (Services) 是指一组任务的集合,服务定义了任务的属性。

二 Docker Swarm实践

1 创建 Swarm 集群

初始化集群:    docker swarm init

[root@server1 ~]# docker swarm init 

根据提示在其他docker节点上执行命令:

[root@server2 ~]# docker swarm join --token SWMTKN-1-5ipfg3qp4zqy5stlm19lq5w5xi8g9rwaqzcq31uc7gu8e5udjy-ekevu055fxp4kf700sjscaem4 172.25.7.1:2377
This node joined a swarm as a worker.
[root@server3 ~]# docker swarm join --token SWMTKN-1-5ipfg3qp4zqy5stlm19lq5w5xi8g9rwaqzcq31uc7gu8e5udjy-ekevu055fxp4kf700sjscaem4 172.25.7.1:2377
This node joined a swarm as a worker.
[root@server4 ~]# docker swarm join --token SWMTKN-1-5ipfg3qp4zqy5stlm19lq5w5xi8g9rwaqzcq31uc7gu8e5udjy-ekevu055fxp4kf700sjscaem4 172.25.7.2:2377
This node joined a swarm as a worker.

把server2升为manager,把server1降级

[root@server1 ~]# docker node promote  server2
Node server2 promoted to a manager in the swarm.[root@server1 ~]# docker node demote server1
Manager server1 demoted in the swarm.

把配置文件docker.conf传到其他节点

[root@server1 sysctl.d]# scp docker.conf server2:/etc/sysctl.d/
docker.conf                                   100%   80   114.6KB/s   00:00
[root@server1 sysctl.d]# scp docker.conf server3:/etc/sysctl.d/
docker.conf                                   100%   80   114.2KB/s   00:00
[root@server1 sysctl.d]# scp docker.conf server4:/etc/sysctl.d/
The authenticity of host 'server4 (172.25.7.4)' can't be established.
ECDSA key fingerprint is SHA256:W+53+laKT65G9xA9YPq/6F3WxJ9khpZTk5RKUjU9f04.
ECDSA key fingerprint is MD5:51:7b:a6:bf:ca:d0:6b:b8:76:69:5f:0d:90:5d:e0:92.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'server4,172.25.7.4' (ECDSA) to the list of known hosts.
root@server4's password:
docker.conf                                   100%   80   129.9KB/s   00:00

把证书传到其他节点

[root@server1 docker]# scp -r certs.d/ server2:/etc/docker/
ca.crt                                        100% 2106     1.7MB/s   00:00
[root@server1 docker]# scp -r certs.d/ server3:/etc/docker/
ca.crt                                        100% 2106     3.5MB/s   00:00
[root@server1 docker]# scp -r certs.d/ server4:/etc/docker/
root@server4's password:
ca.crt                                        100% 2106     3.9MB/s   00:00

把daemon.json传到其他节点

[root@server2 docker]# scp daemon.json server3:/etc/docker/
The authenticity of host 'server3 (172.25.7.3)' can't be established.
ECDSA key fingerprint is SHA256:W+53+laKT65G9xA9YPq/6F3WxJ9khpZTk5RKUjU9f04.
ECDSA key fingerprint is MD5:51:7b:a6:bf:ca:d0:6b:b8:76:69:5f:0d:90:5d:e0:92.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'server3,172.25.7.3' (ECDSA) to the list of known hosts.
root@server3's password:
daemon.json                                   100%   53    69.6KB/s   00:00
[root@server2 docker]# scp daemon.json server4:/etc/docker/
The authenticity of host 'server4 (172.25.7.4)' can't be established.
ECDSA key fingerprint is SHA256:W+53+laKT65G9xA9YPq/6F3WxJ9khpZTk5RKUjU9f04.
ECDSA key fingerprint is MD5:51:7b:a6:bf:ca:d0:6b:b8:76:69:5f:0d:90:5d:e0:92.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'server4,172.25.7.4' (ECDSA) to the list of known hosts.
root@server4's password:
daemon.json                                   100%   53    60.8KB/s   00:00   

在节点上重启docker服务

[root@server3 ~]# systemctl reload docker.service
[root@server3 ~]# docker info
Client:Debug Mode: falseServer:Containers: 0Running: 0Paused: 0Stopped: 0Images: 0Server Version: 19.03.15Storage Driver: overlay2Backing Filesystem: xfsSupports d_type: trueNative Overlay Diff: trueLogging Driver: json-fileCgroup Driver: cgroupfsPlugins:Volume: localNetwork: bridge host ipvlan macvlan null overlayLog: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslogSwarm: activeNodeID: 366yvf2bx3ljl262en2mtuj8tIs Manager: falseNode Address: 172.25.7.3Manager Addresses:172.25.7.2:2377Runtimes: runcDefault Runtime: runcInit Binary: docker-initcontainerd version: 05f951a3781f4f2c1911b05e61c160e9c30eaa8erunc version: 12644e614e25b05da6fd08a38ffa0cfe1903fdecinit version: fec3683Security Options:seccompProfile: defaultKernel Version: 3.10.0-957.el7.x86_64Operating System: Red Hat Enterprise Linux Server 7.6 (Maipo)OSType: linuxArchitecture: x86_64CPUs: 2Total Memory: 1.795GiBName: server3ID: ASV6:HVBW:BU37:YREC:UQLN:GWD2:MG33:773D:HKEH:TCUF:NC6C:RP3QDocker Root Dir: /var/lib/dockerDebug Mode: falseRegistry: https://index.docker.io/v1/Labels:provider=genericExperimental: falseInsecure Registries:127.0.0.0/8Registry Mirrors:https://reg.westos.org/Live Restore Enabled: false[root@server4 ~]# systemctl reload docker.service
[root@server4 ~]# docker info
Client:Debug Mode: falseServer:Containers: 0Running: 0Paused: 0Stopped: 0Images: 0Server Version: 19.03.15Storage Driver: overlay2Backing Filesystem: xfsSupports d_type: trueNative Overlay Diff: trueLogging Driver: json-fileCgroup Driver: cgroupfsPlugins:Volume: localNetwork: bridge host ipvlan macvlan null overlayLog: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslogSwarm: activeNodeID: xqy5moauh3gi8fascts2jv611Is Manager: falseNode Address: 172.25.7.4Manager Addresses:172.25.7.2:2377Runtimes: runcDefault Runtime: runcInit Binary: docker-initcontainerd version: 05f951a3781f4f2c1911b05e61c160e9c30eaa8erunc version: 12644e614e25b05da6fd08a38ffa0cfe1903fdecinit version: fec3683Security Options:seccompProfile: defaultKernel Version: 3.10.0-957.el7.x86_64Operating System: Red Hat Enterprise Linux Server 7.6 (Maipo)OSType: linuxArchitecture: x86_64CPUs: 2Total Memory: 814MiBName: server4ID: XBGD:W7PE:4V6W:J6BA:54S4:BOKG:J2JZ:7NGC:VNUP:KKXZ:RINM:MHSGDocker Root Dir: /var/lib/dockerDebug Mode: falseRegistry: https://index.docker.io/v1/Labels:Experimental: falseInsecure Registries:127.0.0.0/8Registry Mirrors:https://reg.westos.org/Live Restore Enabled: false

查看swarm集群节点:

[root@server2 docker]# docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
zadbhah8zz4eov6wi5c8h01xs *   server2             Ready               Active              Leader              19.03.15
366yvf2bx3ljl262en2mtuj8t     server3             Ready               Active                                  19.03.15
xqy5moauh3gi8fascts2jv611     server4             Ready               Active                                  19.03.15

弹性伸缩:

[root@server2 docker]# docker service scale webservice=6
webservice scaled to 6
overall progress: 6 out of 6 tasks
1/6: running
2/6: running
3/6: running
4/6: running
5/6: running
6/6: running
verify: Service converged

启动server1上的镜像仓库

[root@server1 harbor]# docker-compose start
Starting log         ... done
Starting registry    ... done
Starting registryctl ... done
Starting postgresql  ... done
Starting portal      ... done
Starting redis       ... done
Starting core        ... done
Starting jobservice  ... done
Starting proxy       ... done

测试当初步部署完成后会自动实行负载均衡

在server2上

部署swarm监控:(各节点提前导入dockersamples/visualizer镜像)

docker service create --name=viz --publish=8080:8080/tcp \
--constraint=node.role==manager  \
--mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock   dockersamples/visualizer

创建集群服务:

[root@server2 ~]# docker service create --name webservice --publish 80:80 --replicas 60 myapp:v1
pp2imsewghn0jqtwhmjcdcw5c
overall progress: 60 out of 60 tasks
verify: Service converged

滚动更新

[root@server2 ~]# docker service update --image myapp:v2 --update-parallelism 5 --update-delay 10s webservice
webservice
overall progress: 10 out of 60 tasks
service update paused: update paused due to failure or early termination of task ntk4gzk4b4edidwls0n3fu4q3
[root@server2 ~]#

删除创建的服务

[root@server2 ~]# docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE                             PORTS
zn2xhwl5adfr        viz                 replicated          1/1                 dockersamples/visualizer:latest   *:8080->8080/tcp
pp2imsewghn0        webservice          replicated          60/60               myapp:v2                          *:80->80/tcp
[root@server2 ~]# docker service rm viz
viz
[root@server2 ~]# docker service rm webservice
webservice

编写docker-compose.yml文件

[root@server2 ~]# cat docker-compose.yml
version: "3.8"
services:web:image: myapp:v2ports:- "80:80"networks:- webnetdeploy:replicas: 60update_config:parallelism: 20delay: 5srestart_policy:condition: on-failurevisualizer:image: visualizer:latestports:- "8080:8080"stop_grace_period: 1m30svolumes:- "/var/run/docker.sock:/var/run/docker.sock"deploy:placement:constraints:- "node.role==manager"networks:webnet:

执行docker-compose.yml文件

[root@server2 ~]# docker stack deploy -c docker-compose.yml mycluster
Creating network mycluster_default
Creating network mycluster_webnet
Creating service mycluster_visualizer
Creating service mycluster_web

设置图形化界面

在server1上

导入镜像

[root@server1 ~]# cd portainer/
[root@server1 portainer]# ls
portainer-agent-stack.yml  portainer-agent.tar  portainer.tar
[root@server1 portainer]# docker load -i portainer.tar
dd4969f97241: Loading layer    278kB/278kB
e7260fd2a5f2: Loading layer  73.85MB/73.85MB
Loaded image: portainer/portainer:latest
[root@server1 portainer]# docker load -i portainer-agent.tar
1f0ac9aec537: Loading layer  2.048kB/2.048kB
0cf0d1d03535: Loading layer  12.15MB/12.15MB
Loaded image: portainer/agent:latest

上传镜像到私人仓库

[root@server1 portainer]# docker tag portainer/agent:latest reg.westos.org/portainer/agent:latest
[root@server1 portainer]# docker tag portainer/portainer:latest reg.westos.org/portainer/portainer:latest
[root@server1 portainer]# docker push reg.westos.org/portainer/portainer:latest
The push refers to repository [reg.westos.org/portainer/portainer]
e7260fd2a5f2: Pushed
dd4969f97241: Pushed
latest: digest: sha256:5702df0ee639d9e003eee626d905e7d4d7ee1a2c7d40a7ec961e3996924f0285 size: 739
[root@server1 portainer]# docker push reg.westos.org/portainer/agent:latest
The push refers to repository [reg.westos.org/portainer/agent]
0cf0d1d03535: Pushed
1f0ac9aec537: Pushed
dd4969f97241: Mounted from portainer/portainer
latest: digest: sha256:d5e9b7b6e0ed94f868c64127fe8d4a2c3dc1c2fa771c6695f1f9c8924c646bac size: 945

在server2上执行文件 portainer-agent-stack.yml

[root@server2 ~]# docker stack deploy -c portainer-agent-stack.yml portainer
Creating network portainer_agent_network
Creating service portainer_agent
Creating service portainer_portainer

查看服务

[root@server2 ~]# docker service ls
ID                  NAME                   MODE                REPLICAS            IMAGE                        PORTS
u5grhy9dwhsw        mycluster_visualizer   replicated          0/1                 visualizer:latest            *:8080->8080/tcp
3ogf4lexuhev        mycluster_web          replicated          60/60               myapp:v2                     *:80->80/tcp
orjpaqtp6rx7        portainer_agent        global              3/3                 portainer/agent:latest
9dyxf9hw31mz        portainer_portainer    replicated          1/1                 portainer/portainer:latest   *:9000->9000/tcp

在web端登陆图形化界面

Docker入门之Docker Swarm相关推荐

  1. Docker入门-搭建docker私有仓库

    Docker Hub 目前Docker官方维护了一个公共仓库Docker Hub,其中已经包括了数量超过15000个镜像.大部分需求都可以通过在Docker Hub中直接下载镜像来使用. 注册登录 可 ...

  2. [转]docker入门(利用docker部署web应用)

    前言:本课程是在慕课网上学习 第一个docker化的java应用 课程时所做的笔记,供本人复习之用 目录 第一章 什么是docker 1.1 docker的发展史 1.2 docker国内应用史 1. ...

  3. 【Docker 入门】Docker简介与安装

    Docker Desktop for Windows 目录: Docker Desktop for Windows 1. Docker简介: 2. Docker应用场景: 3. Docker对比虚拟机 ...

  4. 【docker入门】docker入门

    docker简介: 什么是容器? 一种虚拟化的方案,虚拟化操作系统 只能运行相同或相似内核的操作系统 依赖于linux内核特性:Namespace和Cgroups 什么是docker? 将开发的应用程 ...

  5. docker入门(利用docker部署web应用)

    更新:随手写的一篇博客能收获这么多赞真是挺开心的,不过现在博主很忙,博主本人主要也是从事Java方向对docker暂时没有更深的理解了,写这个目的也是为了自己复习,恕不能对出现问题的同学进行答疑了,当 ...

  6. 3.8 Docker最新入门教程-Docker入门-使用 Docker Compose

    3.8 使用 Docker Compose Docker Compose是一种旨在帮助定义和共享多容器应用程序的工具.使用 Compose,我们可以创建一个 YAML 文件来定义服务,并使用一个命令, ...

  7. Docker入门之Docker Hub学习

    文章目录 1. DockerHub 仓库使用 1) 登录到Docker Hub 2) 将本地镜像推送到Docker Hub 1. DockerHub 仓库使用    Docker Hub是Docker ...

  8. docker入门之Docker Engine

    文档:Docker Engine overview | Docker Documentation 1.简介 Docker Engine 是一种开源容器化技术,用于构建和容器化您的应用程序. Docke ...

  9. Docker入门 - 005 Docker 容器连接

    Docker 容器连接 前面我们实现了通过网络端口来访问运行在docker容器内的服务.下面我们来实现通过端口连接到一个docker容器 网络端口映射 我们创建了一个 python 应用的容器. do ...

最新文章

  1. 对码农的忠告---内心不强大者绕道勿看-来自某CTO的演讲
  2. OpenCV图像操作的实例(附完整代码)
  3. 纯CSS实现漂亮圆角阴影边框
  4. ASP.NET Core 中的规约模式(Specification Pattern )——增强泛型仓储模式
  5. android广播唤醒app,Android APP唤醒打开其他APP
  6. es解决只能查询10000条数据方案
  7. 远程连接 速度慢 显示 正在连接到很久
  8. EXT.NET高效开发(二)——封装函数
  9. 4.4使用@Enable*注释去切换配置
  10. qq四国军旗2.1 beat03 builde017记牌器开发思路(二)
  11. 编辑PDF用什么软件,如何替换PDF页面
  12. 阿里巴巴未来十年使命、愿景和价值观
  13. markdown编辑器和富文本编辑器区别
  14. 软考高级 真题 2015年上半年 信息系统项目管理师 综合知识
  15. QT下使用QAxObject打开word文档,文档路径含有空格open出错的解决方法
  16. 运维工程师与php,php新手入门的基础内容①
  17. 依赖倒置、控制反转、依赖注入
  18. MVP实现购物车(二级列表),删除结算功能,拦截器+封装okHttp
  19. python 选择排序 快速排序
  20. CSS样式内联选择器选择器优先级伪类顺序

热门文章

  1. MTK audio tuning tool
  2. 1068个电动牙刷品牌,能否跑出一个独角兽?
  3. 洛书的递变的无聊探究
  4. Nginx正向代理任何域名的实现
  5. 面试官:对于 JavaScript 的加载问题你怎杨理解?
  6. 系统化web前端需要技能所占比(通过图表分析来看您是不是一个合格的前端)
  7. OverTheWire-Narnia
  8. 【python】算法与数据结构例题分析
  9. 麒麟子Cocos Creator 3D研究笔记八:3D坐标转2D人物血条
  10. 戴着镣铐起舞——从logo设计说起