docker-composeНачало работы с docker-compose


замечания

Compose - это инструмент для определения и запуска многоконтейнерных приложений Docker. В Compose вы используете файл Compose для настройки служб вашего приложения. Затем, используя одну команду, вы создаете и запускаете все службы из своей конфигурации. Чтобы узнать больше о всех функциях Compose, см. Список функций.

Использование Compose - это в основном трехэтапный процесс.

  1. Определите среду приложения с Dockerfile чтобы он мог воспроизводиться в любом месте.
  2. Определите службы, которые составляют ваше приложение в docker-compose.yml чтобы они могли работать вместе в изолированной среде.
  3. Наконец, запустите docker-compose up и Compose начнет и запустит все ваше приложение.

Создание простого приложения

Этот пример исходит из официального документа. Предположим, у вас есть приложение python, использующее redis в качестве backend. После написания Dockerfile создайте файл docker-compose.yml следующим образом:

version: '2'
services:
  web:
    build: .
    ports:
     - "5000:5000"
    volumes:
     - .:/code
    depends_on:
     - redis
  redis:
    image: redis
 

Затем запустите docker-compose up чтобы настроить все приложение: python app и redis.


  • version: '2' - это версия синтаксиса файла команды docker-compose
  • services: это раздел, который описывает службы для запуска
  • web: и redis: имена сервисов для запуска, их содержимое описывает, как докер должен запускать контейнеры для этих сервисов
  • depends_on подразумевает зависимость сети от redis и, следовательно, компоновку redis сначала запускает контейнер redis а затем веб-контейнер. Тем не менее, docker-compose не redis пока контейнер redis будет готов до запуска web контейнера. Для этого вам нужно использовать скрипт, который задерживает запуск сервера приложений или что-то еще, пока контейнер redis сможет выполнять запросы.

Также можно добавить раздел томов и сетей. Использование раздела томов позволяет отключить громкость, которая может жить независимо от секции сервисов докеров. Аналогичный результат имеет секция сетей.

Секция redis служб должна быть скорректирована так:

redis:
  image: redis
  volumes:
    - redis-data:/code
  networks:
    -back-tier 
 

Затем добавьте следующие разделы в нижней части файла докеры, создайте файл версии 2.

volumes:
  # Named volume
  redis-data: 
    driver: local
networks:
  back-tier:
    driver: bridge
 

redis-data предоставляет доступную метку в разделе услуг. driver:local устанавливает том в локальную файловую систему.

back-tier устанавливает метку раздела сети, чтобы быть доступной в разделе услуг в качестве моста.

Docker Compose привет мир

Очень простой docker-compose.yml выглядит следующим образом:

version: '2'
services:
  hello_world:
    image: ubuntu
    command: [/bin/echo, 'Hello world']
 

Этот файл делает так, что есть служба hello_world , которая инициализируется с ubuntu:latest изображения ubuntu:latest и когда он запускается, он просто запускает echo 'Hello world'

Если вы находитесь в folder каталога (и содержит этот docker-compose.yml файл), вы можете сделать docker-compose up и вы должны увидеть

Creating folder_hello_world_1
Attaching to folder_hello_world_1
hello_world_1 | Hello world
folder_hello_world_1 exited with code 0
 

Это создало контейнер из образа ubuntu и docker-compose.yml команду, указанную на docker-compose.yml

Docker-Compose использует имя папки в качестве имени проекта для префикса контейнеров и сетей. Чтобы установить другое имя проекта, вы можете вызвать docker-compose --project-name NAME {up|down|...} или вы suppy файл с именем .env рядом с вашим docker-compose.yml и написать COMPOSE_PROJECT_NAME=name в Это. Лучше избегайте длинных имен проектов с дефисами (-), потому что докер сгруппировал бахавы, странные с такими именами.

Примечание. Docker-compose позволяет запускать несколько контейнеров докеров на одном хосте. Если вы хотите запускать несколько контейнеров на нескольких узлах, обратитесь к решению, например, swarm / kubernetes.

Установка Docker Compose

  1. Установите Docker Engine .

Если вы получите сообщение об ошибке Permission denied , выполните команду sudo -i перед двумя приведенными ниже командами, затем выйдите из нее.

  1. Pull Docker Создать /usr/local/bin/docker-compose .
curl -L https://github.com/docker/compose/releases/download/1.7.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
 

Вы можете изменить версию 1.7.1 в соответствии с вашей желаемой версией. Попробуйте получить версию с https://github.com/docker/compose/releases

  1. Примените исполняемые разрешения к двоичному.
chmod +x /usr/local/bin/docker-compose
 
  1. Проверьте установку.
docker-compose --version
 

Ожидаемая версия doker 1.7.1, build 0a9ab35

Монтаж

Если вы используете Docker на OS X или Windows, сборка докеров должна быть включена в вашу Docker для Windows или Docker Toolbox.

В Linux вы можете получить последние двоичные файлы прямо с страницы выпуска GitHub: https://github.com/docker/compose/releases

Вы можете установить конкретную версию с помощью следующих команд:

curl -L https://github.com/docker/compose/releases/download/1.7.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
 

Для получения дополнительной информации см. Страницу документации

Ruby on Rails с док-станцией

Если вы хотите использовать докеры для приложения rails и использовать базу данных, вам нужно знать, что все данные в контейнере докера будут уничтожены (если вы не сконфигурируете контейнер специально для хранения данных). Иногда вам нужно создать контейнер докеров с приложение и прикрепить его к старому контейнеру с базой данных.

В качестве примера приложения rails я использовал простое приложение. Вы можете создать его из команды:

rails new compose-app --database=postgresql
 

Конечно, вам нужно заранее установить рельсы, рубин и т. Д.

Затем создайте файл Docker в своем проекте и установите для него следующие данные:

FROM ruby:2.3.1
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN mkdir /compose-app
WORKDIR /compose-app
ADD Gemfile /compose-app/Gemfile
ADD Gemfile.lock /compose-app/Gemfile.lock
RUN bundle install
ADD . /compose-app
 

Следующий шаг - создать docker-compose.yml с данными:

version: '2'
services:
  db:
    image: postgres
  web:
    build: .
    command: bundle exec rails s -e development -p 80 -b '0.0.0.0'
    volumes:
      - .:/compose-app
    ports:
      - "80:80"
    depends_on:
      - db
 

Вы можете заменить 80 портов (-p 80) на другой.

Развернуть раздел конфигурации database.yml необходимо изменить на:

development: &default
  adapter: postgresql
  encoding: unicode
  database: postgres
  pool: 5
  username: postgres
  password:
  host: db
 

Теперь вы можете создавать изображения из команды:

docker-compose build
 

(Запустите это в каталоге проекта)

И начать все с:

docker-compose up
 

Если все будет сделано правильно, вы сможете увидеть журналы с рельсов в консоли.

Закрыть консоль. Он будет работать.

Если вы хотите удалить только контейнер с помощью приложения rails без базы данных, вам необходимо запустить его в каталоге проекта:

docker-compose stop web
docker-compose build web
docker-compose up -d --no-deps web
 

Будет создан и запущен новый контейнер с рельсами.

Запустить команду в сервисе docker-compose

docker-compose run service-name command

Если, например, вы хотели запустить rake db:create в своем web сервисе, вы должны использовать следующую команду:

docker-compose run web rake db:create