Docker Swarm是Docker原生的容器编排工具,允许您将多个Docker主机集群化为一个虚拟Docker引擎。以下是配置Docker Swarm的完整步骤:
确保所有节点满足以下条件: - 运行Linux操作系统(推荐Ubuntu 20.04/22.04或CentOS 7/8) - 网络互通(建议关闭防火墙或配置适当规则) - 所有节点时间同步(使用NTP服务)
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
# CentOS/RHEL
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo systemctl start docker && sudo systemctl enable docker
选择一个节点作为管理节点(manager),执行:
sudo docker swarm init --advertise-addr <MANAGER-IP>
例如:
sudo docker swarm init --advertise-addr 192.168.1.100
命令执行后会输出加入集群的命令,类似:
docker swarm join --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c 192.168.1.100:2377
在其他节点上运行上一步得到的docker swarm join
命令来加入集群:
sudo docker swarm join --token <TOKEN> <MANAGER-IP>:2377
在管理节点上运行:
sudo docker node ls
输出应显示所有节点及其状态(包括管理节点和工作节点)。
常用管理命令:
# 查看集群节点
docker node ls
# 查看服务
docker service ls
# 创建服务
docker service create --name my-web --replicas 3 -p 8080:80 nginx
# 扩展服务
docker service scale my-web=5
# 更新服务
docker service update --image nginx:latest my-web
# 删除服务
docker service rm my-web
添加更多管理节点以提高可用性:
# 在第一个管理节点上获取加入令牌
docker swarm join-token manager
# 在其他节点上运行输出的命令加入为管理节点
# 创建overlay网络
docker network create --driver overlay my-overlay-net
# 在指定网络上创建服务
docker service create --name my-service --network my-overlay-net my-image
# 创建volume
docker volume create my-volume
# 使用volume创建服务
docker service create --name my-db --mount type=volume,source=my-volume,destination=/var/lib/mysql mysql
定期轮换Swarm join tokens:
docker swarm join-token --rotate
限制管理节点访问:
docker node update --availability drain <NODE-ID>
使用TLS加密通信(在初始化时添加--tlsverify
参数)
节点无法加入集群:
服务无法启动:
docker service logs <SERVICE-ID>
节点状态异常:
通过以上步骤,您已成功配置了一个Docker Swarm集群,可以开始部署和管理容器化应用了。