如果有多台电脑都需要部署 Docker 容器,最直接的方法就是使用容器编排工具将多台机器组成一个集群来统一管理。主要有三个主流方案,你可以根据实际情况选择:
🎯 方案对比与选择
| 方案 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| Docker Swarm | 中小规模集群、刚接触编排 | Docker原生集成,简单易学,命令与Docker一致 | 功能相对简单,生态不如Kubernetes丰富 |
| Kubernetes (K8s) | 大规模复杂应用、企业级生产 | 功能强大,自动扩缩容,自我修复,生态丰富 | 学习曲线陡峭,部署和维护复杂 |
| 第三方工具/自研脚本 | 特殊需求、小规模固定环境 | 灵活定制,轻量级 | 需要自己维护,缺乏集群功能 |
🐳 方案一:Docker Swarm(最快速上手)
如果你的需求是将几台电脑组成一个集群,且不想引入复杂的新工具,Docker Swarm是最直接的选择。
1. 搭建集群
在主节点初始化 Swarm 集群:
# 在主节点执行,--advertise-addr 指定主节点IPdockerswarm init --advertise-addr<主节点IP>执行后会输出一个docker swarm join命令,包含 token。
在其他节点执行输出的命令,加入集群:
dockerswarmjoin--token<TOKEN><主节点IP>:23772. 部署服务到集群
在 Swarm 模式下,你不再用docker run,而是用docker service部署服务,它会自动将容器分配到集群中的节点:
# 部署 3 个 nginx 副本,自动分布到集群节点dockerservicecreate--nameweb--replicas3-p80:80 nginx3. 跨节点网络
Swarm 自动创建了 overlay 网络,可以让不同节点上的容器直接通信:
# 创建跨主机网络dockernetwork create--driveroverlay my-overlay# 部署服务时指定网络dockerservicecreate--nameapi--networkmy-overlay your-image4. 管理集群
# 查看集群节点dockernodels# 查看运行的服务dockerservicels# 查看服务分布在哪些节点dockerservicepsweb# 扩容服务dockerservicescaleweb=5☸️ 方案二:Kubernetes(生产级标准)
如果这是长期项目,或者未来会扩展到更大规模,直接上 Kubernetes 是更稳妥的选择。
快速搭建测试集群(Minikube/Kind)
对于学习和测试,可以用 Minikube 或 Kind 在本地快速搭建多节点集群。
生产级部署(kubeadm)
官方工具,可以在多台机器上手动搭建符合最佳实践的集群。
部署应用
# deployment.yamlapiVersion:apps/v1kind:Deploymentmetadata:name:nginx-deploymentspec:replicas:3# 在多个节点运行3个副本selector:matchLabels:app:nginx template:metadata:labels:app:nginx spec:containers:-name:nginx image:nginx:latest ports:-containerPort:80# 应用配置kubectl apply-fdeployment.yaml# 查看pod分布kubectl get pods-owide🔧 方案三:自研脚本 + Docker Compose
如果你只是想将同一套配置部署到多台电脑,不需要集群管理和服务发现,可以写个简单的脚本循环执行:
#!/bin/bash# deploy.shservers=("192.168.1.10""192.168.1.11""192.168.1.12")forserverin"${servers[@]}";dosshuser@$server"mkdir -p /app && cd /app && \ docker-compose pull && docker-compose up -d"done