Technical note
DockerSwarm运维
参考文档
- https://docs.docker.com/engine/install/centos/
- https://www.cnblogs.com/qingbaizhinian/p/14180465.html
- https://yeasy.gitbook.io/docker_practice/swarm_mode/stack
- https://holynull.gitbooks.io/docker-swarm/content/kai-shi-shi-yong-swarm/shan-chu-fu-wu.html
- https://www.jianshu.com/p/25c529e3a3e6
测试机
10.193.10.201 10.193.10.202 10.193.10.203
安装Docker
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce-19.03.13 docker-ce-cli-19.03.13 containerd.io
docker --version
systemctl enable docker
systemctl start docker
systemctl daemon-reload
systemctl status docker
部署Swarm
# 初始化主节点
docker swarm init --advertise-addr 10.193.10.201
# 再次查看token
docker swarm join-token worker
# 加入主节点
docker swarm join --token SWMTKN-1-5ijp838v2gjyq0v85bl2reiptw7qk8cj7verfgjrfb97nun8yd-1215mjt92g7ahl7jnuyoxmpq1 10.193.10.201:2377
# 查看节点
docker node ls
部署应用
# 部署应用
docker service create --replicas 1 --name helloworld alpine ping baidu.com
# 查看服务
docker service ls
# 查看服务的详细信息
docker service inspect --pretty helloworld
# 查看服务在哪些节点运行
docker service ps helloworld
# 删除服务
docker service rm helloworld
更新服务
# 部署一个redis服务
docker service create \
--replicas 3 \
--name redis \
--update-delay 10s \
redis:3.0.6
# 更新服务
docker service update --image redis:3.0.7 redis
docker service update redis
排除节点
# 排除节点
docker node update --availability drain playground03
# 重新激活节点
docker node update --availability active playground03
# 删除节点(慎用)
docker node rm --force playground03
# 强制平衡节点
docker service update helloworld --force
端口映射
docker service create \
--name my-web \
--publish published=8080,target=80 \
--replicas 2 \
nginx
docker service inspect --format="{{json .Endpoint.Spec.Ports}}" my-web
测试:
http://10.193.10.201:8080
http://10.193.10.202:8080
http://10.193.10.203:8080
Stack
https://docs.docker.com/engine/reference/commandline/stack_deploy/ https://www.jianshu.com/p/25c529e3a3e6
# 部署服务
docker stack deploy -c docker-compose.yml wordpress
# 查看服务
docker stack ls
docker stack ps swarmpit
docker stack services swarmpit
# 移除
docker stack rm xxx
网络
https://zhuanlan.zhihu.com/p/129258067
# 查询网络
docker network ls
# 创建网络
docker network create --driver overlay swarmnetwork
绑定多个节点
# 为多个节点添加标签
docker node update --label-add h5=true playground01
docker node update --label-add h5=true playground02
# 绑定标签
vi compose.yml
deploy:
placement:
constraints: [node.labels.h5 == true]
CPU/MEM限制
# 查看本节点统计信息
docker stats
# 查看service状态
docker service inspect --pretty admin_admin-service
# 查看所有节点service状态(先配置互信)
docker node ls | cut -c 31-49 | grep -v HOSTNAME | xargs -I"SERVER" sh -c "echo SERVER; ssh SERVER docker stats --no-stream"
# CPU/MEM保留
docker service update --reserve-cpu 2 --reserve-memory 512m h5-test_web-service
# CPU/MEM限制
docker service update --limit-cpu 2 --limit-memory 512m h5-test_web-service
# 去除保留与限制
docker service update --limit-cpu 0 --limit-memory 0 --reserve-cpu 0 --reserve-memory 0 h5-test_web-service
服务伸缩
# 服务伸缩
docker service scale admin_admin-service=5
# 查看服务状态
docker service ps admin_admin-service
查看service日志
docker service logs -f --tail 0 hphz-es-service_bridge-service
常用操作
docker node ls
docker node inspect host101 --format '{{ .Status.Addr }}'
docker service inspect --format="{{json .Endpoint.Spec.Ports}}" my-web
docker node inspect --pretty artiServer
docker service ls
docker service inspect --pretty bridge-service_bridge-service
docker service ps bridge-service_bridge-service
docker service scale helloworld=5
docker service update bridge-service_bridge-service --force
docker service scale hphz-es-service_bridge-service=1
docker stack rm h5-test-mazq
docker service logs -f --tail 10 hphz-es-service-temp_bridge-service-temp
docker stack rm hphz-es-service-temp
export SERVICES_hphz_es_SERVICE_IMAGE=artifactory.sdecloud.com:8443/docker-local/hphz-es:RELEASE-1.197
docker stack deploy -c hphz-es-service-temp.yml hphz-es-service-temp --with-registry-auth