官方文档

https://docs.docker.com/compose/compose-file/compose-file-v3/

命令说明

早期 docker-compose 是一个独立的命令,需要另外安装。docker 之后,docke-compose 已经集成到了 docker 命令里变成了子命令 compose,使用 docker compose 就可以。
应该是在 21.11 月后的 docker 版本里就有了 compose 这个子命令。

配置文件

# yaml 配置实例
version: '3'
services:
  web:
    build: .
    stdin_open: true # docker run -i
    tty: true        # docker run -t
    privileged: true
    ports:
      - "5000:5000"
    environment:
      - ENV=online
    volumes:
      - .:/code
      - logvolume01:/var/log
    links:
      - redis
    networks:
      - front-tier
      - back-tier 
  redis:
    image: redis
    volumes:
      logvolume01: {}
networks:
  front-tier:
    driver: bridge 
  back-tier:
    driver: bridge 

指令说明

image

services:
  web:
    image: my_web

web 是用户自定义的,来标识这个服务的名称。
image 是镜像的名称,如果不存在会去拉取。
image 支持的格式

image: redis
image: ubuntu:14.04
image: tutum/influxdb
image: example-registry.com:4000/postgresql
image: a4bc65fd

build

build 用于指定一份 Dockerfile,用于在启动时通过这份配置构建镜像。
build 的值都是一个目录,可以是相对目录也可以是绝对目录。

# 如果需要指定具体的 Dockerfile,可以使用 dockerfile 参数
build:
  context: ../
  dockerfile: path/of/Dockerfile
  
# 构建并且指定镜像名称
build: ./dir
image: webapp:tag

# 类型 docker 的 ARG 命令
build:
  context: .
  args:
    - buildno=1
    - password=secret

command

command 用于覆盖容器启动后执行的默认命令

command: [bundle,exec, thin, -p, 3000]

container_name

指定容器名称

container_name: app

depends_on

用于指定容器之间的依赖关系,这样可以保证某个容器启动之前依赖的容器会先启动。

version: "3"
services:
  web:
    image: my_web
    depends_on:
      - redis
  redis:
    image: redis-alphine

dns

dns: 8.8.8.8

dns:
  - 8.8.8.8 
  - 9.9.9.9 

dns_search 和这个也类似。

tmpfs

挂载临时目录到容器内部。

tmpfs: /run

tmpfs:
  - /run
  - /tmp

entrypoint

用于覆盖 dockerfile 中的 ENTRYPOINT 指令的结果。

entrypoint: /code/start.sh

env_file

可以专门定义一个用于存放变量的文件

env_file: .env

environment

设置镜像里的环境变量。

environment:
  - ENV=online

用于连接到服务中的其他容器

links:
  - redis

这样将会在该容器里添加 redis 的 host 信息。环境变量也会被创建。

用于连接外部的容器(例如直接使用 docker run 启动的)。
前提是这些外部容器中至少有一个容器是连接到与项目服务的同一个网格里。

external_links:
  - redis_global

extra_hosts

用于往 extra_hosts 里添加记录

extra_hosts:
- "somehost:162.242.1.1" 

labels

向容器添加元数据。

labels:
  - description:"doc"

logging

用于配置日志服务

logging:
  driver: syslog

volumns

# 语法 /host/path:/container/path
# host path 可以是相对路径
volumes:
   - /var/opt/my_website/dist:/usr/share/nginx/html:ro