跳到主要内容

Docker Compose简介

1. Docker Compose 是什么

Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。它通过一个 YAML 文件(通常命名为 docker-compose.yml)来配置应用的服务、网络和卷,从而简化多容器应用的部署和管理。

2. 为什么使用 Docker Compose

使用 Docker Compose 的主要优点包括:

  • 简化多容器管理:通过一个文件定义所有服务,避免手动运行多个 docker run 命令。
  • 环境一致性:确保开发、测试和生产环境的一致性。
  • 快速启动和停止:通过一条命令启动或停止整个应用。
  • 依赖管理:自动处理服务之间的依赖关系(如数据库先于应用启动)。
  • 可移植性:YAML 文件可以轻松共享和版本控制。

3. 安装 Docker Compose

Docker Compose 可以通过以下步骤安装:

源码安装

  1. 下载 Docker Compose 二进制文件:
    # 示例为v2.23.0版本,实际安装时请修改版本
    sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  2. 赋予可执行权限:
    sudo chmod +x /usr/local/bin/docker-compose
  3. 验证安装:
    docker-compose --version

包管理器安装(简单)

# debian/ubuntu
apt update
apt install docker-compose

macOS 和 Windows

Docker Desktop 默认包含 Docker Compose,无需单独安装。只需确保 Docker Desktop 已安装并运行。

4. 使用 Docker Compose 部署简单服务的示例

以下是一个使用 Docker Compose 部署简单 Web 服务的示例。不用去管 app.py 和 requirements.txt 的含义,现在只需要跟 docker-compose.yml 混个眼熟。

示例:部署一个 Python Flask 应用和 Redis 服务

  1. 项目结构

    myapp/
    ├── app.py
    ├── requirements.txt
    ├── Dockerfile
    └── docker-compose.yml
  2. app.py(Flask 应用):

    from flask import Flask
    import redis

    app = Flask(__name__)
    redis_client = redis.Redis(host='redis', port=6379)

    @app.route('/')
    def hello():
    count = redis_client.incr('hits')
    return f'Hello World! This page has been viewed {count} times.'

    if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)
  3. requirements.txt

    flask
    redis
  4. docker-compose.yml

    version: '3.8'  # Docker Compose 文件版本

    services:
    # Web 服务
    web:
    build: . # 使用当前目录下的 Dockerfile 构建镜像
    ports:
    - "5000:5000" # 将容器端口 5000 映射到主机端口 5000
    volumes:
    - .:/app # 将当前目录挂载到容器的 /app 目录
    environment:
    - FLASK_ENV=development # 设置环境变量
    depends_on:
    - redis # 依赖 redis 服务

    # Redis 服务
    redis:
    image: redis:alpine # 使用官方 Redis 镜像
    ports:
    - "6379:6379" # 将容器端口 6379 映射到主机端口 6379
    volumes:
    - redis_data:/data # 使用命名卷持久化 Redis 数据

    # 定义数据卷
    volumes:
    redis_data:
  5. Dockerfile(在 myapp/ 目录下):

    FROM python:3.9-slim
    WORKDIR /app
    COPY requirements.txt .
    RUN pip install -r requirements.txt
    COPY . .
    CMD ["python", "app.py"]
  6. 启动服务: 在 myapp/ 目录下运行:

    docker-compose up

    image-20250228074239978

  7. 访问应用: 打开浏览器,访问 http://localhost:5000,页面会显示访问次数(由 Redis 计数)。

    image-20250228072948368

  8. 停止服务: 在 myapp/ 目录下运行 docker-compose down:

    ubuntu@www.zxzsk.com:~/docker/example-web$ docker-compose down
    WARN[0000] /home/ubuntu/docker/example-web/docker-compose.yml: `version` is obsolete
    [+] Running 3/3
    ✔ Container example-web-web-1 Removed 10.2s
    ✔ Container example-web-redis-1 Removed 0.2s
    ✔ Network example-web_default Removed 0.1s

总结

  • Docker Compose 是一个强大的工具,用于定义和运行多容器应用。
  • 它通过 YAML 文件简化了多容器的管理,确保环境一致性。
  • 通过一个简单的 Flask + Redis 示例,展示了如何使用 Docker Compose 部署服务。

使用 Docker Compose 可以显著提高开发和部署效率,特别适合复杂应用的容器化管理!