Docker Swarm是什么?

是一个用于创建 Docker 主机集群的工具,使用 Swarm 操作集群,会使用户感觉就像是在一台主机上进行操作,docker1.12 集成了 swarmkit, 使你可以不用安装额外的软件包, 使用简单的命令启动创建docker swarm 集群。

实验环境:

这里选择三台主机运行 Swarm,依次为:

node1 192.168.182.100

node2 192.168.182.101

node3 192.168.182.102

做前基本操作

blob.png

blob.png

开启路由转发

blob.png

Docker Swarm_第1张图片

检查 docker 版本

blob.png

防洪墙

Docker Swarm_第2张图片

设置主机名:

blob.png

blob.png

blob.png

node1

3 台主机均修改/etc/hosts 文件,添加所有主机的 ip 地址和主机名的映射记录

Docker Swarm_第3张图片

开启宿主机之间的端口

TCP 端口 2377 集群管理端口

TCP UDP 端口 7946 节点之间通讯端口

TCP UDP 端口 4789 overlay 网络通讯端口

blob.png

配置所有节点密钥登录.

配置所下节点密钥互信, node1 可以免密码登录各节点,只在 node1 上执行:

生成 sshkey

Docker Swarm_第4张图片

发布 sshkey 到各个节点

blob.png

blob.png

blob.png

测试密钥登录

blob.png

创建 Swarm 集群

node1 上初始化 swram 集群:

只需要在一个 node1 上初始化 swarm 集群, 其他 node 加入这个集群就行了, 所以以

下命令只需要在 node1 上运行

Docker Swarm_第5张图片

查看端口号监听情况

Docker Swarm_第6张图片

查看 swarm 集群 node 列表

blob.png

node1 通过 ssh, node2-node3 上执行上面的加入集群命令:

node2

blob.png

node3

blob.png

node1

再次检查集群节点列表, 我们可以看到所有的服务器都已经加入 swarm 集群了

blob.png

查看 node2 docker info

现在我们可以看到, 已经有3manager节点了, 一个Leader节点, 一个Reachable节点.

在你也可以在 node2 上面管理整个 swarm 集群

Docker Swarm_第7张图片

总结:

docker swarm:集群管理,子命令主要有下面几个。

docker swarm init 命令用于初始化一个集群

dockerswarm join 命令用于加入一个现有集群

dockerswarm leave 命令由于离开集群

Docker Swarm_第8张图片

registry 的默认存储路径是/var/lib/registry,只是个临时目录,一段时间之后就会消失

所以使用-v 参数,指定个本地持久的路径

blob.png

blob.png

blob.png

返回{"repositories":[]} 说明 registry 服务工作正常.

blob.png

镜像信息存放在/var/lib/registry 目录下,因此这里将宿主机目录映射到/var/lib/registry

所有主机都指向 registry 服务器:

停止 docker 服务

#systemctl stop docker

修改/usr/lib/systemd/system/docker.service,修改后保存退出


blob.png

blob.png

/usr/lib/systemd/system/docker.service传给node2 node3

blob.png

重载 docker 服务并启动 docker 服务

blob.png

测试本地镜像仓库

node2 主机上推送镜像到 registry

需要先 tag 这个镜像

blob.png

blob.png

blob.png

tag 后的镜像上传到 registry.

blob.png

push 成功后, 可以调用 registry API 查看 registry 中的镜像

blob.png

blob.png

node3 主机测试从 registry 下载镜像

blob.png

blob.png

node2

overlay 网络

解决了镜像构建问题, 为了让应用跑在 swram 集群,我们还需要解决容器间的网络访问问
查看 swarm 集群 node 列表

blob.png

docker 应用创建一个名为 dockercoins overlay network

blob.png

查询 docker network 列表

Docker Swarm_第9张图片

docker service create 命令创建一个 service.
--name 标签命名 service web1.
--replicas 标签来声明 1 个运行实体(即容器副本数)

注意, 我们启动的镜像名字 192.168.46.100:5000/centos:http 使用我们本地镜像仓库的镜像名
, 这样当主机上没有这个镜像时, 会自动到本地镜像仓库拉取镜像

blob.png

使用 docker service ls 查看服务

blob.png

使用 docker serviceps查看服务运行在哪个节点上

blob.png

用浏览器访问 http://192.168.46.100:8000 就能访问测试页

Docker Swarm_第10张图片

--replicas 标签来声明 2 个运行实体

查看服务:

Docker Swarm_第11张图片

从下图可以看到 web1 service 目前只有一个副本.

blob.png

扩展已有的服务的副本数,这里将 web1 服务扩展到 3 个副本

Docker Swarm_第12张图片

缩减已有的服务的副本数,这里将 web1 服务缩减到 2 个副本

Docker Swarm_第13张图片