Compose基础 #

什么是Docker Compose? #

Docker Compose是一个用于定义和运行多容器Docker应用的工具。通过Compose,你可以使用YAML文件配置应用的服务、网络和存储。

Compose的优势 #

text
┌─────────────────────────────────────────────────────┐
│               Docker Compose优势                     │
├─────────────────────────────────────────────────────┤
│                                                     │
│  1. 单文件配置 - 所有服务配置在一个文件中           │
│  2. 一键部署 - 一条命令启动所有服务                 │
│  3. 环境隔离 - 项目间网络隔离                       │
│  4. 变量替换 - 支持环境变量                         │
│  5. 服务依赖 - 自动处理启动顺序                     │
│  6. 开发便捷 - 本地开发环境标准化                   │
│                                                     │
└─────────────────────────────────────────────────────┘

安装Docker Compose #

Docker Desktop自带 #

Docker Desktop for Mac/Windows已内置Docker Compose。

Linux安装 #

bash
# 下载最新版本
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插件 #

bash
# Docker Compose V2 作为Docker插件
docker compose version

基本概念 #

项目(Project) #

一个Compose项目由一组相关服务组成,默认使用目录名作为项目名。

服务(Service) #

服务是应用的容器定义,可以包含多个容器实例。

docker-compose.yml #

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

services:       # 服务定义
  web:
    image: nginx
    ports:
      - "80:80"

  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: root

基本命令 #

启动服务 #

bash
# 启动所有服务(后台运行)
docker-compose up -d

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

# 启动指定服务
docker-compose up -d web

# 使用指定文件
docker-compose -f docker-compose.prod.yml up -d

停止服务 #

bash
# 停止所有服务
docker-compose stop

# 停止指定服务
docker-compose stop web

# 停止并删除容器
docker-compose down

# 停止并删除容器、网络、镜像
docker-compose down --rmi all

# 停止并删除容器、网络、卷
docker-compose down -v

查看状态 #

bash
# 查看运行状态
docker-compose ps

# 查看日志
docker-compose logs

# 实时查看日志
docker-compose logs -f

# 查看指定服务日志
docker-compose logs web

进入容器 #

bash
# 进入容器
docker-compose exec web bash

# 以root用户进入
docker-compose exec -u root web bash

# 运行一次性命令
docker-compose run web ping db

其他命令 #

bash
# 查看服务配置
docker-compose config

# 查看服务镜像
docker-compose images

# 拉取镜像
docker-compose pull

# 构建镜像
docker-compose build

# 重启服务
docker-compose restart

# 暂停/恢复服务
docker-compose pause
docker-compose unpause

第一个Compose项目 #

项目结构 #

text
myapp/
├── docker-compose.yml
├── app/
│   └── index.html
└── nginx/
    └── nginx.conf

docker-compose.yml #

yaml
version: '3.8'

services:
  web:
    image: nginx:alpine
    ports:
      - "8080:80"
    volumes:
      - ./app:/usr/share/nginx/html
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
    depends_on:
      - app

  app:
    image: node:18-alpine
    working_dir: /app
    volumes:
      - ./app:/app
    command: npm start

启动项目 #

bash
# 启动服务
docker-compose up -d

# 查看状态
docker-compose ps

# 查看日志
docker-compose logs -f

# 访问应用
curl http://localhost:8080

# 停止服务
docker-compose down

常用配置示例 #

Web应用 + 数据库 #

yaml
version: '3.8'

services:
  web:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
    depends_on:
      - php

  php:
    image: php:8.2-fpm-alpine
    volumes:
      - ./html:/usr/share/nginx/html
    depends_on:
      - mysql

  mysql:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: mydb
    volumes:
      - mysql-data:/var/lib/mysql

volumes:
  mysql-data:

开发环境 #

yaml
version: '3.8'

services:
  app:
    build:
      context: .
      dockerfile: Dockerfile.dev
    volumes:
      - .:/app
      - /app/node_modules
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=development
    command: npm run dev

  db:
    image: postgres:15
    environment:
      POSTGRES_PASSWORD: postgres
    volumes:
      - postgres-data:/var/lib/postgresql/data
    ports:
      - "5432:5432"

volumes:
  postgres-data:

项目管理 #

项目名称 #

bash
# 使用-p指定项目名
docker-compose -p myproject up -d

# 或使用环境变量
COMPOSE_PROJECT_NAME=myproject docker-compose up -d

多环境配置 #

bash
# 开发环境
docker-compose -f docker-compose.yml -f docker-compose.dev.yml up -d

# 生产环境
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d

环境变量文件 #

bash
# .env文件
COMPOSE_PROJECT_NAME=myapp
MYSQL_ROOT_PASSWORD=root
MYSQL_DATABASE=mydb
yaml
# docker-compose.yml
version: '3.8'

services:
  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: ${MYSQL_DATABASE}

小结 #

本节学习了Docker Compose的基础知识:

  • Compose的概念和优势
  • 安装和基本命令
  • docker-compose.yml基本结构
  • 简单项目示例

下一步 #

接下来,让我们学习 Compose文件详解,深入了解docker-compose.yml的配置语法。