#docker swarm#

# 初始化单节点Swarm
docker swarm init

# 部署测试服务
docker service create --name web --publish 8080:80 --replicas 3 nginx:alpine
# Manager节点初始化(指定IP)
docker swarm init --advertise-addr 192.168.1.100

# 获取加入令牌
MANAGER_TOKEN=$(docker swarm join-token -q manager)
WORKER_TOKEN=$(docker swarm join-token -q worker)

# Worker节点加入
docker swarm join --token $WORKER_TOKEN 192.168.1.100:2377
# 查看节点状态
docker node ls

# 提升Worker为Manager
docker node promote worker-node1

# 排空节点(停止新任务分配)
docker node update --availability drain node-2
# 创建服务
docker service create \
  --name redis \
  --replicas 3 \
  --publish published=6379,target=6379 \
  --limit-cpu 1 \
  redis:6-alpine

# 查看服务列表
docker service ls

# 扩缩容服务
docker service scale redis=5

# 删除服务
docker service rm redis
# 服务更新策略
docker service update \
  --image redis:7-alpine \
  --update-parallelism 2 \
  --update-delay 10s \
  --update-failure-action rollback \
  --rollback-parallelism 1 \
  --rollback-delay 5s \
  redis
# 每个节点运行一个监控代理
docker service create \
  --mode global \
  --name node-exporter \
  --mount type=bind,source=/proc,target=/host/proc \
  prom/node-exporter
# 创建自定义Overlay网络
docker network create -d overlay \
  --subnet 10.1.0.0/24 \
  --gateway 10.1.0.1 \
  --opt encrypted \
  my-overlay

# 服务使用自定义网络
docker service create \
  --name api \
  --network my-overlay \
  --network ingress \
  --publish 8080:80 \
  my-api:latest
# 创建命名卷
docker volume create app-data

# 服务使用卷
docker service create \
  --name db \
  --mount source=app-data,target=/var/lib/mysql \
  --replicas 3 \
  mysql:8.0
# 创建密钥
echo "db_password" | docker secret create db_pass -

# 服务使用密钥
docker service create \
  --name db \
  --secret db_pass \
  -e MYSQL_ROOT_PASSWORD_FILE=/run/secrets/db_pass \
  mysql:8.0
# 创建配置
docker config create nginx.conf ./nginx.conf

# 服务使用配置
docker service create \
  --name web \
  --config source=nginx.conf,target=/etc/nginx/nginx.conf \
  nginx:alpine
# 部署全局监控
docker service create --mode global \
  --name cadvisor \
  --mount type=bind,source=/,target=/rootfs,readonly=true \
  --mount type=bind,source=/var/run,target=/var/run \
  google/cadvisor:latest
# 资源限制策略
docker service create \
  --name api \
  --reserve-cpu 0.5 \
  --reserve-memory 256M \
  --limit-cpu 2 \
  --limit-memory 1G \
  my-api:v1
# 备份Swarm状态
docker swarm init --force-new-cluster --advertise-addr 192.168.1.100

# 恢复节点
docker node update --availability active node-2
# 查看服务详情
docker service inspect --pretty web

# 查看服务日志
docker service logs -f web

# 查看容器状态
docker service ps web
# 检查网络连通性
docker exec -it <container> ping <target>

# 检查DNS解析
docker exec -it <container> nslookup service_name
# 查看节点详情
docker node inspect <node_id> --pretty

# 检查节点资源
docker node ps <node_id>
# 创建v1版本
docker service create --name app --replicas 5 my-app:v1

# 逐步替换为v2
docker service update \
  --image my-app:v2 \
  --update-parallelism 1 \
  --update-delay 30s \
  app
# 安装自动扩缩组件
docker plugin install --alias scaler docker/scale

# 设置扩缩规则
docker service scale \
  --min 2 \
  --max 10 \
  --step 1 \
  --scale-on-cpu 80 \
  web
# .gitlab-ci.yml 示例
deploy:
  stage: deploy
  script:
    - docker stack deploy -c docker-compose.prod.yml myapp
  only:
    - master
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐