Docker 容器技术入门与实践 (五):Docker Compose

张开发
2026/6/10 3:35:20 15 分钟阅读
Docker 容器技术入门与实践 (五):Docker Compose
Docker Compose 技术入门与实践一、Docker Compose 核心概念解析Docker Compose 是 Docker 官方提供的用于定义和运行多容器应用的工具。它允许开发者使用一个 YAML 格式的配置文件docker-compose.yml来描述一组相互关联的容器及其配置如网络、存储卷、环境变量等并通过一条命令完成所有容器的启动、停止和管理。核心价值服务编排简化多容器应用的部署流程。环境一致性确保开发、测试、生产环境的一致性。依赖管理自动处理容器间的网络连接与启动顺序。二、OpenEuler 系统环境准备OpenEuler 是华为推出的开源 Linux 发行版专注于高性能与安全性。以下是部署前的必要准备安装 Docker 引擎# 更新系统 sudo dnf update # 安装 Docker sudo dnf install docker # 启动服务并设置开机自启 sudo systemctl start docker sudo systemctl enable docker # 验证安装 docker --version安装 Docker Compose# 下载最新版 Compose (以 v2.21.0 为例) sudo curl -L https://github.com/docker/compose/releases/download/v2.21.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose # 赋予执行权限 sudo chmod x /usr/local/bin/docker-compose # 验证安装 docker-compose --version三、Docker Compose 配置文件精解 (docker-compose.yml)配置文件是 Compose 的核心采用 YAML 语法。以下是一个典型结构version: 3.8 # 指定 Compose 文件版本 services: # 定义服务容器 web: # 服务名称 image: nginx:alpine # 使用的镜像 ports: - 80:80 # 端口映射主机:容器 volumes: - ./html:/usr/share/nginx/html # 数据卷挂载 db: image: postgres:13 environment: POSTGRES_PASSWORD: example # 环境变量关键字段解析配置项描述services定义每个容器的配置包括镜像、端口映射等细节。image指定基础镜像用于构建或运行容器。ports映射端口格式为 HOST:CONTAINER例如8080:80。volumes持久化数据支持主机路径如./data或命名卷如db_data。environment设置容器环境变量用于配置容器运行时的参数。networks自定义网络用于隔离容器组提高安全性和通信效率。depends_on控制服务启动顺序指定依赖关系以确保服务按顺序启动。四、实战使用 Compose 部署 WordPressWordPress 是一个典型的 LAMPLinux Apache MySQL PHP应用。我们将通过两个容器实现WordPress 容器运行 PHP 应用。MySQL 容器提供数据库服务。1. 编写docker-compose.ymlversion: 3.8 services: wordpress: image: wordpress:6.2-php8.1-apache ports: - 8080:80 # 主机 8080 映射到容器 80 environment: WORDPRESS_DB_HOST: db WORDPRESS_DB_USER: wpuser WORDPRESS_DB_PASSWORD: wppassword WORDPRESS_DB_NAME: wordpress volumes: - wordpress_data:/var/www/html # 持久化网站数据 depends_on: - db # 确保先启动数据库 db: image: mysql:8.0 environment: MYSQL_DATABASE: wordpress MYSQL_USER: wpuser MYSQL_PASSWORD: wppassword MYSQL_RANDOM_ROOT_PASSWORD: 1 # 随机生成 root 密码 volumes: - db_data:/var/lib/mysql # 持久化数据库 volumes: wordpress_data: # 声明命名卷 db_data:2. 启动应用# 进入项目目录 mkdir wordpress cd wordpress vim docker-compose.yml # 粘贴上述配置 # 启动服务后台运行 docker-compose up -d输出示例Creating network wordpress_default with the default driver Creating volume wordpress_db_data with default driver Creating volume wordpress_wordpress_data with default driver Creating wordpress_db_1 ... done Creating wordpress_wordpress_1 ... done3. 验证部署访问http://OpenEuler-IP:8080进入 WordPress 安装界面。完成语言、数据库信息与docker-compose.yml一致等配置。登录后台http://OpenEuler-IP:8080/wp-admin。五、Docker Compose 日常操作指南1. 常用命令命令作用docker-compose up -d启动服务后台模式docker-compose down停止并删除容器、网络docker-compose ps查看运行中的服务docker-compose logs -f实时查看日志docker-compose exec service_name sh进入容器 Shelldocker-compose build重新构建服务需 Dockerfile2. 数据卷管理查看所有卷docker volume ls删除未使用的卷docker volume prune3. 更新服务修改docker-compose.yml后重启服务docker-compose down docker-compose up -d六、高级配置与优化1. 资源限制限制容器 CPU 和内存避免资源争抢services: wordpress: deploy: resources: limits: cpus: 0.5 memory: 512M2. 健康检查确保服务完全就绪后再接收流量services: db: healthcheck: test: [CMD, mysqladmin, ping, -h, localhost] interval: 10s timeout: 5s retries: 33. 多环境配置使用docker-compose.override.yml为开发环境添加调试工具# docker-compose.override.yml services: wordpress: ports: - 8080:80 - 9000:9000 # Xdebug 端口启动时自动合并配置docker-compose -f docker-compose.yml -f docker-compose.override.yml up七、典型问题排查1. 端口冲突现象Bind for 0.0.0.0:8080 failed: port is already allocated解决更改ports配置如9090:80。停止占用端口的进程sudo lsof -i :8080→kill PID。2. 数据库连接失败现象Error establishing a database connection排查# 查看数据库日志 docker-compose logs db # 进入数据库容器检查服务状态 docker-compose exec db mysql -u wpuser -pwppassword常见原因环境变量拼写错误。数据库未完全启动添加healthcheck解决。3. 文件权限问题现象WordPress 无法上传文件解决# 修改挂载目录权限 sudo chown -R 33:33 ./wordpress_data # 33 是容器内 www-data 用户 UID八、生产环境最佳实践使用命名卷避免主机路径依赖便于迁移。设置重启策略容器崩溃时自动恢复services: wordpress: restart: unless-stopped分离敏感数据将密码放入.env文件# .env 文件 MYSQL_PASSWORDsecretenvironment: MYSQL_PASSWORD: ${MYSQL_PASSWORD}网络隔离为不同应用创建独立网络networks: frontend: backend:九、扩展场景添加 Redis 缓存优化 WordPress 性能添加 Redis 容器services: cache: image: redis:6 networks: - backend wordpress: environment: WORDPRESS_REDIS_HOST: cache networks: - frontend - backend networks: frontend: backend:在 WordPress 中安装 Redis 插件如 “Redis Object Cache”并配置即可。十、总结Docker Compose 将复杂的多容器部署简化为声明式配置显著提升开发与运维效率。通过本文您已掌握在 OpenEuler 上搭建 Compose 环境编写多服务 YAML 配置文件部署高可用 WordPress 站点日常管理、问题排查与生产优化核心价值再强调“一键启停复杂归简一配定义环境无忧。”附录命令速查表场景命令启停服务docker-compose up -d/down查看状态docker-compose ps日志跟踪docker-compose logs -f service_name配置更新docker-compose down docker-compose up -d数据卷清理docker volume prune通过持续实践您将能驾驭更复杂的微服务架构实现高效、可靠的容器化应用生命周期管理。

更多文章