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 版本
防洪墙
设置主机名:
node1
3 台主机均修改/etc/hosts 文件,添加所有主机的 ip 地址和主机名的映射记录
开启宿主机之间的端口
TCP 端口 2377 集群管理端口
TCP 与 UDP 端口 7946 节点之间通讯端口
TCP 与 UDP 端口 4789 overlay 网络通讯端口
配置所有节点密钥登录.
配置所下节点密钥互信, 在 node1 可以免密码登录各节点,只在 node1 上执行:
生成 sshkey
发布 sshkey 到各个节点
测试密钥登录
创建 Swarm 集群
在 node1 上初始化 swram 集群:
只需要在一个 node1 上初始化 swarm 集群, 其他 node 加入这个集群就行了, 所以以
下命令只需要在 node1 上运行
查看端口号监听情况
查看 swarm 集群 node 列表
在 node1 通过 ssh, 在 node2-node3 上执行上面的加入集群命令:
node2
node3
node1
再次检查集群节点列表, 我们可以看到所有的服务器都已经加入 swarm 集群了
查看 node2 的 docker info
现在我们可以看到, 已经有3个manager节点了, 一个Leader节点, 一个Reachable节点. 现
在你也可以在 node2 上面管理整个 swarm 集群
总结:
docker swarm:集群管理,子命令主要有下面几个。
docker swarm init 命令用于初始化一个集群
dockerswarm join 命令用于加入一个现有集群
dockerswarm leave 命令由于离开集群
registry 的默认存储路径是/var/lib/registry,只是个临时目录,一段时间之后就会消失
所以使用-v 参数,指定个本地持久的路径
返回{"repositories":[]} 说明 registry 服务工作正常.
镜像信息存放在/var/lib/registry 目录下,因此这里将宿主机目录映射到/var/lib/registry
所有主机都指向 registry 服务器:
停止 docker 服务
#systemctl stop docker
修改/usr/lib/systemd/system/docker.service,修改后保存退出
把/usr/lib/systemd/system/docker.service传给node2 和node3
重载 docker 服务并启动 docker 服务
测试本地镜像仓库
在 node2 主机上推送镜像到 registry
需要先 tag 这个镜像
将 tag 后的镜像上传到 registry.
push 成功后, 可以调用 registry API 查看 registry 中的镜像
在 node3 主机测试从 registry 下载镜像
node2
overlay 网络
解决了镜像构建问题, 为了让应用跑在 swram 集群上,我们还需要解决容器间的网络访问问
题查看 swarm 集群 node 列表
为 docker 应用创建一个名为 dockercoins 的 overlay network
查询 docker network 列表
docker service create 命令创建一个 service.
--name 标签命名 service 为 web1.
--replicas 标签来声明 1 个运行实体(即容器副本数)
注意, 我们启动的镜像名字 192.168.46.100:5000/centos:http 使用我们本地镜像仓库的镜像名
称, 这样当主机上没有这个镜像时, 会自动到本地镜像仓库拉取镜像
使用 docker service ls 查看服务
使用 docker serviceps
用浏览器访问 http://192.168.46.100:8000 就能访问测试页
--replicas 标签来声明 2 个运行实体
查看服务:
从下图可以看到 web1 service 目前只有一个副本.
扩展已有的服务的副本数,这里将 web1 服务扩展到 3 个副本
缩减已有的服务的副本数,这里将 web1 服务缩减到 2 个副本