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

如下文所示,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的部署讲起。笔者只花了几分钟时间,就在自己的谷歌云引擎上创建了4个集群节点,其中包括一个Swarm Master节点,两个Agent节点和一个Swarm Manager节点,后者用于管理整个集群。运行环境如下:

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

[email protected] ~]# docker -H tcp://0.0.0.0:2375 -d &
[1] 11516
[[email protected] ~]# 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
[[email protected] ~]#

安装Docker Swarm

[email protected]:~# 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]

[email protected]:~# docker run -d -p 7000:2375 swarm manage token://7733f838d176809cb2f2d24eb34ce78c
b26a2bbb336e26e0cd6ac5d61b90d7a9d9f74a2d072f573b6890bd9b0f6e470f

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

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

[email protected]:~# 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]

[email protected]:~# docker run -d swarm join –addr=10.240.0.4:2375 token://7733f838d176809cb2f2d24eb34ce78c
fe5b81d57f6394db655d15ce097f8ca537d6c74c2de6a477ac38544a7db0a5d8
[email protected]:~#

安装完毕,在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

[email protected]:~# 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
[email protected]:~#

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

[email protected]:~# 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
[email protected]:~#

综上所述,用户只需通过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]

[email protected]:~# docker run -d -p 7000:2375 swarm manage token://7733f838d176809cb2f2d24eb34ce78c
b26a2bbb336e26e0cd6ac5d61b90d7a9d9f74a2d072f573b6890bd9b0f6e470f

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

 

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

[email protected]:~# 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]

[email protected]:~# docker run -d swarm join –addr=10.240.0.4:2375 token://7733f838d176809cb2f2d24eb34ce78c
fe5b81d57f6394db655d15ce097f8ca537d6c74c2de6a477ac38544a7db0a5d8
[email protected]:~#

 

安装完毕,在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

[email protected]:~# 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
[email protected]:~#

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

[email protected]:~# 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
[email protected]:~#

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

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

时间: 2024-12-16 06:46:29

Docker Swarm入门教程的相关文章

Docker Swarm学习教程

原创作品,转载请注明出处:点我 Swarm介绍 Swarm是Docker公司在2014年12月初发布的一套较为简单的工具,用来管理Docker集群,它将一群Docker宿主机变成一个单一的,虚拟的主机.Swarm使用标准的Docker API接口作为其前端访问入口,换言之,各种形式的Docker Client(dockerclient in go, docker_py, docker等)均可以直接与Swarm通信.Swarm几乎全部用Go语言来完成开发,上周五,4月17号,Swarm0.2发布,

Docker入门教程(一)介绍

http://dockone.io/article/101 Docker入门教程(一)介绍 [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第一篇,介绍了Docker的基础概念以及Docker的安装. Docker是一个新的容器化的技术,它轻巧,且易移植,号称“build once, configure once and run anywhere(译者注:这个就不翻译了,翻译出来味道就没了)”.本文是Flux7的Docker系列教程的第一部分.请和这

Docker入门教程(二)命令

Docker入门教程(二)命令 [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第二篇,介绍了Docker的基本命令以及命令的用法和功能. 在Docker系列教程的第一篇文章中,我们了解了Docker的基础知识,知道了它是如何工作以及如何安装的.在这篇文章中,我们将学习15个Docker命令,并通过实践来学习它是如何工作的. 首先,让我们通过下面的命令来检查Docker的安装是否正确: docker info  如果没有找到这条命令,则表示Docke

Docker入门教程(四)Docker Registry

Docker入门教程(四)Docker Registry [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第四篇,介绍了Docker Registry,它是Docker中的重要组件.本文通过情景演绎的方式对其进行了介绍,图文并茂,强烈推荐读者阅读. 在Docker系列教程的上一篇文章中,我们讨论了Dockerfile的重要性并提供了一系列Dockerfile的命令,使镜像的自动构建更加容易.在这篇文章中,我们将介绍Docker的一个重要组件:Dock

Docker入门教程(七)Docker API

Docker入门教程(七)Docker API [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第七篇,重点介绍了Docker Registry API和Docker Hub API. 纵观我们的Docker系列教程,我们已经讨论了很多重要的Docker组件与命令.在本文中,我们将继续深入学习Docker:剖析Docker APIs. Docker提供了很多的API以便用户使用.这些API包含四个方面: Docker Registry API Doc

Docker入门教程(五)Docker安全

Docker入门教程(五)Docker安全 [编者的话]DockOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第五篇,介绍了Docker的安全问题,依然是老话重谈,入门者可以通过阅读本文快速了解. 我们必须高度重视开源软件的安全问题,当开发者在使用Docker时,从本地构建应用程序到生产环境部署是没有任何差异的(译者注:作者的言外之意是更应该重视Docker的安全问题).当Docker被越来越多的平台使用的时候,我们需要严格保证Docker作为一个项目或者平台的安全性.

关于docker入门教程

简介:docker入门教程 docker入门教程翻译自docker官方网站的Docker getting started 教程,官方网站:https://docs.docker.com/linux/started/ 官方网站是一个交互的教程,在左侧是相应的说明,右侧是一个交互的终端,输入预期的目录,可以跳到下一步,大家可以参考我们的翻译,在官网上面运行相应的命令,以验证效果. 译者按:之前的交互教程在新版本的docker官网上已无法找到,但核心的概念流程没有变,仍然可以参考.(2015/9/16

Docker 入门教程与实践

title: Docker 入门教程与实践 tags: Docker ---- 在Windows上安装Docker客户端 1.下载Docker TollBox: https://docs.docker.com/toolbox/toolbox_install_windows/ 2.安装的exe文件 在安装的过程中选中相应的勾选项,基本上是全部选择. docker在安装的过程中会自动安装Virtual Box,自己测试的时候安装的是5.2.4 3.自己在安装的的过程没有选择安装 git 还是用的自己

Docker(一):Docker入门教程

如今Docker的使用已经非常普遍,特别在一线互联网公司.使用Docker技术可以帮助企业快速水平扩展服务,从而到达弹性部署业务的能力.在云服务概念兴起之后,Docker的使用场景和范围进一步发展,如今在微服务架构越来越流行的情况下,微服务+Docker的完美组合,更加方便微服务架构运维部署落地. 本文详细解释介绍Docker入门相关内容,后期重点关注Docker在微服务体系中的使用.在了解Docker之前我们先考虑几个问题:1.Docker是什么?2.为什么要使用Docker,它有什么优势?带