设为首页 收藏本站
查看: 1727|回复: 1

[经验分享] Docker Swarm入门教程

[复制链接]
累计签到:2 天
连续签到:1 天
发表于 2016-4-22 10:54:59 | 显示全部楼层 |阅读模式
迄今为止,Docker Swarm问世已有一年的时间。Docker Swarm的首次隆重亮相要追溯到2014年,Docker官方在当年12月的DockerConEU峰会上正式推出了Docker Swarm。Docker Swarm不仅是一种用于管理Docker及Docker Machine的集群管理工具,同时也是一种CLI工具,可用来控制Docker主机。Docker官方意在通过Docker Swarm提供一套全面的、能够覆盖容器运行的各个环节的集成式解决方案,并突破自身的现有定位,实现从单纯提供Docker引擎到产品多样化的转变。

    对于Docker而言,Docker Swarm可谓是原生的集群管理工具。Swarm调用的是Docker API标准接口,我们只需通过常规的docker运行命令来启动容器,后续的工作就不用管了,Swarm会自动选择适合的主机来运行相关容器。也就是说,像Compose和bespoke scripts等同样调用Docker API的管理工具可以在不经任何改动的情况下,直接通过Swarm来实现对集群的管理,不再像以前一样只能在单一主机上部署容器。


QQ截图20160422105415.png

     如下文所示,Swarm的基础架构非常简单:

i. 在每台主机上都部署一个Swarm agent,并在一台主机上安装Swarm manager(在小型集群上跑测试的时候,安装Swarm manager的主机上也可以同时装agent)。

ii. 所有主机上的容器都由manager来编排和调度。

iii. Swarm提供了高可用机制,比如说,我们可以通过etcd、Consul或ZooKeeper来将现有业务转交给备用的manager,从而实现故障转移。

    Swarm提供了若干种不同的机制来查找主机并将其加入到某个集群中,业内管这一功能叫Swarm发现服务。Swarm默认的是令牌查找模式,在这种模式下,每台主机的IP地址都以列表形式存储在Docker Hub上。

QQ截图20160422105425.png

    下面我们进入实战环节,作为一个入门教程,我们先从Docker Swarm的部署讲起。笔者只花了几分钟时间,就在自己的谷歌云引擎上创建了4个集群节点,其中包括一个Swarm Master节点,两个Agent节点和一个Swarm Manager节点,后者用于管理整个集群。运行环境如下:

QQ截图20160422105436.png

创建Swarm Master节点:

   首先我们要在Docker Swarm集群的节点上安装Docker 1.9.1,可参照下文的命令行将所有主机上的Docker升级到最新版本:

wget -qO- https://get.docker.com/ | sh
[注意这里是大写字母O,不是数字0]

Processing triggers for systemd (225-1ubuntu9) …   

Processing triggers for man-db (2.7.4-1) …

Setting up docker-engine (1.9.1-0~wily) …
Installing new version of config file /etc/bash_completion.d/docker …
Installing new version of config file /etc/init.d/docker …
Installing new version of config file /etc/init/docker.conf …
Processing triggers for ureadahead (0.100.0-19) …
Processing triggers for systemd (225-1ubuntu9) …
+ sh -c docker version
Client:
Version: 1.9.1
API version: 1.21
Go version: go1.4.2
Git commit: a34a1d5
Built: Fri Nov 20 13:20:08 UTC 2015
OS/Arch: linux/amd64
Server:
Version: 1.9.1
API version: 1.21
Go version: go1.4.2
Git commit: a34a1d5
Built: Fri Nov 20 13:20:08 UTC 2015
OS/Arch: linux/amd64
如果要以非root用户的角色使用Docker,则需用以下命令行将用户添加到“docker”用户组:
sudo usermod -aG docker [要添加的用户]
注意,执行该命令行之后,要退出重新登录才能生效。


启动Docker Daemon

root@dockerhost-1 ~]# docker -H tcp://0.0.0.0:2375 -d &
[1] 11516
[iyunv@dockerhost-1 ~]# Warning: ‘-d’ is deprecated, it will be removed soon. See usage.
WARN[0000] please use ‘docker daemon’ instead.
WARN[0000] /!\ DON’T BIND ON ANY IP ADDRESS WITHOUT setting -tlsverify IF YOU DON’T KNOW WHAT YOU’RE DOING /!\
INFO[0000] Listening for HTTP on tcp (0.0.0.0:2375)
ERRO[0000] WARNING: No –storage-opt dm.thinpooldev specified, using loopback; this configuration is strongly discouraged for production use
INFO[0000] [graphdriver] using prior storage driver “devicemapper”
INFO[0000] Option DefaultDriver: bridge
INFO[0000] Option DefaultNetwork: bridge
WARN[0000] Running modprobe bridge nf_nat br_netfilter failed with message: modprobe: WARNING: Module br_netfilter not found.
, error: exit status 1
INFO[0000] Firewalld running: true
INFO[0000] Loading containers: start.
INFO[0000] Loading containers: done.
INFO[0000] Daemon has completed initialization
INFO[0000] Docker daemon commit=a01dc02/1.8.2 execdriver=native-0.2 graphdriver=dev
icemapper version=1.8.2-el7.centos
[iyunv@dockerhost-1 ~]#


安装Docker Swarm:

root@docker-1:~# docker run –rm swarm create
7733f838d176809cb2f2d24eb34ce78c

上面的命令行会创建一个token ID,整个Docker Swarm集群的配置都是围绕这个ID进行的。


安装Swarm Agent Node 1:[10.240.0.3]

    首先要确定Agent节点1上已经安装了1.9.x版本的Docker。另外说一句,在Agent节点上启动Docker daemon的步骤跟在master节点上的启动步骤是一样的:

#docker run -d swarm join –addr=10.240.0.3:2375 token://7733f838d176809cb2f2d24eb34ce78c

560e58a76ef235c8d74fffb2c680149111b8bbe687f1e0e164cd7c05dad59f33


安装Swarm Manager Node:[10.240.0.5]

root@docker-3:~# docker run -d -p 7000:2375 swarm manage token://7733f838d176809cb2f2d24eb34ce78c
b26a2bbb336e26e0cd6ac5d61b90d7a9d9f74a2d072f573b6890bd9b0f6e470f

注意此处的7000是swarm manager的端口号,大家可以设置自己的端口号。


下面可以看到swarm集群的详细信息:

root@docker-3:~# docker -H tcp://10.240.0.5:7000 info
Containers: 0
Images: 2
Storage Driver:
Role: primary
Strategy: spread
Filters: health, port, dependency, affinity, constraint
Nodes: 1
docker-1: 10.240.0.2:2375
+ Status: Healthy
+ Containers: 0
+ Reserved CPUs: 0 / 1
+ Reserved Memory: 0 B / 3.794 GiB
+ Labels: executiondriver=native-0.2, kernelversion=4.2.0-18-generic, operatingsystem=Ubuntu 15.10, storagedriver
=devicemapper
Execution Driver:
Kernel Version:
Operating System:
CPUs: 1
Total Memory: 3.794 GiB
Name: b26a2bbb336e
ID:
Http Proxy:
Https Proxy:
No Proxy:

因为我们上面只添加了一个集群节点,所以这里显示的swarm集群中只有节点1。


安装Swarm Agent Node 2 :[10.240.0.4]

root@docker-2:~# docker run -d swarm join –addr=10.240.0.4:2375 token://7733f838d176809cb2f2d24eb34ce78c
fe5b81d57f6394db655d15ce097f8ca537d6c74c2de6a477ac38544a7db0a5d8
root@docker-2:~#


安装完毕,在Swarm Manager节点上运行下面的命令行即可查看swarm集群中的所有节点:
#docker run –rm swarm list token://7733f838d176809cb2f2d24eb34ce78c

10.240.0.4:2375
10.240.0.2:2375

OK!大功告成!多节点Swarm集群创建完毕!


下面我们来创建一个容器,并通过Swarm Manager来运行该容器:

sudo docker -H tcp://10.0.1.61:5001 run -dt –name swarm-test nginx /bin/sh

root@docker-1:~# docker images
INFO[0999] GET /v1.18/images/json
INFO[0999] +job images()
INFO[0999] -job images() = OK (0)
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
nginx latest 813e3731b203 4 days ago 133.8 MB
centos latest 14dab3d40372 5 days ago 194.7 MB
swarm latest e9ff33e7e5b9 11 days ago 17.15 MB
ajeetraina/dell-syscfg v1.0 d121b6e6dba4 12 weeks ago 1.449 GB
tduzan/docker-omsa latest ffcbdafb4aa6 16 months ago 806.4 MB
root@docker-1:~#


下面的命令行可以查看各个swarm agent主机上运行的容器:

root@docker-3:~# docker -H tcp://10.240.0.5:7100 ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS

NAMES
d0ee6dad4b39 nginx:latest “/bin/sh” 58 minutes ago Up 58 minutes 80/tcp,
443/tcp docker-1/swarm-test
cd9bc8c96e45 ajeetraina/dell-syscfg:v1.0 “/bin/bash” About an hour ago Up About an hour
docker-1/jolly_curie
d0bcc8da090e bad926a6fb50:latest “/bin/bash” About an hour ago Up About an hour
docker-2/hopeful_tesla
root@docker-3:~#

    综上所述,用户只需通过Swarm Manager节点便可创建容器,而且操作非常简便。我们不用去管容器要运行在哪个节点上,Swarm集群具有高度智能化的特点,可自动分配适当的资源以供容器运行。

    通过以上教程,大家可以对Docker Swarm的安装使用有个初步的印象,希望本篇教程能够帮助到大家。最后祝大家都能体验到Swarm带来的便捷和高效!


安装Swarm Agent Node 1:[10.240.0.3]

    首先要确定Agent节点1上已经安装了1.9.x版本的Docker。另外说一句,在Agent节点上启动Docker daemon的步骤跟在master节点上的启动步骤是一样的:

#docker run -d swarm join –addr=10.240.0.3:2375 token://7733f838d176809cb2f2d24eb34ce78c

560e58a76ef235c8d74fffb2c680149111b8bbe687f1e0e164cd7c05dad59f33


安装Swarm Manager Node:[10.240.0.5]

root@docker-3:~# docker run -d -p 7000:2375 swarm manage token://7733f838d176809cb2f2d24eb34ce78c
b26a2bbb336e26e0cd6ac5d61b90d7a9d9f74a2d072f573b6890bd9b0f6e470f

注意此处的7000是swarm manager的端口号,大家可以设置自己的端口号。


下面可以看到swarm集群的详细信息:

root@docker-3:~# docker -H tcp://10.240.0.5:7000 info
Containers: 0
Images: 2
Storage Driver:
Role: primary
Strategy: spread
Filters: health, port, dependency, affinity, constraint
Nodes: 1
docker-1: 10.240.0.2:2375
+ Status: Healthy
+ Containers: 0
+ Reserved CPUs: 0 / 1
+ Reserved Memory: 0 B / 3.794 GiB
+ Labels: executiondriver=native-0.2, kernelversion=4.2.0-18-generic, operatingsystem=Ubuntu 15.10, storagedriver
=devicemapper
Execution Driver:
Kernel Version:
Operating System:
CPUs: 1
Total Memory: 3.794 GiB
Name: b26a2bbb336e
ID:
Http Proxy:
Https Proxy:
No Proxy:

因为我们上面只添加了一个集群节点,所以这里显示的swarm集群中只有节点1。


安装Swarm Agent Node 2 :[10.240.0.4]

root@docker-2:~# docker run -d swarm join –addr=10.240.0.4:2375 token://7733f838d176809cb2f2d24eb34ce78c
fe5b81d57f6394db655d15ce097f8ca537d6c74c2de6a477ac38544a7db0a5d8
root@docker-2:~#


安装完毕,在Swarm Manager节点上运行下面的命令行即可查看swarm集群中的所有节点:
#docker run –rm swarm list token://7733f838d176809cb2f2d24eb34ce78c

10.240.0.4:2375
10.240.0.2:2375

OK!大功告成!多节点Swarm集群创建完毕!


下面我们来创建一个容器,并通过Swarm Manager来运行该容器:

sudo docker -H tcp://10.0.1.61:5001 run -dt –name swarm-test nginx /bin/sh

root@docker-1:~# docker images
INFO[0999] GET /v1.18/images/json
INFO[0999] +job images()
INFO[0999] -job images() = OK (0)
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
nginx latest 813e3731b203 4 days ago 133.8 MB
centos latest 14dab3d40372 5 days ago 194.7 MB
swarm latest e9ff33e7e5b9 11 days ago 17.15 MB
ajeetraina/dell-syscfg v1.0 d121b6e6dba4 12 weeks ago 1.449 GB
tduzan/docker-omsa latest ffcbdafb4aa6 16 months ago 806.4 MB
root@docker-1:~#


下面的命令行可以查看各个swarm agent主机上运行的容器:

root@docker-3:~# docker -H tcp://10.240.0.5:7100 ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS

NAMES
d0ee6dad4b39 nginx:latest “/bin/sh” 58 minutes ago Up 58 minutes 80/tcp,
443/tcp docker-1/swarm-test
cd9bc8c96e45 ajeetraina/dell-syscfg:v1.0 “/bin/bash” About an hour ago Up About an hour
docker-1/jolly_curie
d0bcc8da090e bad926a6fb50:latest “/bin/bash” About an hour ago Up About an hour
docker-2/hopeful_tesla
root@docker-3:~#

    综上所述,用户只需通过Swarm Manager节点便可创建容器,而且操作非常简便。我们不用去管容器要运行在哪个节点上,Swarm集群具有高度智能化的特点,可自动分配适当的资源以供容器运行。

    通过以上教程,大家可以对Docker Swarm的安装使用有个初步的印象,希望本篇教程能够帮助到大家。最后祝大家都能体验到Swarm带来的便捷和高效!



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-207334-1-1.html 上篇帖子: 使用pipework配置docker容器固定ip 下篇帖子: 联想企业网盘基于Docker构建分布式部署框架实践
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表