共计 3217 个字符,预计需要花费 9 分钟才能阅读完成。
Swarm 介绍
Docker
自诞生以来,其容器特性以及镜像特性给 DevOps
爱好者带来了诸多方便。然而在很长的一段时间内,Docker
只能在单 host
上运行,其 跨 host
的部署、运行与管理能力颇受外界诟病。跨 host 能力的薄弱,直接导致 Docker
容器与 host
的紧耦合,这种情况下,Docker
容器的灵活性很难令人满意,容器的迁移、分组等都成为很难实现的功能点。
Swarm
是 Docker 公司在 2014 年 12 月初新发布的容器管理工具。和 Swarm 一起发布的 Docker 管理工具还有 Machine 以及 Compose。
Swarm
是一套较为简单的工具,用以管理 Docker 集群,使得 Docker 集群暴露给用户时相当于一个虚拟的整体。Swarm 使用标准的 Docker API 接口作为其前端访问入口,换言之,各种形式的 Docker Client(dockerclient in go, docker_py, docker 等)均可以直接与 Swarm 通信。Swarm 几乎全部用 Go 语言来完成开发,并且还处于一个 Alpha 版本,目前在 github 上发布的版本仅有 v0.1.0-rc1。然而 Swarm 的发展十分快速,功能和特性的变更迭代还非常频繁。因此,可以说 Swarm 还不推荐被用于生产环境中,但可以肯定的是 Swarm 是一项很有前途的技术。
端口监听
Swarm
是通过监听 2375
端口进行通信的,所以在使用 Swarm
进行集群管理之前,需要设置一下 2375
端口的监听。这里有两种方法,一种是通过修改 docker 配置文件方式,另一种是通过一个轻量级的代理容器进行监听。
修改配置文件修改监听端口(推荐)
由于我是使用 CentOS7
安装的 docker
,所以下面的配置是适用于Centos7
的。
打开配置文件/etc/sysconfig/docker
:
vim /etc/sysconfig/docker
修改配置项 OPTIONS
中的值,若 OPTIONS
中没有值,则直接添加-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
,否则在已有参数后面添加,比如下面这样:
OPTIONS='--selinux-enabled --log-driver=journald
--signature-verification=false
-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock'
修改完之后保存文件,然后重启 docker 服务
systemctl restart docker
注意:需要对所有要加入集群的 docker 节点都进行上面的修改配置文件的操作。
使用 docker-proxy 代理服务
默认情况下,Docker
引擎只侦听套接字。我们可以重新配置引擎以使用 TLS
,或者您可以使用代理容器。这是一个非常轻量级的容器,它只是将请求从TCP
转发到 Docker
监听的Unix 套接字
。
先通过 docker pull
命令下载镜像
docker pull docker.io/shipyard/docker-proxy
然后启动容器:
docker run -ti -d -p 2375:2375 \
--restart=always \
--hostname=$HOSTNAME \
--name shipyard-proxy \
-v /var/run/docker.sock:/var/run/docker.sock \
-e PORT=2375 \
docker.io/shipyard/docker-proxy:latest
注意:该代理服务容器也需要在每个要加入集群的 docker 节点上启动,同时要保证该容器的正常运行,如果容器停止则无法发现节点。
搭建 Docker 集群
拉取 Swarm 镜像
docker pull docker.io/swarm
生成唯一 token
在任意的 docker
节点创建一个全世界唯一的 token(集群 ID)
, 记住这个token
后面需要用到。(这里用的发现服务是 dockhub 内置的,当然还有其他的比如 etcd、consul 等。)
docker run --rm swarm create
rw4d3ac32aa6a86b341e3asd69e2cd0b
执行上面的命令之后,会生成一个 token。
启动 Swarn Manager
docker run -ti -d -p 2376:2375 \
--restart=always \
--name shipyard-swarm-manager \
docker.io/swarm:latest \
manage --host tcp://0.0.0.0:2375 \
token://rw4d3ac32aa6a86b341e3asd69e2cd0b
Swarn Manager
只需要启动一个,所以可选取一个 docker
节点进行启动,我这里是在我这块的主机 10.0.11.150
上启动的。
启动 Swarm Agent
启动 Swarm agent
,将当前docker
节点加入到集群中,Swarm Agent
需要在每一个要加入到集群中的 docker
节点上启动。
docker run -ti -d \
--restart=always \
--name shipyard-swarm-agent \
docker.io/swarm:latest \
join --addr [docker node ip]:2375 \
token://rw4d3ac32aa6a86b341e3asd69e2cd0b
注:上面这条命令中的 [docker node ip]
项需要更换为要加入集群的 docker 节点的真实 IP。
查看 docker 节点情况
可以使用命令查看 docker
节点情况(任意 docker
节点上都可以执行):
docker run --rm swarm list token://rw4d3ac32aa6a86b341e3asd69e2cd0b
查看 docker 集群详情
可以使用命令查看 docker
集群的详情(可在任意 docker
节点上执行,IP 地址是装了 Swarm Master
主机的 IP):
docker -H 10.0.11.150:2376 info
更多 Docker 相关教程见以下内容:
Docker 安装应用(CentOS 6.5_x64) http://www.linuxidc.com/Linux/2014-07/104595.htm
Ubuntu 16.04 服务器上配置使用 Docker http://www.linuxidc.com/Linux/2017-06/145176.htm
Ubuntu 15.04 下安装 Docker http://www.linuxidc.com/Linux/2015-07/120444.htm
Docker 安装实例 http://www.linuxidc.com/Linux/2017-04/142666.htm
Docker 创建基础镜像 http://www.linuxidc.com/Linux/2017-05/144112.htm
在 Ubuntu 15.04 上如何安装 Docker 及基本用法 http://www.linuxidc.com/Linux/2015-09/122885.htm
Ubuntu 16.04 上 Docker 使用手记 http://www.linuxidc.com/Linux/2016-12/138490.htm
使用 Docker 分分钟启动常用应用 http://www.linuxidc.com/Linux/2017-04/142649.htm
Ubuntu 16.04 下 Docker 修改配置文件不生效解决办法 http://www.linuxidc.com/Linux/2017-05/143862.htm
Docker 的详细介绍:请点这里
Docker 的下载地址:请点这里
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-12/149579.htm