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

做前基本操作

Docker Swarm_Swarm

Docker Swarm_Swarm_02

开启路由转发

Docker Swarm_Docker _03

Docker Swarm_Docker _04

检查 docker 版本

Docker Swarm_Docker _05

防洪墙

Docker Swarm_Docker _06

设置主机名:

Docker Swarm_Docker _07

Docker Swarm_Docker _08

Docker Swarm_Docker _09

node1

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

Docker Swarm_Docker _10

开启宿主机之间的端口

TCP 端口 2377 集群管理端口

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

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

Docker Swarm_Docker _11

配置所有节点密钥登录.

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

生成 sshkey

Docker Swarm_Swarm_12

发布 sshkey 到各个节点

Docker Swarm_Swarm_13

Docker Swarm_Swarm_14

Docker Swarm_Swarm_15

测试密钥登录

Docker Swarm_Docker _16

创建 Swarm 集群

node1 上初始化 swram 集群:

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

下命令只需要在 node1 上运行

Docker Swarm_Docker _17

查看端口号监听情况

Docker Swarm_Swarm_18

查看 swarm 集群 node 列表

Docker Swarm_Docker _19

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

node2

Docker Swarm_Docker _20

node3

Docker Swarm_Docker _21

node1

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

Docker Swarm_Swarm_22

查看 node2 docker info

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

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

Docker Swarm_Swarm_23

总结:

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

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

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

dockerswarm leave 命令由于离开集群

Docker Swarm_Swarm_24

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

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

Docker Swarm_Docker _25

Docker Swarm_Swarm_26

Docker Swarm_Docker _27

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

Docker Swarm_Swarm_28

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

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

停止 docker 服务

#systemctl stop docker

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


Docker Swarm_Docker _29

Docker Swarm_Docker _30

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

Docker Swarm_Swarm_31

重载 docker 服务并启动 docker 服务

Docker Swarm_Swarm_32

测试本地镜像仓库

node2 主机上推送镜像到 registry

需要先 tag 这个镜像

Docker Swarm_Docker _33

Docker Swarm_Swarm_34

Docker Swarm_Swarm_35

tag 后的镜像上传到 registry.

Docker Swarm_Swarm_36

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

Docker Swarm_Docker _37

Docker Swarm_Swarm_38

node3 主机测试从 registry 下载镜像

Docker Swarm_Docker _39

Docker Swarm_Swarm_40

node2

overlay 网络

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

Docker Swarm_Swarm_41

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

Docker Swarm_Docker _42

查询 docker network 列表

Docker Swarm_Swarm_43

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

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

Docker Swarm_Docker _44

使用 docker service ls 查看服务

Docker Swarm_Swarm_45

使用 docker serviceps<SERVICE-ID/NAME>查看服务运行在哪个节点上

Docker Swarm_Swarm_46

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

Docker Swarm_Swarm_47

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

查看服务:

Docker Swarm_Docker _48

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

Docker Swarm_Swarm_49

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

Docker Swarm_Docker _50

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

Docker Swarm_Docker _51