转载

Docker Swarm入门教程

迄今为止,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来实现对集群的管理,不再像以前一样只能在单一主机上部署容器。

Docker Swarm入门教程

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

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

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

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

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

Docker Swarm入门教程

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

Docker Swarm入门教程

创建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

[root@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

[root@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带来的便捷和高效!

原文  http://dockone.io/article/1237
正文到此结束
Loading...