image

Совсем недавно, после выхода Compose 1.6.0+ и Docker 1.10.0+, стала доступна 2 версия.
Добавлены ключи: services, volumes, networks. Будут удалены ключи: links.


Version 1
# docker-compose.yml
app:
  build: .
  ports:
    - '3000:3000'
  volumes:
    - .:/home/web
  links:
    - db
db:
  image: sameersbn/postgresql
  ports:
    - '5432'
  volumes_from:
    - db_data
  env_file:
    - $HOME/.docker/$APP/db.env
db_data:
  image: tianon/true
  volumes:
    - /var/lib/postgresql

# config/database.yml
development:
  adapter: postgresql
  encoding: unicode
  database: <%= ENV['DB_ENV_DB_NAME'] %>
  pool: 5
  username: <%= ENV['DB_ENV_DB_USER'] %>
  password: <%= ENV['DB_ENV_DB_PASS'] %>
  host: <%= ENV['DB_PORT_5432_TCP_ADDR'] %>


Version 2
fallback mode
Пока links работают по-старому только network_mode: bridge.

# docker-compose.yml
version: '2'
services:
  app:
    build: .
    ports:
      - '3000:3000'
    volumes:
      - .:/home/web
    depends_on:
      - db
    links:
      - db
    network_mode: bridge
  db:
    image: sameersbn/postgresql
    ports:
      - '5432'
    volumes:
      - db_data:/var/lib/postgresql
    env_file:
      - $HOME/.docker/$APP/db.env
    network_mode: bridge
volumes:
  db_data:

# config/database.yml
development:
  adapter: postgresql
  encoding: unicode
  database: <%= ENV['DB_ENV_DB_NAME'] %>
  pool: 5
  username: <%= ENV['DB_ENV_DB_USER'] %>
  password: <%= ENV['DB_ENV_DB_PASS'] %>
  host: <%= ENV['DB_PORT_5432_TCP_ADDR'] %>


Без links, но используя env file.

# docker-compose.yml
version: '2'
services:
  app:
    build: .
    ports:
      - '3000:3000'
    volumes:
      - .:/home/web
    depends_on:
      - db
    env_file:
      - $HOME/.docker/$APP/db.env
  db:
    image: sameersbn/postgresql
    ports:
      - '5432'
    volumes:
      - db_data:/var/lib/postgresql
    env_file:
      - $HOME/.docker/$APP/db.env
volumes:
  db_data:

# config/database.yml
development:
  adapter: postgresql
  encoding: unicode
  database: <%= ENV['DB_NAME'] %>
  pool: 5
  username: <%= ENV['DB_USER'] %>
  password: <%= ENV['DB_PASS'] %>
  host: <%= ENV['DB_HOST'] %>

# $HOME/.docker/$APP/db.env
DB_NAME=habrahabr
DB_USER=habrahabr
DB_PASS=habrahabr
DB_HOST=db


Спасибо за внимание.

Комментарии (3)


  1. GamePad64
    28.02.2016 05:13

    Docker-compose switch to version 2
    Из заголовка подумал, что сам docker-compose обновился до 2.0. На самом деле, речь про формат docker-compose.yml. Кстати, в него добавили много вкусных фишек.


  1. Dreyk
    02.03.2016 13:57

    Проблема depends_on в том, что при docker-compose run не запускаются зависимости. Думаю, это исправят, но пока использую links

    Это пофикшено в 1.6.1


    1. AfsmNGhr
      02.03.2016 19:06

      У меня docker-compose version 1.6.2, поэтому проблему не заметил. Редко run использую, в основном docker-compose up и docker exec -it $project_app_1 /bin/bash.