Docker Compose 教程:安装、使用与快速入门

Docker Compose 教程:安装、使用与快速入门

目录

  1. 什么是 Docker Compose?
  2. 安装 Docker Compose
  3. Docker Compose 基础
  4. 快速入门示例
  5. 常用命令
  6. 最佳实践
  7. 总结

什么是 Docker Compose?

Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。通过一个 YAML 文件(docker-compose.yml),您可以配置应用程序的所有服务,然后使用单个命令创建和启动所有服务。

主要功能:

  • 使用 YAML 文件管理多容器应用
  • 一键启动/停止整个应用栈
  • 服务间网络和卷管理
  • 环境变量配置
  • 服务依赖关系管理

典型应用场景:

  • 开发环境搭建
  • 自动化测试环境
  • 单主机部署
  • 微服务应用

安装 Docker Compose

在安装 Docker Compose 前,请确保已安装 Docker Engine

Linux 安装方法

# 下载最新版本的 Docker Compose
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

# 添加可执行权限
sudo chmod +x /usr/local/bin/docker-compose

# 验证安装
docker-compose --version
# 应输出:Docker Compose version v2.23.0

Windows/macOS 安装

Windows 和 macOS 的 Docker Desktop 已包含 Docker Compose,无需单独安装。


Docker Compose 基础

核心概念

  1. 服务 (Service):一个容器化的应用(如 web 服务器、数据库)
  2. 项目 (Project):由一组关联服务组成的完整应用
  3. Compose 文件:定义服务、网络和卷的 YAML 文件

docker-compose.yml 文件结构

version: "3.9"  # Compose 文件格式版本

services:        # 定义所有服务
  web:           # 服务名称
    image: nginx:alpine  # 使用的镜像
    ports:
      - "80:80"  # 端口映射
    volumes:
      - ./html:/usr/share/nginx/html  # 卷挂载

  db:
    image: postgres:15
    environment:  # 环境变量
      POSTGRES_PASSWORD: example

volumes:         # 定义卷
  db-data:       # 卷名称

YAML 文件关键字段

字段 说明 示例
version Compose 文件版本 "3.9"
services 定义所有服务
image 使用的 Docker 镜像 nginx:alpine
build 根据 Dockerfile 构建镜像 context: ./dir
ports 端口映射 - "8080:80"
volumes 卷挂载 - ./data:/app/data
environment 设置环境变量 DEBUG: "true"
depends_on 服务依赖关系 - db
networks 加入的网络 - backend

快速入门示例

1. 创建简单的 WordPress 站点

# docker-compose.yml
version: "3.9"

services:
  db:
    image: mysql:8.0
    volumes:
      - db_data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpresspass

  wordpress:
    image: wordpress:latest
    ports:
      - "8000:80"
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpresspass
      WORDPRESS_DB_NAME: wordpress
    depends_on:
      - db

volumes:
  db_data:

启动应用:

docker-compose up -d

访问 http://localhost:8000 完成 WordPress 安装

2. Python + Redis 计数器应用

项目结构:

counter-app/
├── app.py
├── requirements.txt
└── docker-compose.yml

app.py:

from flask import Flask
from redis import Redis
import os

app = Flask(__name__)
redis = Redis(host=os.environ.get('REDIS_HOST', 'redis'), port=6379)

@app.route('/')
def hello():
    count = redis.incr('hits')
    return f'Hello World! 页面访问次数: {count}'

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000, debug=True)

requirements.txt:

flask
redis

docker-compose.yml:

version: "3.9"

services:
  web:
    build: .
    ports:
      - "5000:5000"
    environment:
      REDIS_HOST: redis
    depends_on:
      - redis

  redis:
    image: "redis:alpine"

运行应用:

# 构建并启动
docker-compose up --build -d

# 访问应用
curl http://localhost:5000
# 输出:Hello World! 页面访问次数: 1

常用命令

命令 说明
docker-compose up 创建并启动所有服务
docker-compose up -d 在后台运行服务
docker-compose down 停止并移除所有容器、网络
docker-compose ps 查看运行中的服务
docker-compose logs 查看服务日志
docker-compose logs -f web 实时查看 web 服务日志
docker-compose build 构建或重新构建服务镜像
docker-compose start 启动已存在的服务
docker-compose stop 停止运行中的服务
docker-compose restart 重启服务
docker-compose exec web sh 进入 web 服务的容器
docker-compose pull 拉取服务的最新镜像
docker-compose config 验证 Compose 文件格式

最佳实践

  1. 版本控制

    • docker-compose.ymlDockerfile 纳入版本控制
    • 使用明确的镜像标签(避免 latest
  2. 环境分离

    # docker-compose.override.yml (开发环境)
    version: "3.9"
    
    services:
      web:
        volumes:
          - ./src:/app/src
        ports:
          - "3000:3000"
    
  3. 资源限制

    services:
      db:
        deploy:
          resources:
            limits:
              cpus: '0.50'
              memory: 512M
    
  4. 健康检查

    services:
      web:
        healthcheck:
          test: ["CMD", "curl", "-f", "http://localhost"]
          interval: 30s
          timeout: 10s
          retries: 3
    
  5. 网络优化

    networks:
      app-network:
        driver: bridge
        ipam:
          config:
            - subnet: 172.20.0.0/24
    

总结

Docker Compose 是容器化开发不可或缺的工具:

  • 简化多容器管理:通过单一文件定义复杂应用
  • 加速开发流程:一键启动完整开发环境
  • 环境一致性:确保开发、测试、生产环境一致
  • 资源高效利用:优化容器间通信和资源共享

下一步学习:

💡 提示:使用 docker-compose --help 随时查看命令帮助,实践是掌握 Docker Compose 的最佳方式!

posted @ 2025-07-14 22:50  锋露  阅读(2309)  评论(0)    收藏  举报