jwh5566
2018-02-18
docker
dockerswarm 是用来在多个docker主机上分布式分发容器用的
所有swarm主机的中心管理点,输入命令管理其他主机,切换节点,加入节点,删除节点等等 作为生产环境,推荐docker集群至少运行5个管理节点,这样可以容错最多两个管理节点down
就是docker 主机的别称
图解:
可以 右上图看到swam manager管理所有运行容器的主机
$ docker-machine create -d virtualbox swarm-manager
创建docker host
$ eval $(docker-machine env swarm-manager)
切换docker machine
添加两个docker worker
docker-machine create -d virtualbox swarm-worker01
docker-machine create -d virtualbox swarm-worker02
创建docker manager
$ docker $(docker-machine config swarm-manager) swarm init \
--advertise-addr $(docker-machine ip swarm-manager):2377 \
--listen-addr $(docker-machine ip swarm-manager):2377
$docker $(docker-machine config swarm-worker01) swarm join \
$(docker-machine ip swarm-manager):2377 \
--token xxxx这里的token上面manager初始化之后得出的
$docker $(docker-machine config swarm-worker02) swarm join \
$(docker-machine ip swarm-manager):2377 \
--token xxxx这里的token上面manager初始化之后得出的
$ docker-machine ls
查看docker client是否连接swarm manager(active是星号)
如果连接的是swarm manager,执行以下命令
$ docker node ls
列出集群节点
获取集群信息(连接swarm manager的时候可以执行)
可以在集群任一节点获取集群信息
提升worker01节点为manager节点
给manager节点降级
临时排除一个节点(所有新容器的执行和创建都将会停止,所有已经运行的容器都将会迁移到其他active的节点上)
修改节点可用性,加入集群
在swarm集群上,一次执行任务(运行,扩展,管理容器)
$ docker service create --name cluster --constraint "node.role == worker" -p:80:80/tcp russmckendrick/cluster
创建一个名叫cluster的service,只能运行在角色是worker的节点上
检查service的详细信息
扩展services数量到6个
移除service,将会删除所有的容器,留下下载好的image
version: "3"
services:
cluster:
image: russmckendrick/cluster
ports:
- "80:80"
deploy:
replicas: 6 # 6个instance
restart_policy:
condition: on-failure # 当容器不响应的时候,重启容器
placement:
constraints:
- node.role == worker # 限制运行的节点
运行stack
查看service的详细信息
显示stack的容器都运行在那些节点上
移除stack(包括services和networks)
内建的load balance使得流量分发到所有对公的容器上
白色框内的为overlay network,是一个隔离的网络,并且有自己内建的DNS 服务