在 Debian 上使用 Docker 进行容器编排的实用指南
一 环境准备
- 安装 Docker Engine(Debian 稳定仓库或官方仓库均可):
- 更新索引并安装依赖:sudo apt update && sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release
- 添加 Docker 官方 GPG 密钥与 APT 源(使用 keyring 更安全):
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo “deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable” | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
- 安装并启动:sudo apt update && sudo apt install -y docker-ce docker-ce-cli containerd.io && sudo systemctl start docker && sudo systemctl enable docker
- 验证:sudo docker run --rm hello-world
- 安装 Docker Compose(推荐插件方式,便于与 Docker CLI 集成):sudo apt-get install -y docker-compose-plugin
- 非 root 使用与开机自启:sudo usermod -aG docker $USER && newgrp docker(或重新登录),确保 systemd 已启用 Docker 服务。
二 单机多容器编排 Docker Compose
- 基本流程与常用命令:
- 在项目根目录创建 docker-compose.yml(示例见下节),执行:docker compose up -d(后台启动)、docker compose ps(查看状态)、docker compose logs -f(实时日志)、docker compose exec web bash(进入容器)、docker compose down(停止并清理容器与网络,加 -v 同时清理卷)。
- 示例 docker-compose.yml(Nginx + PostgreSQL,数据持久化与重启策略):
version: ‘3.8’
services:
web:
image: nginx:latest
ports:
- “80:80”
volumes:
- ./html:/usr/share/nginx/html
depends_on:
- db
restart: always
db:
image: postgres:13
environment:
POSTGRES_USER: admin
POSTGRES_PASSWORD: secret
POSTGRES_DB: mydb
volumes:
- pg_data:/var/lib/postgresql/data
restart: always
volumes:
pg_data:
- 要点:使用命名卷(如 pg_data)持久化数据库;设置 restart: always 提升可用性;depends_on 仅保证启动顺序,不等待就绪,生产可用健康检查或应用内重试逻辑增强稳健性。
三 多机集群编排 Docker Swarm
- 适用场景:轻量级集群、快速搭建、与 Docker Engine 深度集成。
- 初始化与管理:
- 在管理节点初始化:docker swarm init --advertise-addr <管理节点IP>
- 工作节点加入:docker swarm join --token <令牌> <管理节点IP>:2377
- 部署服务与扩缩容:
- docker service create --name nginx --replicas 3 -p 80:80 nginx:latest
- docker service scale nginx=5
- docker service ls、docker service rm nginx
- 说明:Swarm 提供内置的负载均衡与服务发现,适合 3–5 节点的小团队或过渡方案。
四 大规模编排 Kubernetes 本地开发 Minikube
- 适用场景:企业级、复杂微服务、自动扩缩容与滚动升级。
- 快速起步(Debian 主机):
- 安装 Minikube:curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && sudo install minikube-linux-amd64 /usr/local/bin/minikube
- 启动集群:minikube start --driver=docker
- 安装 kubectl:sudo apt update && sudo apt install -y kubectl
- 部署示例应用:
- kubectl create deployment node-app --image=my-node-app:latest
- kubectl expose deployment node-app --type=NodePort --port=3000
- kubectl get pods、minikube service node-app(自动打开浏览器访问)
- 说明:Kubernetes 提供自我修复、自动扩缩容、服务发现与滚动升级等高级能力,适合高可用与弹性伸缩场景。
五 工具选择与自动化建议
- 工具选择建议:
- 快速搭建单主机多容器(开发/测试/小型服务):优先 Docker Compose。
- 管理小型 Docker 集群(约 3–5 节点):选择 Docker Swarm。
- 大规模、复杂微服务与高可用需求:采用 Kubernetes。
- 自动化与运维要点:
- CI/CD:在 GitHub Actions/GitLab CI 中构建镜像并推送到仓库,目标机通过 SSH 执行 docker compose pull && docker compose up -d --force-recreate 完成零停机或快速回滚。
- 镜像自动更新:使用 Watchtower 自动拉取新镜像并重启容器(例如每 30 分钟检查一次):
docker run -d --name watchtower -e WATCHTOWER_POLL_INTERVAL=1800 -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower
- 监控与日志:采用 Prometheus + Grafana 监控容器指标,使用 Fluentd/Elasticsearch 集中收集与分析日志,便于故障定位与容量规划。