在 Debian 上实现 Docker 容器编排的可选路径
- Docker Compose:基于 YAML 的单机多容器编排,适合开发、测试、单机部署,一条命令即可拉起整套应用栈。优势是简单、一致、可版本化;局限是不覆盖多机集群与自动扩缩容。
- Docker Swarm:Docker 内置的集群编排,使用Manager/Worker节点,提供服务发现、负载均衡、滚动更新等能力。优势是与 Docker 集成度高、上手快;局限是生态与功能深度不及 Kubernetes,且自 2019 年起由 Mirantis 接手,社区活跃度趋稳。
- Kubernetes:业界事实标准的容器编排平台,提供自动部署、弹性伸缩、自愈、调度、RBAC、网络与存储等完整能力。优势是功能全面、可扩展性强;局限是复杂度与运维门槛较高。
方案一 Docker Compose 快速上手
- 安装与验证(Debian 推荐插件方式)
- 安装 Docker 与 Compose 插件:
sudo apt update && sudo apt install -y docker.io docker-compose-plugin
- 验证:
docker --version && docker compose version
- 基本流程
- 在项目目录创建 docker-compose.yml(示例):
version: “3.8”
services:
web:
image: nginx:latest
ports: [“8080:80”]
volumes: [“./html:/usr/share/nginx/html”]
depends_on: [db]
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: myapp
volumes: [“db_data:/var/lib/mysql”]
volumes:
db_data:
- 常用命令:
docker compose up -d
docker compose ps
docker compose logs -f
docker compose down
- 适用场景与要点
- 适合单机多容器应用;通过depends_on管理启动顺序(不替代健康检查);使用命名卷或绑定挂载做数据持久化。
方案二 Docker Swarm 集群编排
- 初始化与加入
- 在管理节点初始化:
docker swarm init --advertise-addr <管理节点IP>
- 其他节点加入(使用上条命令输出的 token):
docker swarm join --token <管理节点IP>:<端口>
- 部署与运维
- 部署服务(示例):
docker service create --name web --replicas 3 -p 8080:80 nginx:latest
- 查看与管理:
docker service ls
docker service scale web=5
docker service update --image nginx:1.25 web
- 适用场景与要点
- 适合中小规模集群与需要快速多机编排的团队;提供内置负载均衡与服务发现;如需自动扩缩容与高级调度,建议转向 Kubernetes。
方案三 Kubernetes 生产级编排
- 在 Debian 节点上部署的常见路径
- 准备环境(以 kubeadm 为例):
sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release
curl -fsSL https://pkgs.k8s.io/core/stable/v1.31/deb/Release.key | sudo gpg --dearmor -o /usr/share/keyrings/kubernetes-apt-keyring.gpg
echo “deb [signed-by=/usr/share/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core/stable/v1.31/deb/ /” | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update && sudo apt-get install -y kubelet kubeadm kubectl containerd
sudo systemctl enable --now containerd && sudo systemctl enable --now kubelet
- 初始化控制平面(单节点演示):
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
- 安装网络插件(示例 Flannel):
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
- 加入工作节点(使用 kubeadm init 输出的 join 命令)
- 适用场景与要点
- 适合生产级、大规模、弹性伸缩与多云/混合云场景;生态完善但部署与运维复杂度较高;也可直接使用云厂商的托管 Kubernetes(如 EKS/GKE/AKS)降低运维成本。
选型与实施建议
- 仅单机开发/测试:优先用 Docker Compose,配置简单、学习成本低、可快速复用。
- 多机但规模中小、希望轻量上手:可选 Docker Swarm,与 Docker 生态无缝,满足常见服务编排需求。
- 生产级、弹性与可观测要求高:选择 Kubernetes,功能最全、社区与生态成熟;若不想自管控制面,优先托管 K8s。
- 无论采用哪种方案,务必落实:镜像与代码版本化、声明式配置管理、持久化与备份、健康检查与就绪探针、最小权限与网络策略、日志与监控。