Docker Compose

Docker Compose

一、Docker Compose 概述

1. Docker Compose 是什么

  • Docker 官方提供的容器编排与管理工具

  • 用于管理多个 Docker 容器的应用

  • 核心特点:通过配置文件(YAML)管理容器,简化多容器部署

2. 解决的问题

  • 多容器部署繁琐:手动一个个启动容器(MySQL、Redis、Tomcat、Nginx)很麻烦

  • 环境迁移困难:在新机器上重复部署步骤效率低

  • 容器依赖关系管理:容器启动顺序需要手动控制

3. 与 Docker 的关系

  • Docker Compose 依赖于 Docker,是 Docker 的辅助工具

  • 底层还是 Docker:最终运行的还是 Docker 容器

  • 定位不同

    • Docker:单个容器的管理

    • Docker Compose:多个容器的编排管理

二、Docker Compose 安装与配置

1. 安装步骤

复制代码
# 1. 下载 Docker Compose 二进制文件
curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
​
# 2. 添加执行权限
chmod +x /usr/local/bin/docker-compose
​
# 3. 验证安装
docker-compose -v

2. 安装注意事项

  • Docker Compose 需要单独安装,不包含在 Docker 中

  • 下载时注意URL换行问题,确保命令为单行

  • 检查空格和标点符号是否正确

  • 存放在 /usr/local/bin/ 目录下,无需配置环境变量

三、Docker Compose 配置文件详解

1. 文件结构(docker-compose.yml)

复制代码
version: '3'                # 版本声明(固定)
services:                   # 服务定义(容器配置)
  mysql:                    # 服务名称(容器名)
    image: mysql:5.7        # 使用的镜像
    # ...其他配置
networks:                   # 网络配置
  mtx_network:              # 网络名称
    driver: bridge          # 网络驱动类型

2. 核心配置项解析

(1) services(服务定义)
  • 每个服务对应一个容器

  • 服务名称即为容器在 Compose 中的标识

(2) 常见服务配置参数
参数 说明 对应 Docker 命令
image 镜像名称或ID,本地不存在会自动拉取 docker pull
container_name 容器名称(可选) --name
ports 端口映射,支持多个 -p
volumes 文件/目录映射,支持多个 -v
environment 环境变量设置 -e
command 容器启动时执行的命令 docker run 最后的命令
privileged 特权模式(root权限),通常设为 true --privileged
networks 加入的网络 --network
depends_on 依赖关系,控制启动顺序 无直接对应
(3) networks(网络配置)
  • 定义容器间通信的网络

  • 默认使用 bridge 桥接模式

  • 网络别名:默认使用服务名称作为网络别名

3. 配置示例详解

复制代码
# MySQL 服务配置
mysql:
  image: mysql:5.7
  privileged: true
  ports:
    - "3306:3306"                    # 端口映射
  environment:
    - MYSQL_ROOT_PASSWORD=123456     # 环境变量
  volumes:
    - "./mysql/conf/my.cnf:/etc/mysql/my.cnf"      # 配置文件映射
    - "./mysql/data:/var/lib/mysql"                # 数据目录映射
  networks:
    - mtx_network                     # 加入的网络
​
# Redis 服务配置
redis:
  image: redis:latest
  command: redis-server /etc/redis/redis.conf      # 启动命令
  # ...其他配置
​
# Tomcat 服务配置(有依赖关系)
tomcat-pinter-1:
  depends_on:                        # 依赖关系
    - mysql
    - redis
  # ...其他配置

四、Docker Compose 常用命令

1. 容器生命周期管理

命令 说明 特点
docker-compose up -d 启动所有容器(后台运行) 首次使用,创建并启动
docker-compose stop 停止所有容器 容器仍存在,可重新启动
docker-compose start 启动已停止的容器 配合 stop 使用
docker-compose down 停止并删除所有容器 彻底清理,容器被删除
docker-compose restart 重启所有容器 容器保持运行状态

2. 查看与监控命令

命令 说明
docker-compose ps 查看容器状态(精简信息)
docker-compose logs 查看所有容器的日志
docker-compose logs [服务名] 查看指定服务的日志

3. 命令特性

  • 默认操作所有服务:不加服务名时,操作所有容器

  • 支持指定服务:命令后加服务名,只操作该服务

    复制代码
    docker-compose stop nginx      # 只停止 nginx
    docker-compose logs mysql      # 只看 mysql 日志
  • 必须在配置目录执行 :命令在 docker-compose.yml 所在目录执行

  • 文件名约定 :默认使用 docker-compose.yml,可改但需加 -f 参数

五、Docker Compose 实战要点

1. 文件格式要求严格

  • YAML 格式:缩进、对齐必须准确

  • 空格敏感:冒号后必须有空格

  • 层级关系:通过缩进表示,通常使用2个空格

  • 格式错误:会导致启动失败

2. 依赖关系管理

  • depends_on:定义服务间依赖

  • 启动顺序:确保依赖服务先启动

  • 示例:Tomcat 依赖 MySQL 和 Redis

    复制代码
    depends_on:
      - mysql
      - redis

3. 网络通信配置

  • 网络别名:默认使用服务名称

  • 容器间通信:通过服务名(网络别名)访问

  • 配置修改:如果服务名改变,需同步修改依赖配置

4. 常见问题与解决

  • 端口冲突:检查宿主机端口是否被占用

  • 容器名重复 :修改 container_name 或删除旧容器

  • 文件权限:确保映射目录有适当权限

  • 网络问题:检查网络配置是否正确

六、Docker Compose vs Docker

1. 使用场景对比

场景 Docker Docker Compose
单容器测试 ✓ 适合 △ 可但不必要
多容器应用 △ 繁琐 ✓ 适合
生产环境部署 △ 手动操作多 ✓ 自动化高
团队协作 △ 命令不统一 ✓ 配置文件统一

2. 优势总结

  • 一键部署docker-compose up 完成所有部署

  • 配置即代码:环境配置可版本控制

  • 简化操作:无需记忆复杂命令参数

  • 依赖管理:自动处理服务依赖关系

  • 环境一致性:确保不同环境部署一致

相关推荐
想进部的张同学10 小时前
RK3588开发板安装GStreamer硬件加速插件完整指南 成功版本(docker)
运维·docker·容器·rkmpp
康康的AI博客10 小时前
AI辅助文献综述:基于Gemini 2.5 Pro的自动化研究革命
运维·自动化
陈聪.11 小时前
HRCE简单实验
linux·运维·数据库
涟漪海洋11 小时前
docker启动容器覆盖镜像中的命令
运维·docker·容器
水境传感 张园园11 小时前
自来水厂水质监测站:用数据守护饮水安全
运维·服务器·网络
七夜zippoe11 小时前
2026年1月远程工具横评:UU远程以全能六边形战士之姿,重塑行业性能标杆
运维·效率·远程·uu·安全锁
gs8014011 小时前
【Xinference实战】解决部署Qwen3/vLLM时遇到的 max_model_len 超限与 Engine Crash 报错
运维·服务器
CCTI_Curran11 小时前
迷你标签打印机做TELEC认证注意事项
运维·服务器·wifi·蓝牙·telec认证·日本认证·无线产品
xqhoj11 小时前
Linux学习指南(二)——进程
linux·运维·服务器
yangSnowy11 小时前
Linux实用命令分析nginx系统日志文件
linux·运维·服务器