在 Ubuntu 上,容器编排通常有三种落地方式:Docker Compose(单机/轻量多容器)、Docker Swarm(Docker 原生集群)、Kubernetes(企业级生产编排)。下面给出各自的适用场景、快速上手与常用命令,便于你按规模与复杂度选型与实施。
一、方案速览与选型建议
| 工具 |
适用场景 |
核心特点 |
学习难度 |
| Docker Compose |
开发、测试、单机或少量主机部署 |
一份 YAML 定义多服务;命令简单;快速起停与调试 |
低 |
| Docker Swarm |
中小规模集群、需要快速高可用 |
原生集成 Docker CLI;几分钟即可成集群;内置负载均衡 |
低-中 |
| Kubernetes |
大规模、复杂微服务、强可观测与自动化 |
声明式 API、自动修复与滚动升级、生态完善 |
中-高 |
- 选型建议:
- 个人项目/小型服务优先用 Compose;
- 多节点且追求“开箱即用”的集群可用 Swarm;
- 需要弹性伸缩、精细调度与丰富生态的生产环境选择 Kubernetes。
二、Docker Compose 快速上手(单机多容器)
三、Docker Swarm 快速上手(多节点集群)
-
前提与网络
- 至少 2 台 Ubuntu 主机(1 管理节点 + 1+ 工作节点),安装 Docker Engine
- 开放端口:2377/tcp(集群管理)、7946/tcp/udp(节点发现)、4789/udp(覆盖网络 VXLAN)
-
初始化与加入集群
- 管理节点:docker swarm init --advertise-addr <管理节点IP>
- 工作节点:执行上条命令输出的 docker swarm join … 令牌命令
- 查看节点:docker node ls
-
部署与运维
- 部署服务:docker service create --name nginx --replicas 3 -p 8080:80 nginx:latest
- 查看服务:docker service ls
- 滚动更新:docker service update --image nginx:1.25 nginx
- 扩缩容:docker service scale nginx=5
四、Kubernetes 快速上手(生产级编排)
-
安装与初始化(单主示例)
- 安装组件:sudo apt-get update && sudo apt-get install -y kubelet kubeadm kubectl
- 初始化:sudo kubeadm init --pod-network-cidr=10.244.0.0/16
- 配置 kubectl:
- mkdir -p $HOME/.kube
- sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
- sudo chown $(id -u):$(id -g) $HOME/.kube/config
- 部署网络插件(如 Calico):kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
- 加入工作节点:kubeadm join : --token --discovery-token-ca-cert-hash sha256:
-
部署示例应用
- 使用 Deployment 与 Service 的 YAML(如 nginx-deployment.yaml)进行声明式部署:kubectl apply -f nginx-deployment.yaml
- 常用:kubectl get pods,svc,deploy 等
五、实践要点与常见问题
-
持久化与配置
- 数据库等状态服务务必使用 Volumes/Bind Mounts 持久化数据;敏感信息用 Secrets 或环境文件管理。
-
网络与端口
- Swarm 使用 覆盖网络 实现跨主机服务通信;Kubernetes 使用 Pod 网络 与 Service 抽象。
-
安全与防火墙
- Docker 暴露端口可能绕过 UFW 默认策略,可在 iptables 的 DOCKER-USER 链中添加精细化规则以限制来源网段访问。
-
扩展与升级
- Compose 扩缩容便捷;Swarm/Kubernetes 支持滚动升级与副本扩缩,建议配合健康检查与就绪探针。
-
选型落地
- 个人/小团队优先 Compose;需要多节点且快速交付选 Swarm;追求弹性、可观测与生态选 Kubernetes。