Docker Compose 使用指南

Docker Compose 使用指南(详尽教程)

一、什么是 Docker Compose?

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

它特别适合本地开发、测试以及小型部署环境。


二、安装 Docker Compose

1. Docker Desktop(推荐)

如果你使用的是 Docker Desktop(Windows/Mac),Docker Compose 已集成在其中。

2. Linux 用户安装(独立 CLI)

sudo curl -L "https://github.com/docker/compose/releases/download/v2.26.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version

三、基础概念

  • 服务(services):你应用的一个组件,例如 web、db。

  • 网络(networks):多个服务间的通信桥梁。

  • 卷(volumes):持久化服务数据,如数据库数据。


四、编写 docker-compose.yml 文件

下面是一个使用 Nginx + PHP + MySQL 的典型 LEMP 栈例子:

version: '3.8'

services:
  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./nginx:/etc/nginx/conf.d
      - ./html:/var/www/html
    depends_on:
      - php

  php:
    image: php:8.2-fpm
    volumes:
      - ./html:/var/www/html

  mysql:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: exampledb
      MYSQL_USER: user
      MYSQL_PASSWORD: userpass
    volumes:
      - mysql_data:/var/lib/mysql

volumes:
  mysql_data:

五、常用命令

启动服务

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

当你运行:

docker-compose up -d

它会默认在当前目录自动查找一个名为 docker-compose.yml 的文件,并基于该文件启动服务。


查找规则:

  • 默认文件名是 docker-compose.yml(或 .yaml,但 .yml 是推荐写法)。

  • 必须在执行命令的当前目录下存在。

  • 如果你使用的是 Docker Compose V2(现代版本,其实就是 docker compose 而非 docker-compose),也适用相同规则。

停止服务

docker-compose down      # 停止并移除容器、网络
docker-compose stop      # 仅停止容器

查看日志

docker-compose logs
docker-compose logs -f nginx  # 跟踪 nginx 日志

执行命令

docker-compose exec php bash  # 进入 php 容器终端

构建服务(适用于包含 Dockerfile 的项目)

docker-compose build
docker-compose up --build

六、项目目录结构建议

project/
├── docker-compose.yml
├── nginx/
│   └── default.conf
├── html/
│   └── index.php

示例 default.conf 内容(nginx 配置):

server {
    listen 80;
    server_name localhost;

    root /var/www/html;
    index index.php;

    location ~ \.php$ {
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

七、进阶使用

1. .env 文件支持

可以使用 .env 文件定义变量,在 docker-compose.yml 中使用:

.env 文件:

MYSQL_ROOT_PASSWORD=supersecret

docker-compose.yml 中使用:

environment:
  MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}

2. 多环境配置(override)

默认 Compose 会合并 docker-compose.override.yml

你也可以使用多个配置文件:

docker-compose -f docker-compose.yml -f docker-compose.prod.yml up

3. 容器之间通信

Compose 默认为所有服务创建一个自定义网络,服务间可以直接通过服务名通信,例如 php 容器中连接 mysql 容器:

$pdo = new PDO("mysql:host=mysql;dbname=exampledb", "user", "userpass");

八、调试技巧

  • docker-compose ps:查看当前运行的容器状态。

  • docker-compose config:检查配置是否正确(合并结果)。

  • docker network lsdocker volume ls:查看网络和数据卷。


九、最佳实践

  1. 按功能模块拆分服务:如 web、db、cache 等。

  2. 使用环境变量:提升移植性。

  3. 版本控制配置文件:如 docker-compose.yml.env

  4. 使用命名卷而不是路径挂载,减少权限问题。

  5. 避免在生产中使用默认网络,使用自定义网络提升安全性。


十、参考资源


© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享