1. Docker Compose 基础概念
-
Docker Compose 是一个工具,用 YAML 文件定义和运行 多容器 Docker 应用。
-
核心文件:
docker-compose.yml
-
通过一个命令可以启动、停止、管理整个应用,而不必一个一个容器操作。
Compose 文件结构
version: "3" # Compose 文件版本
services: # 定义多个服务(容器)web:image: nginx:latestports:- "8080:80"app:build: ./myappenvironment:- CONFIG_PATH=/app/configvolumes:- ./config:/app/config
-
services
→ 每个服务对应一个容器 -
build
→ 从 Dockerfile 构建镜像 -
image
→ 直接使用已有镜像 -
ports
→ 容器端口映射 -
volumes
→ 挂载宿主机目录到容器 -
environment
→ 容器环境变量
2. 常用 Docker Compose 命令
命令 | 说明 |
---|---|
docker-compose up |
启动所有服务(前台) |
docker-compose up -d |
后台启动所有服务 |
docker-compose down |
停止并删除容器、网络、卷 |
docker-compose ps |
查看服务运行状态 |
docker-compose logs |
查看日志 |
docker-compose build |
重新构建镜像 |
docker-compose exec <service> bash |
进入服务容器交互式调试 |
3. 示例:管理多个 openatc容器,每个用不同配置,并设置不同的IP地址
假设有 3 个配置文件夹 config_1
~ config_10
:
docker-compose.yml
services:openatc1:image: openatc:x86_64container_name: openatc1volumes:- ./config/config1:/app/confignetworks:macvlan_net:ipv4_address: 192.168.15.200openatc2:image: openatc:x86_64container_name: openatc2volumes:- ./config/config2:/app/confignetworks:macvlan_net:ipv4_address: 192.168.15.201openatc3:image: openatc:x86_64container_name: openatc3volumes:- ./config/config3:/app/confignetworks:macvlan_net:ipv4_address: 192.168.15.202networks:macvlan_net:driver: macvlandriver_opts:parent: enp1s0 # 替换为宿主机真实网卡ipam:config:- subnet: 192.168.15.0/24gateway: 192.168.15.1
-
每个服务挂载不同配置目录
-
容器名唯一,便于管理
-
启动时,每个容器会运行
openatc
,各自使用自己配置 -
使用Docker network给每个实例分配固定的ip地址
启动所有服务
docker-compose up -d
查看状态
docker-compose ps
查看日志
docker-compose logs -f
4. 扩展:用 replicas
批量启动
如果你希望多个相同服务(同镜像):
version: "3.8"
services:myapp:image: myappdeploy:replicas: 10volumes:- ./config:/app/config
⚠️
deploy.replicas
只在 Docker Swarm 模式 下生效
如果用普通 Compose,可以通过写多个服务或者使用docker-compose up --scale myapp=10
扩展
5. 优点
-
集中管理:一条命令管理多个容器
-
环境隔离:每个服务有自己的容器、配置和挂载卷
-
可扩展性:可通过
scale
或replicas
快速扩容 -
便于开发和部署:开发环境和生产环境一致