#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: deployscript:- docker stack deploy -c docker-compose.prod.yml myapponly:- master