参考书籍:

《Docker技术入门与实战》第三版 杨保华 戴王剑 曹亚仑 著

一. Compose简介

  • Compose 是 Docker 官方的开源项目,旨在实现对多容器应用的快速编排,其功能类似于 OpenStack 中的 Heat。项目代码托管于 GitHub(https://github.com/docker/compose),定位为“定义和运行多个 Docker 容器的应用”。它起源于开源项目 Fig,且完全兼容 Fig 格式的模板文件。尽管通过 Dockerfile 可便捷定义单个应用容器,但实际业务场景(如 Web 项目需同时部署 Web 服务容器、数据库容器和负载均衡容器)常需多个容器协同工作。Compose 通过统一的 docker-compose.yml 模板文件(YAML 格式)定义一组关联容器,将其整合为一个完整的服务栈(stack),以满足复杂应用的编排需求。

  • Compose 的核心概念包含三层结构

  • 任务(Task)​​:单个容器被称为一个任务,拥有唯一 ID。同一服务中的多个任务按序号递增排列。

  • 服务(Service)​​:由同一应用镜像的容器副本集合构成,可横向扩展为多个容器实例。

  • 服务栈(Stack)​​:多个服务协同完成特定业务(如 Web 应用栈包含 Web 服务、数据库服务),通常由一个 docker-compose.yml 文件定义。

  • Compose 以服务栈为默认管理对象,通过子命令实现对栈内服务的全生命周期管理。

  • Compose 由 Python 编写,底层调用 Docker 服务提供的 API 进行容器管理。因此,只要目标平台支持 Docker API,即可使用 Compose 进行跨平台容器编排.

二. 安装与卸载

  • Compose 兼容 ​​Linux 和 macOS​​ 平台,二者安装流程基本一致。使用前需预先安装 ​​Docker 引擎​​。

  • 提供三种灵活安装途径:​​Python pip 工具安装、下载预编译二进制文件、​​直接运行于 Docker 容器内​。前两种传统方式适用于​​本地环境部署​​,操作直接简便;容器化方案​​无需修改宿主机配置​​,尤其适合​​云计算场景​​,避免污染系统环境。

1. pip安装

  • 通过 Python 包管理工具 pip ,可直接将 Docker Compose 作为标准 Python 应用从 PyPI 源安装,操作流程如下:sudo pip install -U docker-compose

2. 二进制包

  • Docker Compose 官方提供预编译的二进制程序包,通过 GitHub 发行页(https://github.com/docker/compose/releases)公开发布,用户可直接下载部署至目标系统.

  • 下载二进制文件:使用 curl 获取与当前系统匹配的程序包(自动识别系统架构):sudo curl -L https://github.com/docker/compose/releases/download/1.19.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose

  • 添加执行权限sudo chmod a+x /usr/local/bin/docker-compose

  • 验证安装docker-compose --version

3. 容器中执行

  • 由于 Compose 本身是 Python 应用,可直接在容器内运行。操作流程如下:

  • 下载容器执行脚本:curl -L https://github.com/docker/compose/releases/download/1.19.0/run.sh -o /usr/local/bin/docker-compose

  • 授予执行权限:chmod +x /usr/local/bin/docker-compose

4. 卸载

  • 如果是二进制包方式安装的,删除二进制文件即可:sudo rm /usr/local/bin/docker-compose

  • 如果是通过Python pip工具安装的,则可以执行如下命令删除:sudo pip uninstall docker-compose

三. Compose模板文件

  • 模板文件是使用Compose的核心,涉及的指令关键字较多,但大部分指令与docker [container] create|run命令的相关参数含义类似。默认的模板文件名为docker-compose.yml,采用YAML格式,当前最新版本为v3。

  • 镜像来源​每个服务都必须通过image指令指定镜像名称,或通过build指令(需配合Dockerfile)自动构建生成镜像。

  • 指令继承原则​若使用build指令,在Dockerfile中设置的选项(如CMDEXPOSEVOLUMEENV等)会自动被获取,无需在docker-compose.yml中重复声明。

Compose模板文件主要命令

命令

功能

​build​

  • 指定Dockerfile所在文件夹的路径​​(可以是绝对路径,或者相对docker-compose.yml文件的路径)。Compose将会利用它自动构建应用镜像,然后使用这个镜像。

  • build指令还可以指定创建镜像的​​上下文(context)​​、​​Dockerfile路径​​、​​标签(labels)​​、​​Shm大小(shm_size)​​、​​参数(args)​​和​​缓存来源(cache_from)​​等。

version: '3'
services:
  app:
    build: /path/to/build/dir
####################################

version: '3'
services:
  app:
    build:
      context: /path/to/build/dir
      dockerfile: Dockerfile-app
      labels:
        version: "2.0"
        released: "true"
      shm_size: '2gb'
      args:
        key: value
        name: myApp
      cache_from:
        - myApp:1.0

cap_add​

  • 增加容器的内核能力(capacity)

cap_add:
  - ALL

​cap_drop​

  • 移除容器的内核能力(capacity)

cap_drop:
  - NET_ADMIN

​cgroup_parent​

  • 指定父 cgroup 组,容器将继承该组的资源限制。目前​​不支持在 Swarm 模式​​中使用。

cgroup_parent: cgroups_1

command​

  • 覆盖容器启动后默认执行的命令,可以为字符串格式或 JSON 数组格式。

command: echo "hello world"
command: ["bash", "-c", "echo", "hello world"]

configs

  • 在 Docker Swarm 模式下,可以通过 configs 来管理和访问非敏感的配置信息。支持从​​本地文件读取​​或​​外部来源读取​​配置。

version: "3.3"

services:
  app:
    image: myApp:1.0
    deploy:
      replicas: 1
    configs:  # 挂载配置文件到容器
      - file_config      # 本地文件配置
      - external_config  # 外部来源配置

configs:
  file_config:        # 本地文件配置定义
    file: ./config_file.cfg  # 配置文件的相对路径
  
  external_config:    # 外部来源配置定义
    external: true    # 使用预先在Swarm集群中创建的外部配置

​container_name​

  • 指定容器名称。默认格式​​:项目名称_服务名称_序号(如 myproject_web_1

  • ​自定义名称​​:通过 container_name 字段指定

  • 不支持 Swarm 模式​​:此配置仅在单机 Docker 环境生效

  • 指定容器名称后,该服务​​无法横向扩展(scale)​Docker 不允许同一主机上存在多个同名容器。

​deploy​

  • 指定部署和运行时的容器配置

  • 仅Swarm模式生效

    仅支持docker stack deploy

depends_on​

  • 通过 depends_on 指定多个服务间的依赖关系,控制容器的​​启动顺序​​:启动服务时,优先启动所有被依赖的服务;确保依赖服务(如数据库)先于主服务启动。

services:
  web:
    image: my-web-app
    depends_on: 
      - db  # 声明依赖db服务

  db:
    image: postgres:14

devices​

  • 允许容器直接访问​​宿主机物理/虚拟设备​​,映射格式为 宿主机设备路径:容器内设备路径

  • 不支持集群模式​​,仅适用于单机 Docker 环境。

services:  
  my_service:  
    image: my_image  
    devices:  
      - "/dev/ttyUSB1:/dev/ttyUSB0"  # 宿主机的USB1设备映射到容器USB0接口

dns​

  • 通过 dns 配置项为容器指定自定义的 DNS 服务器地址,支持两种配置形式:

  • 单值形式​​(单一 DNS 服务器)

  • 列表形式​​(多个 DNS 服务器)

dns: 8.8.8.8  # 使用Google公共DNS

dns:  
  - 8.8.8.8    # 主DNS  
  - 9.9.9.9    # 备用DNS (Quad9)

dns_search​

  • 通过 dns_search 配置DNS搜索域,支持两种格式:

  • 单值格式​​(单一搜索域)

  • ​列表格式​​(多个搜索域)

dns_search: example.com  # 配置单个搜索域

dns_search:  
  - domain1.example.com  # 主搜索域
  - domain2.example.com  # 备用搜索域

dockerfile​

  • 如果需要指定额外的编译镜像的 Dockerfile 文件,可通过 dockerfile 指令来定义。

  • 该指令不能与 image 指令同时使用​​,否则 Compose 将无法确定依据哪个指令生成最终的服务镜像。

dockerfile: Dockerfile-alternate  # 指定备用Dockerfile名称  

​entrypoint​

  • 覆盖容器默认入口命令(Entrypoint),完全取消​​镜像中指定的入口命令和默认启动命令。

entrypoint: python app.py  # 直接覆盖为Python应用启动命令

env_file​

  • 从指定文件加载环境变量到容器,支持两种配置形式:单文件路径​​(字符串格式)、多文件列表​​(数组格式)。

  • 路径解析基准​若使用 -f 指定自定义模板文件(如 docker-compose -f file.yml),路径基于​​模板文件所在目录​​(非执行命令的当前目录)。

  • ​变量冲突处理​environment 指令冲突时,以 environment 定义的值为准。

  • 文件格式规范每行需符合 VAR=VALUE 格式,支持 # 开头的注释行。

env_file: .env  # 加载当前目录下的.env文件

#############
env_file:
  - ./common.env         # 通用环境变量
  - ./apps/web.env       # 服务专用变量
  - ./opt/secrets.env    # 密钥文件
#########

环境变量文件
# common.env:设置开发环境
PROG_ENV=development     # 程序环境变量
DB_HOST=db.example.com   # 数据库地址
API_KEY=abc123xyz        # 接口密钥(实际使用需加密)

​environment​

  • 设置环境变量,可以使用数组或字典两种格式。只给定名称的变量会自动获取运行Compose主机上对应变量的值,可以用来防止泄露不必要的数据。

字典格式
environment:  
  RACK_ENV: development  # 直接赋值  
  SESSION_SECRET:        # 继承宿主机同名变量值  

数组格式
environment:  
  - "RACK_ENV=development"  
  - SESSION_SECRET        # 继承宿主机变量(无需赋值)

expose​

  • 暴露端口,但不映射到宿主机,只被连接的服务访问。仅可以指定内部端口为参数,如下所示:

expose:
- '3000'
- '8000'

​extends​

external_links​

  • 链接到docker-compose.yml外部的容器,甚至并非Compose管理的外部容器。参数格式跟links类似。

external_links:
  - redis_1 # 无别名链接
  - project_db_1:mysql # 容器名:服务别名
  - project_db_1:postgresql # 同一容器映射多别名

​extra_hosts​

  • 类似 Docker 中的 --add-host 参数,指定额外的 host 名称映射信息。(此配置允许在容器运行时添加自定义主机名与 IP 的映射关系,使容器内部可通过自定义主机名访问目标服务)

例如:
extra_hosts:
  - "googledns:8.8.8.8"
  - "dockerhub:52.1.157.61"

在启动后的服务容器中,/etc/hosts 文件会自动添加以下两条映射记录:
8.8.8.8 googledns
52.1.157.61 dockerhub

​healthcheck​

  • 功能​​:指定检测容器应用健康状态的机制

  • 配置参数​​:

  • test:检测方法命令

  • interval:检测间隔时间

  • timeout:检测超时时间

  • retries:失败重试次数

  • start_period:容器启动后的延迟检测时间

healthcheck:
  # 健康检测命令:使用curl检测本地8080端口,-f参数确保服务不可用时返回非零状态码
  test: ["CMD", "curl", "-f", "http://localhost:8080"]
  
  # 检测频率:每30秒执行一次健康检查
  interval: 30s
  
  # 单次检测超时:每次检测最长等待15秒
  timeout: 15s
  
  # 失败重试:连续3次检测失败才标记为不健康
  retries: 3
  
  # 启动缓冲期:容器启动后等待30秒才开始健康检查(避免初始化期间误判)
  start_period: 30s

​image​

  • 指定为镜像名称或镜像ID。如果镜像在本地不存在,Compose将会尝试拉取这个镜像。

# 1. 官方仓库镜像(简写形式)
image: ubuntu

# 2. Docker Hub用户仓库镜像(格式:用户名/镜像名)
image: orchardup/postgresql

# 3. 镜像ID(完整ID或缩写形式)
image: a4bc65fd

​isolation​

  • 配置容器隔离的机制,包括default、process和hyperv。

  • default:默认隔离机制(通常是命名空间隔离)

  • process:进程级隔离(轻量级隔离方案)

  • hyperv:基于Hyper-V的强隔离(Windows容器专用)

​labels​

  • 为容器添加 Docker 元数据 (metadata) 信息。例如可以为容器添加辅助说明信息。

labels:
  com.startupteam.description: "webapp for a startup team"
  com.startupteam.department: "devops department"
  com.startupteam.release: "rc3 for v1.0"

​links​

  • 链接到其他服务中的容器。使用服务名称(同时作为别名)或服务名称:服务别名(SERVICE:ALIAS)格式都可以。

  • 注意:links命令属于旧的用法,可能在后续版本中被移除。

配置示例:
links:
  - db
  - db:database
  - redis

使用的别名将会自动在服务容器中的/etc/hosts里创建。例如:
172.17.2.186 db
172.17.2.186 database
172.17.2.187 redis

被链接容器中相应的环境变量也将被创建。

​logging​

# 日志配置说明
# 包括一系列子配置

# 1. 日志驱动类型配置 (logging.driver)
# 类似于Docker中的--log-driver参数,指定日志驱动类型
# 目前支持三种日志驱动类型:
driver: "json-file"   # 默认驱动,日志存储在JSON文件中
driver: "syslog"      # 将日志发送到syslog服务器
driver: "none"        # 禁用所有日志记录

# 2. 日志驱动参数配置 (logging.options)
# 日志驱动的相关参数设置

# 示例配置1:syslog驱动配置
logging:
  driver: "syslog"           # 指定syslog日志驱动类型
  options:
    syslog-address: "tcp://192.168.0.42:123"  # syslog服务器的TCP地址

# 示例配置2:json-file驱动配置
logging:
  driver: "json-file"        # 指定json-file日志驱动类型
  options:
    max-size: "1000k"         # 单个日志文件最大尺寸
    max-file: "20"            # 保留的日志文件最大数量

network_mode​

  • 设置网络模式。使用和docker client的--net参数一样的值。

network_mode: "none"                 # 无网络模式
network_mode: "bridge"                # 默认桥接模式
network_mode: "host"                  # 宿主机网络模式
network_mode: "service:[service name]"  # 共享服务网络栈
network_mode: "container:[name or id]" # 共享指定容器网络栈

​networks​

  • 首先在顶级networks中定义网络web_net的基本参数

  • 在服务web中通过networks.web_net加入该网络(所加入的网络需要在顶级的networks字段中定义具体的网络信息)。

  • 为服务添加别名web_app(其他容器可通过该别名访问)

  • 指定服务的静态IPv4地址确保访问稳定性

顶级网络定义
networks:
  web_net:
    driver: bridge        # 使用桥接网络驱动
    enable_ipv6: true     # 启用IPv6支持
    ipam:                # IP地址管理配置
      driver: default     # 使用默认IPAM驱动
      config:
        - subnet: 172.16.0.0/24  # 定义IP地址分配子网

服务网络配置
services:
  web:
    networks:
      web_net:
        aliases: web_app  # 在网络中设置服务别名
        ipv4_address: 172.16.0.10  # 指定服务的静态IPv4地址

pid​

  • 跟主机系统共享进程命名空间。打开该选项的容器之间,以及容器和宿主机系统之间可以通过进程ID来相互访问和操作。

pid: "host"

ports​

  • 暴露端口信息。使用宿主:容器(HOST:CONTAINER)格式,或者仅仅指定容器的端口(宿主将会随机选择端口)都可以。

  • 当使用 HOST:CONTAINER 格式映射端口时,如果容器端口小于60且未加引号,可能会解析错误(YAML会将 xx:yy 格式解析为60进制数)。例如:30:30 会被解析为 30分30秒(即1830秒)而非端口映射。

  • 强烈建议:所有端口配置都采用引号包裹的字符串格式。

ports:
  - "3000"                 # 仅容器端口(宿主随机分配)
  - "8000:8000"            # 宿主端口:容器端口
  - "49100:22"             # 将宿主49100映射到容器22(SSH)
  - "127.0.0.1:8001:8001"  # 限定本地访问的映射

或者使用对象格式:
ports:
  - target: 80         # 容器内部端口
    published: 8080    # 宿主暴露端口
    protocol: tcp      # 协议类型(TCP/UDP)
    mode: ingress      # 模式(ingress/host)

​restart​

  • 指定重启策略,可以为 no(不重启)、always(总是)、on-failure(失败时)、unless-stopped(除非停止)。

  • 注意:Swarm 模式下要使用 restart_policy。在生产环境中推荐配置为 always 或者 unless-stopped

restart: unless-stopped  # 严格保留原图短横线格式(无空格)

security_opt​

  • 指定容器模板标签(label)机制的默认属性(用户、角色、类型、级别等)。

security_opt:
  - label:user:USER  # 用户名标签配置
  - label:role:ROLE  # 角色名标签配置

​secrets​

  • 配置应用的秘密数据。可以指定来源秘密、挂载后名称、权限等。

version: "3.1"  # Docker Compose版本

services:
  web:
    image: webapp:stable  # 服务镜像
    deploy:               # 部署配置
      replicas: 2        # 副本数量
      secrets:           # 密钥配置
        - source: web_secret    # 来源密钥名称
          target: web_secret    # 挂载后密钥名称
          uid: '103'            # 用户ID
          gid: '103'            # 组ID
          mode: 0444            # 文件权限(只读)

secrets:                  # 密钥定义
  web_secret:            # 密钥名称
    file: ./web_secret.txt  # 密钥源文件路径

​stop_grace_period​

  • 指定应用停止时,容器的优雅停止期限。过期后则通过SIGKILL强制退出。默认值为10s。

​stop_signal​

  • 指定停止容器的信号,默认为 SIGTERM。

sysctls​

  • 配置容器内的内核参数。注意:Swarm模式中不支持此操作

# 示例:指定连接数和开启TCP防护
sysctls:
  net.core.somaxconn: 4096    # 最大连接队列长度
  net.ipv4.tcp_syncookies: 1  # 开启SYN洪水攻击防护

​ulimits​

  • 指定容器的ulimits限制值

# 示例配置:
ulimits:
  nproc: 65535   # 最大进程数限制(硬限制)
  nofile:        # 文件句柄数限制
    soft: 20000  # 软限制(应用可随时修改,不超过硬限制)
    hard: 40000  # 硬限制(仅root用户可提高)

​userns_mode​

  • 指定用户命名空间模式。Swarm 模式中不支持。

例如,使用主机上的用户命名空间:
userns_mode: "host"

volumes​

  • 数据卷所挂载路径设置。可以设置宿主机路径(HOST:CONTAINER)或加上访问模式(HOST:CONTAINER:ro)。

  • 支持driver、driver_opts、external、labels、name等子配置。

volumes:
  - /var/lib/mysql                       # 匿名卷(仅指定容器路径)
  - cache/:/tmp/cache                    # 相对路径(宿主机cache目录→容器/tmp/cache)
  - ~/configs:/etc/configs/:ro           # 用户家目录映射(ro=只读权限)

或者可以使用更详细的语法格式:

volumes:
  - type: volume                        # 挂载类型(volume/bind/tmpfs)
    source: mydata                      # 数据卷名称
    target: /data                       # 容器内挂载点
    volume:
      nocopy: true                      # 禁止从容器复制初始数据

# 顶级数据卷定义
volumes:
  mydata:                              # 自定义数据卷名称 # 实际使用时需在services和volumes中同时声明

deploy

  • 指定部署和运行时的容器相关配置。该命令只在Swarm模式下生效,且只支持docker stack deploy命令部署。

其他指令

读取环境变量

扩展特性

# 从3.4版本开始,Docker Compose支持用户自定义扩展字段
# 通过YAML的锚点引用功能实现配置复用

version: '3.4'  # 要求最低3.4版本

# 定义自定义扩展字段 (x-前缀)
x-logging: &default-logging  # 锚点命名为default-logging
  options:
    max-size: '10m'  # 单个日志文件最大10MB
    max-file: '10'   # 最多保留10个历史日志文件
    driver: json-file # 使用JSON格式日志驱动

services:
  web:
    image: webapp:stable  # 服务镜像
    logging: *default-logging  # 引用自定义的日志配置

四. Compose命令说明

  • 对于Compose来说,大部分命令的对象既可以是项目本身,也可以指定为项目中的服务或者容器。如果没有特别的说明,命令对象将是项目,这意味着项目中所有的服务都会受到命令影响。

  • 执行docker-compose [COMMAND] --help 或者docker-compose help [COMMAND]可以查看具体某个命令的使用格式。

  • Compose命令的基本的使用格式是docker-compose [-f=<arg>...] [options] [COMMAND] [ARGS...]


  • 命令选项如下:

  • -f, --file FILE 指定使用的Compose模板文件,默认为docker-compose.yml,可以多次指定;

  • -p, --project-name NAME 指定项目名称,默认将使用所在目录名称作为项目名;

  • --verbose 输出更多调试信息;

  • -v, --version 打印版本并退出;

  • -H, --host HOST 指定所操作的Docker服务地址;

  • --tls 启用TLS,如果指定-tlsverify则默认开启;

  • --tlscacert CA_PATH 信任的TLS CA的证书;

  • --tlscert CLIENT_CERT_PATH 客户端使用的TLS证书;

  • --tlskey TLS_KEY_PATH TLS的私钥文件路径;

  • --tlsverify 使用TLS校验连接对方;

  • --skip-hostname-check不使用TLS证书校验对方的主机名;

  • --project-directory PATH 指定工作目录,默认为Compose文件所在路径。


Compose命令

命令

功能

​build​

  • 格式docker-compose build [options] [SERVICE...]

  • 功能​​:构建(或重新构建)项目中的服务容器。构建后的容器会生成唯一标记名(如 web_db);可随时在项目目录下运行此命令重新构建服务。

  • 选项

  • --force-rm强制删除构建过程中的临时容器

  • --no-cache禁用构建缓存(延长构建时间但确保全新构建)

  • --pull总是尝试拉取更新版本的镜像

  • -m, --memory MEM指定构建容器的内存上限(如 -m 512m

  • --build-arg key=val指定服务构建参数(可多次使用)

​bundle​

  • 格式docker-compose bundle [options]

  • 功能:创建一个可分发(Distributed Application Bundle,DAB)的配置包,包括整个服务栈的所有数据,他人可以利用该文件启动服务栈。

  • 选项:

  • -push-images:自动推送镜像到仓库;

  • -o,-output PATH:配置包的导出路径。

config

  • 格式docker-compose config [options]校验和查看Compose文件的配置信息。

  • 选项:

  • --resolve-image-digests:为镜像添加对应的摘要信息;

  • -q,--quiet:只检验格式正确与否,不输出内容;

  • --services:打印出Compose中所有的服务信息;

  • --volumes:打印出Compose中所有的挂载卷信息;

down​

  • 格式docker-compose down [options]停止服务栈,并删除相关资源,包括容器、挂载卷、网络、创建镜像等。默认情况下只清除所创建的容器和网络资源。

  • 选项:

  • --rmi type:指定删除镜像的类型,包括all(所有镜像),local(仅本地);

  • -v, --volumes:删除挂载数据卷;

  • --remove-orphans:清除孤儿容器,即未在Compose服务中定义的容器;

  • -t, --timeout TIMEOUT:指定超时时间,默认为10s。

​events​

  • 格式docker-compose events [options] [SERVICE...]实时监控容器的事件信息。

  • 选项:

  • 支持选项包括 -json:以 Json 对象流格式输出事件信息。

exec​

  • 格式docker-compose exec [options] [-e KEY=VAL...] SERVICE COMMAND [ARGS...]

  • 核心功能​​:在一个运行中的容器内执行给定命令。

  • 工作原理​​

  • 通过SERVICE参数指定目标服务;

  • COMMAND定义需执行的具体指令;

  • ARGS...传递命令参数。

  • 选项:

  • -d在后台运行命令(不占用当前终端)

  • -privileged以特权角色运行命令(获取宿主机root权限)

  • -u, -user USER以指定用户身份运行命令(如-u www-data

  • -T禁用TTY伪终端(默认开启)

  • -index=index指定多容器实例的索引(默认首实例)

  • -e, -env KEY=VAL设置容器环境变量(可多次使用)

help​

  • 获得命令帮助信息

images

  • 格式docker-compose images [options] [SERVICE...]列出服务所创建的镜像。

  • 选项:

  • -q:仅显示镜像的ID。

kill

  • 格式docker-compose kill [options] [SERVICE...]通过发送 SIGKILL 信号来强制停止服务容器。

  • 支持通过 -s 参数来指定发送的信号,例如通过如下指令发送 SIGINT 信号docker-compose kill -s SIGINT

logs

  • 格式docker-compose logs [options] [SERVICE...]查看服务容器的输出。默认情况下,docker-compose 将对不同的服务输出使用不同的颜色来区分。可以通过--no-color 来关闭颜色。

  • 选项:

  • --no-color:关闭彩色输出;

  • -f,--follow:持续跟踪输出日志消息;

  • -t,--timestamps:显示时间戳信息;

  • --tail="all":仅显示指定行数的最新日志消息。

​pause​

  • 格式docker-compose pause [SERVICE...]暂停一个服务容器。

port​

  • 格式docker-compose port [options] SERVICE PRIVATE_PORT打印某个容器端口所映射的公共端口。

  • 选项:

  • --protocol=proto:指定端口协议,tcp(默认值)或者 udp;

  • --index=index:如果同一服务存在多个容器,指定命令对象容器的序号(默认为1)。

ps

  • 格式docker-compose ps [options] [SERVICE...]列出项目中目前的所有容器。

  • 选项:

  • -q:只打印容器的ID信息。

pull

  • 格式docker-compose pull拉取所有服务的依赖镜像

  • 选项:

  • --ignore-pull-failures:忽略拉取镜像过程中的错误。

push

  • 格式docker-compose push [options] [SERVICE...]推送服务创建的镜像到镜像仓库。

  • 选项:

  • --ignore-push-failures:忽略推送镜像过程中的错误。

restart

  • 格式docker-compose restart [options] [SERVICE...]重启项目中的服务。

  • 选项:

  • -t,--timeout TIMEOUT:指定重启前停止容器的超时(默认为10秒)。

rm

  • 格式docker-compose rm [options] [SERVICE...]删除所有(停止状态的)服务容器。推荐先执行 docker-compose stop 命令来停止容器。

  • 选项:

  • -f,--force:强制直接删除,包括非停止状态的容器。一般尽量不要使用该选项。

  • -v:删除容器所挂载的数据卷。

run

  • 格式docker-compose run [options] [-p PORT...] [-e KEY=VAL...] SERVICE [COMMAND] [ARGS...]

  • 在指定服务上执行一个命令。例如:docker-compose run ubuntu ping docker.com将会启动一个ubuntu服务器,并执行ping docker.com命令。

  • 功能特性

  • 默认自动启动所有关联服务(除非已在运行中)

  • 自动创建配置的卷、链接等资源

  • 给定命令会覆盖原有的自动运行命令

  • 自动创建端口避免冲突。

  • 扩展控制:不启动web容器关联的其他容器:docker-compose run --no-deps web python manage.py shell

  • 选项:

  • -d:后台运行容器;

  • --name NAME:为容器指定一个名字;

  • --entrypoint CMD:覆盖默认的容器启动指令;

  • -e KEY=VAL:设置环境变量值,可多次使用选项来设置多个环境变量;

  • -u,--user="":指定运行容器的用户名或者uid;

  • --no-deps:不自动启动关联的服务容器;

  • --rm:运行命令后自动删除容器(d模式下将忽略);

  • -p,--publish=[]:映射容器端口到本地主机;

  • --service-ports:配置服务端口并映射到本地主机;

  • -T:不分配伪tty(依赖tty的指令将无法运行)。

scale

  • 格式docker-compose scale [options] [SERVICE=NUM...]设置指定服务运行的容器个数。

  • 通过 service=num 的参数来设置数量。例如:docker-compose scale web=3 db=2将启动 3 个容器运行 web 服务,2 个容器运行 db 服务。当指定数目多于该服务当前实际运行容器,将新创建并启动容器;反之,将停止容器。

  • 选项:

  • -t,--timeout TIMEOUT:停止容器时候的超时(默认为 10 秒)。

start

  • 格式docker-compose start [SERVICE...]启动已经存在的服务容器。

stop

  • 格式docker-compose stop [options] [SERVICE...]停止已经处于运行状态的容器,但不删除它。通过 docker-compose start 可以再次启动这些容器。

  • 选项:

  • -t,--timeout TIMEOUT:停止容器时候的超时(默认为 10 秒)。

top

  • 格式docker-compose top [SERVICE...]

  • 显示服务栈中正在运行的进程信息。

unpause

  • 格式docker-compose unpause [SERVICE...]

  • 恢复处于暂停状态中的服务。

up

  • 格式docker-compose up [options] [SERVICE...]

  • 核心功能​​:自动完成服务全生命周期管理:

  • ​​智能构建​​:自动构建缺失的镜像

  • 容器管理​:(重新)创建服务容器;启动服务及关联容器;自动启动链接服务(已运行除外)。

  • 项目启动​​:大部分时候都可以直接通过该命令来启动一个项目。

  • 选项:

  • -d后台运行容器

  • --no-color禁用彩色输出(无服务区分色)

  • --no-deps不自动启动链接的服务

  • --no-build禁止自动构建缺失镜像

  • --force-recreate强制重新创建容器,与--no-recreate冲突

  • --no-recreate容器存在时不重建,与--force-recreate冲突

  • --remove-orphans删除未定义的孤儿容器

  • --abort-on-container-exit容器停止时中止所有服务,与-d冲突

  • -t, --timeout TIMEOUT停止容器超时(默认10秒),与-d冲突

  • --scale SERVICE=NUM扩展服务实例数(如--scale web=3

  • --exit-code-from SERVICE返回指定服务的退出码

version

  • 格式docker-compose version

  • 打印版本信息。

五. Compose环境变量

  • 环境变量可以用来配置Compose的行为,以DOCKER_开头的变量和用来配置Docker命令行客户端的使用一样。

Compose环境变量

变量

说明