Cheat Sheet速查表
跳转到主要内容

docker-compose 速查表

本文根据 Devhints / docker-compose 翻译。代码示例及版本范围沿用原文。原文标注更新日期:2024-04-03。

基础示例

# docker-compose.yml
version: '2'

services:
  web:
    build:
    # build from Dockerfile
      context: ./Path
      dockerfile: Dockerfile
    ports:
     - "5000:5000"
    volumes:
     - .:/code
  redis:
    image: redis

从版本 1 升级到 2

Docker compose 现已集成到官方 Docker 安装包中。此次变更进一步提升了功能,语法上的简单调整如下:V1: docker-compose ARG 变更为 V2 docker compose ARG 更多相关信息请见此处: Docker Compose 迁移至 V2

命令

docker compose version
docker compose config
docker compose start
docker compose stop
docker compose restart
docker compose run
docker compose create
docker compose attach
docker compose pause
docker compose unpause
docker compose wait
docker compose up
docker compose down
docker compose ps
docker compose top
docker compose events
docker compose logs
docker compose images
docker compose build
docker compose push
docker compose cp
docker compose exec

参考资料

构建 (Building)

web:
  # build from Dockerfile
  build: .
  args:     # Add build arguments
    APP_HOME: app
  # build from custom Dockerfile
  build:
    context: ./dir
    dockerfile: Dockerfile.dev
  # build from image
  image: ubuntu
  image: ubuntu:14.04
  image: tutum/influxdb
  image: example-registry:4000/postgresql
  image: a4bc65fd

端口 (Ports)

  ports:
    - "3000"
    - "8000:80"  # host:container
  # expose ports to linked services (not to host)
  expose: ["3000"]

命令

  # command to execute
  command: bundle exec thin -p 3000
  command: [bundle, exec, thin, -p, 3000]
  # override the entrypoint
  entrypoint: /app/start.sh
  entrypoint: [php, -d, vendor/bin/phpunit]

环境变量 (Environment variables)

  # environment vars
  environment:
    RACK_ENV: development
  environment:
    - RACK_ENV=development
  # environment vars from file
  env_file: .env
  env_file: [.env, .development.env]

依赖项 (Dependencies)

  # makes the `db` service available as the hostname `database`
  # (implies depends_on)
  links:
    - db:database
    - redis
  # make sure `db` is alive before starting
  depends_on:
    - db
  # make sure `db` is healty before starting
  # and db-init completed without failure
  depends_on:
    db:
      condition: service_healthy
    db-init:
      condition: service_completed_successfully

其他选项 (Other options)

  # make this service extend another
  extends:
    file: common.yml  # optional
    service: webapp
  volumes:
    - /var/lib/mysql
    - ./_data:/var/lib/mysql
  # automatically restart container
  restart: unless-stopped
  # always, on-failure, no (default)

高级功能

标签 (Labels)

services:
  web:
    labels:
      com.example.description: "Accounting web app"

DNS 服务器 (Servers)

services:
  web:
    dns: 8.8.8.8
    dns:
      - 8.8.8.8
      - 8.8.4.4

设备 (Devices)

services:
  web:
    devices:
    - "/dev/ttyUSB0:/dev/ttyUSB0"
services:
  web:
    external_links:
      - redis_1
      - project_db_1:mysql

健康检查 (Healthcheck)

    # declare service healthy when `test` command succeed
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost"]
      interval: 1m30s
      timeout: 10s
      retries: 3
      start_period: 40s

主机 (Hosts)

services:
  web:
    extra_hosts:
      - "somehost:192.168.1.100"

网络 (Network)

# creates a custom network called `frontend`
networks:
  frontend:

外部网络 (External network)

# join a pre-existing network
networks:
  default:
    external:
      name: frontend

数据卷 (Volume)

# mount host paths or named volumes, specified as sub-options to a service
  db:
    image: postgres:latest
    volumes:
      - "/var/run/postgres/postgres.sock:/var/run/postgres/postgres.sock"
      - "dbdata:/var/lib/postgresql/data"

volumes:
  dbdata:

用户 (User)

# specifying user
user: root
# specifying both user and group with ids
user: 0:0