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 完成所有部署

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

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

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

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

相关推荐
鸿儒5179 小时前
MR-50国产化GPU docker配置方法
docker·容器·mr
杖雍皓9 小时前
没有服务器如何构建现代 Web 应用:平台选型与组合策略
运维·服务器·前端·react.js·github·netlify·vercel
联盛新能源10 小时前
优得运维斩获中国户用和工商业光储充大会年度优秀运维案例奖
运维
Zhu75810 小时前
在k8s集群部署ApacheHadoop单节点单数据副本
云原生·容器·kubernetes
bukeyiwanshui10 小时前
20260703 K8s ECShop商城项目
云原生·容器·kubernetes
糖果店的幽灵11 小时前
混沌测试从入门到精通(容器与K8s)
云原生·容器·kubernetes
Raina测试12 小时前
Maestro实现IOSUI自动化
运维·自动化
不像程序员的程序媛19 小时前
系统cpu内存负载资源分析
运维·服务器·数据库
Asuicao1 天前
centos7.9版本升级ssh OpenSSH 9.8p1 源码 OpenSSL 1.1.1w 源码包以及安装升级回滚文档
运维·ssh