基本示例

# docker-compose.yml
version: '2'

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

启动命令

docker-compose start
docker-compose stop
docker-compose pause
docker-compose unpause
docker-compose ps
docker-compose up
docker-compose down

例子

docker-compose -f docker-compose.yml -p cheatsheets up -d

使用指定的 compose 模板文件,在后台启动并运行所有的容器。

参考

构建

web:
  # 从 Dockerfile 构建
  build: .
  args:     # 添加构建参数
    APP_HOME: app
  # 从自定义 Dockerfile 构建
  build:
    context: ./dir
    dockerfile: Dockerfile.dev
  # 从镜像构建
  image: ubuntu
  image: ubuntu:14.04
  image: tutum/influxdb
  image: example-registry:4000/postgresql
  image: a4bc65fd

端口

  ports:
    - "3000"
    - "8000:80"  # host:container
  # 公开端口而不将它们发布到主机,它们只能由链接的服务访问。
  # 只能指定内部端口。
  expose: ["3000"]

命令

  # 执行命令
  command: bundle exec thin -p 3000
  command: [bundle, exec, thin, -p, 3000]
  # 覆盖 Dockerfile 的 `entrypoint`
  entrypoint: /app/start.sh
  entrypoint: [php, -d, vendor/bin/phpunit]

环境变量

  # 环境变量
  environment:
    RACK_ENV: development
  environment:
    - RACK_ENV=development
  # 从文件添加环境变量
  env_file: .env
  env_file: [.env, .development.env]

依赖关系

  # 使`db`服务可用作主机名`database`
  # (implies depends_on)
  links:
    - db:database
    - redis
  # 在启动之前确保`db`处于活动状态
  depends_on:
    - db
  # 启动之前确保`db`状态健康
  # 并且`db-init`已成功完成
  depends_on:
    db:
      condition: service_healthy
    db-init:
      condition: service_completed_successfully

其他选项

  # 使这项服务扩展到另一项服务
  extends:
    file: common.yml  # 可选项
    service: webapp
  volumes:
    - /var/lib/mysql
    - ./_data:/var/lib/mysql
  # 自动重启容器
  restart: unless-stopped
  # always, on-failure, no (default)

高级功能

标签 Labels

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

DNS 服务器

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

    # 当`test`命令成功时声明服务正常
    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

# 创建一个名为`frontend`的自定义网络
networks:
  frontend:

外部网络 External network

# 加入已有的网络
networks:
  default:
    external:
      name: frontend

数据卷 Volume

# 挂载主机路径或命名卷,指定为服务的子选项
  db:
    image: postgres:latest
    volumes:
      - "/var/run/postgres/postgres.sock:/var/run/postgres/postgres.sock"
      - "dbdata:/var/lib/postgresql/data"

volumes:
  dbdata:

用户 User

# 指定用户
user: root
# 同时指定用户和组的id
user: 0:0
0 Comments 为了完善这份速查表。 写下你的评论吧!