# 怎么設置Docker Swarm
## 目錄
1. [Docker Swarm簡介](#docker-swarm簡介)
2. [環境準備](#環境準備)
3. [初始化Swarm集群](#初始化swarm集群)
4. [節點管理](#節點管理)
5. [服務部署與管理](#服務部署與管理)
6. [網絡配置](#網絡配置)
7. [存儲卷管理](#存儲卷管理)
8. [安全配置](#安全配置)
9. [監控與日志](#監控與日志)
10. [常見問題排查](#常見問題排查)
11. [最佳實踐](#最佳實踐)
---
## Docker Swarm簡介
Docker Swarm是Docker官方提供的容器編排工具,允許用戶將多個Docker主機組成一個虛擬集群,通過簡單的命令實現容器的分布式部署和管理。與Kubernetes相比,Swarm更輕量、易上手,適合中小規模的應用場景。
**核心概念**:
- **Manager節點**:負責集群狀態維護、任務調度
- **Worker節點**:執行容器任務
- **服務(Service)**:定義容器部署模板
- **任務(Task)**:服務的最小調度單元
---
## 環境準備
### 硬件要求
- 至少2臺Linux主機(物理機或虛擬機)
- 每臺機器1GB+ RAM(生產環境建議4GB+)
- 10GB+ 磁盤空間
### 軟件要求
1. 在所有節點安裝Docker Engine(版本20.10+)
```bash
# Ubuntu安裝示例
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
確保節點間網絡互通
配置主機名解析(可選)
# 在/etc/hosts中添加節點IP和主機名映射
192.168.1.10 manager01
192.168.1.11 worker01
# 在主管理節點執行
docker swarm init --advertise-addr <MANAGER_IP>
# 輸出示例:
Swarm initialized: current node (xyz) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-xxx 192.168.1.10:2377
在其他節點上運行join命令:
docker swarm join --token <WORKER_TOKEN> <MANAGER_IP>:2377
# 在管理節點執行
docker node ls
# 輸出示例:
ID HOSTNAME STATUS AVLABILITY MANAGER STATUS
abc123 manager01 Ready Active Leader
def456 worker01 Ready Active
# 提升Worker為Manager
docker node promote worker01
# 降級Manager為Worker
docker node demote manager02
# 停止接受新任務并遷移現有容器
docker node update --availability drain worker01
# 在要移除的節點上執行
docker swarm leave
# 在Manager上強制刪除
docker node rm worker02
docker service create \
--name web_server \
--replicas 3 \
-p 80:80 \
nginx:latest
| 參數 | 說明 |
|---|---|
--replicas |
設置副本數量 |
--publish |
端口映射 |
--mount |
掛載存儲卷 |
--env |
環境變量 |
--constraint |
部署約束 |
# 擴縮容
docker service scale web_server=5
# 滾動更新
docker service update --image nginx:1.21 web_server
# 查看服務詳情
docker service ps web_server
docker network create -d overlay my_network
| 類型 | 說明 |
|---|---|
overlay |
跨節點通信 |
bridge |
單機橋接網絡 |
host |
使用主機網絡 |
docker service create \
--network my_network \
--name service1 \
my_image
docker volume create db_data
docker service create \
--mount type=volume,source=db_data,target=/var/lib/mysql \
--name mysql \
mysql:5.7
volume:Docker管理的數據卷bind:綁定主機目錄tmpfs:內存文件系統# 初始化集群時啟用自動TLS
docker swarm init --advertise-addr <IP> --autolock
# 創建密鑰
echo "secret_pass" | docker secret create db_password -
# 使用密鑰
docker service create \
--secret db_password \
--name secure_service \
alpine:latest
docker service logs -f web_server
cAdvisor:容器資源監控
docker service create \
--mode global \
--name cadvisor \
--mount type=bind,source=/,target=/rootfs \
google/cadvisor
Prometheus+Grafana:集群級監控
# 查看失敗原因
docker service ps --no-trunc <SERVICE_NAME>
# 測試覆蓋網絡
docker exec -it <CONTNER> ping <OTHER_CONTNER_IP>
生產環境建議:
--autolock保護加密密鑰性能優化:
docker service create \
--limit-cpu 2 \
--limit-memory 1GB \
--reserve-cpu 0.5 \
--reserve-memory 500MB \
my_service
備份恢復:
/var/lib/docker/swarm目錄docker swarm ca --rotate更新CA證書本文總計約3600字,涵蓋了Docker Swarm從入門到生產部署的核心知識點。如需更深入的學習,建議參考官方文檔和實際動手實驗。 “`
該Markdown文檔包含: 1. 結構化標題和目錄 2. 代碼塊和表格等格式元素 3. 實操命令和配置示例 4. 關鍵概念說明 5. 故障排查指南 6. 生產環境建議
可通過Markdown閱讀器或轉換為PDF/HTML獲得更好閱讀體驗。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。