Ubuntu Docker集群(Swarm模式)搭建步骤
ping命令测试);关闭防火墙或放行2377/tcp(Swarm管理端口)、7946/tcp/udp(节点通信端口)、4789/udp(覆盖网络端口)。/etc/hostname需设置唯一名称(如manager-node、worker-node1),并通过/etc/hosts文件添加集群内主机名解析(如192.168.1.10 manager-node)。在所有节点上执行以下命令安装最新版Docker:
# 更新软件包索引
sudo apt update
# 安装依赖包
sudo apt install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common
# 添加Docker官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 添加Docker软件源(替换为当前Ubuntu版本,如22.04)
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 更新软件包索引并安装Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
# 启动Docker并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker
# 验证安装(输出"Hello from Docker!"则成功)
sudo docker run hello-world
在**管理节点(manager-node)**上执行以下命令初始化Swarm:
# 初始化Swarm,指定管理节点IP(替换为实际静态IP)
sudo docker swarm init --advertise-addr 192.168.1.10
执行后会输出工作节点加入命令(含Token)和管理节点加入命令(用于扩展管理节点):
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 192.168.1.10:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
在**工作节点(worker-node1、worker-node2等)**上,复制管理节点初始化输出的docker swarm join命令并执行:
# 示例(替换为实际Token和管理节点IP)
docker swarm join --token SWMTKN-1-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 192.168.1.10:2377
执行成功后,工作节点会自动连接到管理节点。
回到管理节点,执行以下命令查看集群节点列表:
sudo docker node ls
正常输出应包含1个管理节点(STATUS为Leader)和多个工作节点(STATUS为Ready),例如:
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
xxxxxxxxxxxxxx... * manager-node Ready Active Leader 24.0.5
yyyyyyyyyyyyyy... worker-node1 Ready Active 24.0.5
zzzzzzzzzzzzzz... worker-node2 Ready Active 24.0.5
使用docker service create命令在集群中部署服务(以Nginx为例,创建3个副本):
sudo docker service create --name my-nginx --replicas 3 -p 8080:80 nginx:latest
--name:服务名称(自定义);--replicas:副本数(指定服务运行的容器数量);-p 8080:80:将节点的8080端口映射到容器的80端口(外部访问需通过管理节点IP:8080)。sudo docker service ps my-nginx
sudo docker service logs -f my-nginx
http://<管理节点IP>:8080,若看到Nginx欢迎页面则说明服务部署成功。如需调整服务副本数(如将Nginx副本从3个扩展到5个),执行以下命令:
sudo docker service scale my-nginx=5
执行后,Swarm会自动调度新增的2个副本到集群中的工作节点。可通过docker service ps my-nginx查看副本分布。
如需提升集群高可用性,可添加更多管理节点:
sudo docker swarm join-token manager
docker swarm join命令。安装Portainer可视化工具,方便管理集群:
# 拉取Portainer镜像
sudo docker pull portainer/portainer-ce
# 创建Portainer数据卷(持久化数据)
sudo docker volume create portainer_data
# 启动Portainer容器(管理节点IP替换为实际IP)
sudo docker run -d -p 9000:9000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce
访问http://<管理节点IP>:9000,注册账号后即可通过Web界面管理集群。