Docker使用Swarm组建集群的方法

发布时间:2025-03-27 点击:32
服务器
swarm 在 docker 1.12 版本之前属于一个独立的项目,在 docker 1.12 版本发布之后,该项目合并到了 docker 中,成为 docker 的一个子命令。目前,swarm 是 docker 社区提供的唯一一个原生支持 docker 集群管理的工具。它可以把多个 docker 主机组成的系统转换为单一的虚拟 docker 主机,使得容器可以组成跨主机的子网网络。
docker 使用 swarm 可以很方便的在多个主机上创建容器集群,并且容器之间可以跨主机网络通信。
swarm 的集群分为 manager 节点和 worker 节点。
swarm 中使用 service 来创建/管理使用相同镜像的多个容器,多个容器同时对外提供服务,多个容器之间负载均衡。每个 service 有一个浮动ip(vip),各个容器还有自己的物理ip。创建基于 swarm 的 overlay 网络,将 service 挂载到此网络上。然后 service 中的各个容器便可以通过 service 名称和 ip 地址实现网络互通。
下面使用了三个机器来组建一个swarm集群
bd0 192.168.0.109
bd1 192.168.0.192
bd2 192.168.0.193
docker 开启远程管理
默认情况下,docker守护进程会生成一个 /var/run/docker.sock 文件来进行本地进程通信,而不会监听任何端口,所以默认情况下 docker 只能在本地使用命令行操作。 如果要在其它机器上远程操作 docker 主机,就需要让 docker 监听一个端口,这样才能实现远程通信。
在我的 centos 7x 上,首先修改 docker 配置文件 /etc/sysconfig/docker 中的 options 参数,添加
-h unix:///var/run/docker.sock -h 0.0.0.0:5555
修改后参数类似
options=\\\’–selinux-enabled –log-driver=journald –signature-verification=false -h unix:///var/run/docker.sock -h 0.0.0.0:5555\\\’
然后重新启动 docker 服务
$ sudo systemctl restart docker.service
测试一下
sudo docker -h <host>:5555 images
创建 swarm 集群
获取 swarm 镜像
分别在三个节点上下载swarm镜像
$ sudo docker pull swarm
初始化swarm集群
首先在 bd0 节点上初始化 swarm 集群
$ sudo docker swarm initerror response from daemon: could not choose an ip address to advertise since this system has multiple addresses on different interfaces (192.168.0.109 on eth0 and 192.168.122.1 on virbr0) - specify one with --advertise-addr第一次创建失败了,原因是我的机器有两块网卡,swarm不知道要用那块网卡组建集群,所以需要使用 –advertise-addr 来指定使用那块网卡。
$ sudo docker swarm init --advertise-addr 192.168.0.109swarm initialized: current node (1egy2ark49q6xokudps5wykhn) is now a manager.to add a worker to this swarm, run the following command: docker swarm join \\\\ --token swmtkn-1-0x11m2uk7ps9bh7nflkxwirgv0syvacl18rut3hilz4i9lgis3-d9m22hixt0b57hjj81im8bqdl \\\\ 192.168.0.109:2377to add a manager to this swarm, run \\\’docker swarm join-token manager\\\’ and follow the instructions.
然后分别在 bd1 和 bd2 节点上运行下面命令将机器加入集群
$ sudo docker swarm join \\\\ --token swmtkn-1-0x11m2uk7ps9bh7nflkxwirgv0syvacl18rut3hilz4i9lgis3-d9m22hixt0b57hjj81im8bqdl \\\\ 192.168.0.109:2377
this node joined a swarm as a worker.
下面查看一下集群节点信息
$ sudo docker node lsid hostname status availability manager status11ochjq4o1s2m6w4u8jxb37w6 bd1 ready active1egy2ark49q6xokudps5wykhn * bd0 ready active leaderb4e2ywnhhd6fhgfxtr1qh5gew bd2 ready active创建集群跨主机网络
首先查看一下集群网络
$ sudo docker network lsnetwork id name driver scope36679de6466b bridge bridge local72e853673d8b docker_gwbridge bridge localb45cef05e017 host host local1zzlk9hpwyqy ingress overlay swarm添加一个swarm网络
$ sudo docker network create --driver overlay myswarma04evrfrr4cvnbvrummzvg0mn创建后,查看一下集群网络
$ sudo docker network lsnetwork id name driver scope36679de6466b bridge bridge local72e853673d8b docker_gwbridge bridge localb45cef05e017 host host local1zzlk9hpwyqy ingress overlay swarma04evrfrr4cv myswarm overlay swarm部署服务
这里使用 nginx 服务来演示一下怎样创建一个服务集群。
下载nginx镜像
$ sudo docker pull nginx创建服务
$ sudo docker service create --replicas 2 --name mynginx -p 8000:80 --network=myswarm nginx5xrm96xveqw5gq63srts1rbhw这里创建了需要两个 nginx 实例的 nginx 服务。同时,为了能被外网地址访问,我们做了一下端口映射,映射到物理主机的8000端口。
查看服务
$ sudo docker service lsid name replicas image command5xrm96xveqw5 mynginx 2/2 nginx$ sudo docker service ps mynginxid name image node desired state current state error1crmc5ecsjoci8xavxzbnbks3 mynginx.1 nginx bd0 running running 23 seconds agodivhrq89xhxka8bvb8r9zqqhz mynginx.2 nginx bd2 running running 20 seconds ago$ sudo docker service inspect mynginx...virtualips: [ { networkid: 1zzlk9hpwyqyocloxy9j9vct7, addr:

买了腾讯云后怎样进入服务器呢
如何从0到1设计sem账户结构?
韩国ecs云服务器查询到期时间
ipv6中的ip地址为多少位
百度云提示服务器正忙
国内稳定云服务器价格
要办理互联网药品服务资格证
linux云计算要学些什么