一. Docker Compose 是什么
Docker Compose 是 Docker 官方提供的工具,用于定义和管理多容器应用。
它允许你用一个 YAML 文件 描述整个应用的服务(containers)、网络、卷、环境变量等,然后一条命令就能创建、启动、停止、销毁整个应用。
主要目标是 声明式管理 —— 你只写配置文件,Compose 确保容器状态和配置一致。
简单理解:
Docker 是管一个容器,Compose 是管理一堆容器的应用。
二. Compose 的核心概念
| 概念 |
说明 |
| Service(服务) |
YAML 文件里定义的一个容器,包括镜像、端口、环境变量、卷挂载等。 |
| Container(容器) |
实际运行的 Docker 实例,由 Service 创建。 |
| Volume(卷) |
持久化数据,用宿主机目录或 Docker 卷存储数据库、缓存、照片等。 |
| Network(网络) |
内部容器间通信网络,自动创建,保证服务可以互相访问。 |
| Project(项目) |
一个 Compose 文件及其相关容器、卷、网络的集合,默认用目录名作为项目名。 |
三. Compose 文件结构
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| version: "3.8" services: photoprism: image: photoprism/photoprism:latest container_name: photoprism restart: unless-stopped ports: - "2342:2342" environment: PHOTOPRISM_ADMIN_PASSWORD: "密码" volumes: - "D:/photoprism/originals:/photoprism/originals" - "D:/photoprism/storage:/photoprism/storage"
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| version: "3.3"
services: dev: image: nginx user: gbase privileged: true shm_size: 2G working_dir: /home/gbase env_file: - ./config/env.list volumes: - app-data:/data/app - ./config/.gdbinit:/home/gbase/.gdbinit - ./config/.gitconfig:/home/gbase/.gitconfig - ./config/.git-credentials:/home/gbase/.git-credentials networks: - mynet sysctls: net.ipv6.conf.all.disable_ipv6: 0 net.ipv6.conf.default.disable_ipv6: 0 ulimits: nofile: 655360
networks: mynet: driver: bridge enable_ipv6: true ipam: config: - subnet: "fd00:1234:5678::/64" - subnet: "172.20.0.0/24"
volumes: app-data: driver: local
|
启动
1 2 3 4 5
| # 普通 Compose: docker-compose -p gjf up -d --scale dev=3 # Swarm Compose: docker stack deploy -c docker-compose.yml gjf deploy.replicas: 3 生效
|
四. 常用命令
| 命令 |
功能 |
docker compose up -d |
创建并启动服务(后台模式) |
docker compose down |
停止并删除容器、网络(卷可保留) |
docker compose stop |
停止容器,但不删除 |
docker compose start |
启动已存在容器 |
docker compose restart |
停止 + 启动 |
docker compose logs -f |
查看实时日志 |
docker compose exec <service> <cmd> |
进入容器执行命令(类似 docker exec) |
docker compose ps |
查看当前项目的容器状态 |