docker compose

一. 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"  # Compose 文件版本
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
# deploy.replicas: 3
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 查看当前项目的容器状态