温馨提示×

如何在Ubuntu上实现Docker的多容器编排

小樊
34
2025-12-20 10:39:25
栏目: 智能运维

在 Ubuntu 上实现 Docker 多容器编排

一、方案选型与适用场景

  • Docker Compose:单机开发、测试、预发布或小型生产环境;通过一份 YAML 定义多个服务、网络与数据卷,一条命令即可拉起整套应用,运维成本低、学习曲线平缓。适合快速交付与本地一致性环境搭建。
  • Kubernetes:多节点集群、弹性伸缩、自动恢复、灰度发布与滚动升级、跨云与混合云场景;具备更完善的调度、网络与存储生态,但部署与运维复杂度更高。适合中大型与高可用生产环境。

二、使用 Docker Compose 编排多容器

  • 安装 Docker 与 Docker Compose

    • 安装 Docker(若尚未安装):
      • sudo apt-get update
      • sudo apt-get install -y docker-ce docker-ce-cli containerd.io
    • 安装 Docker Compose(Linux 二进制方式,示例版本为 1.29.2,可按需替换为最新稳定版):
      • sudo curl -L “https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)” -o /usr/local/bin/docker-compose
      • sudo chmod +x /usr/local/bin/docker-compose
      • docker-compose --version
    • 可选:将当前用户加入 docker 组以避免每次使用 sudo(需重新登录生效):sudo usermod -aG docker $USER。
  • 定义服务与网络(示例:Nginx + Redis)

    • 在项目目录创建 docker-compose.yml:
      • version: “3.8” services: web: image: nginx:alpine ports: - “8000:80” volumes: - ./app:/usr/share/nginx/html networks: - app redis: image: redis:alpine networks: - app networks: app: driver: bridge
    • 启动与验证
      • 启动:docker-compose up -d
      • 查看状态:docker-compose ps
      • 查看日志:docker-compose logs -f
      • 进入容器:docker-compose exec web sh
      • 停止与清理:docker-compose down(加 --volumes 一并清理卷)
  • 实战扩展(示例:Nginx + PHP-FPM + MySQL + Redis 开发环境)

    • 目录结构建议:
      • ├── docker-compose.yml
      • ├── nginx/conf.d/default.conf
      • ├── www/index.php
      • └── mysql/data(自动持久化)
    • 关键配置要点:
      • Nginx 通过 fastcgi_pass 将 .php 请求转发至 php:9000;root 指向挂载的 /www
      • PHP 使用官方 php:7.4-fpm 镜像并挂载代码目录。
      • MySQL 设置环境变量(如 MYSQL_ROOT_PASSWORDMYSQL_DATABASE)并挂载数据目录以持久化。
      • Redis 作为缓存服务,可按需映射端口(如 6379:6379)。

三、使用 Kubernetes 编排多容器

  • 适用场景:需要跨节点调度、自动重启、滚动升级、服务发现与自动扩缩容的生产级集群。
  • 快速起步(单节点或实验环境)
    • 安装 kubelet/kubeadm/kubectl(Ubuntu 示例):
      • sudo apt-get update && sudo apt-get install -y apt-transport-https curl
      • 添加 Kubernetes APT 源并安装组件(具体命令以官方仓库为准)
      • sudo kubeadm init --pod-network-cidr=10.244.0.0/16
      • mkdir -p $HOME/.kube && sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config && sudo chown $(id -u):$(id -g) $HOME/.kube/config
      • kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml(安装网络插件)
    • 部署应用:将多容器应用拆分为 Deployment/Service,用 kubectl apply -f 部署与滚动更新。

四、实践建议与常见问题

  • 数据持久化:数据库等状态服务务必使用 named volume 或绑定挂载,避免容器重建导致数据丢失(Compose 中使用 volumes: 声明)。
  • 配置与密钥:敏感信息使用 .envSecrets 管理,避免硬编码到 YAML。
  • 网络与服务发现:Compose 中为服务创建共享网络,容器间通过 服务名 互通;Kubernetes 使用 Service 提供稳定 DNS 与负载均衡。
  • 日志与排障:Compose 优先使用 docker-compose logs -f 跟踪问题;Kubernetes 使用 kubectl logs/describe 与事件排查。
  • 版本与兼容性:Compose 文件版本(如 3.8)与 Docker 引擎版本需匹配;生产环境建议固定镜像标签,避免 latest 造成不确定性。

0