docker-compose учебник
Начало работы с docker-compose
Поиск…
замечания
Compose - это инструмент для определения и запуска многоконтейнерных приложений Docker. В Compose вы используете файл Compose для настройки служб вашего приложения. Затем, используя одну команду, вы создаете и запускаете все службы из своей конфигурации. Чтобы узнать больше о всех функциях Compose, см. Список функций.
Использование Compose - это в основном трехэтапный процесс.
- Определите среду приложения с
Dockerfile
чтобы он мог воспроизводиться в любом месте. - Определите службы, которые составляют ваше приложение в
docker-compose.yml
чтобы они могли работать вместе в изолированной среде. - Наконец, запустите
docker-compose up
и Compose начнет и запустит все ваше приложение.
Монтаж
Если вы используете 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
Для получения дополнительной информации см. Страницу документации
Создание простого приложения
Этот пример исходит из официального документа. Предположим, у вас есть приложение 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 run service-name command
Если, например, вы хотели запустить rake db:create
в своем web
сервисе, вы должны использовать следующую команду:
docker-compose run web rake db:create
Установка Docker Compose
Если вы получите сообщение об ошибке
Permission denied
, выполните командуsudo -i
перед двумя приведенными ниже командами, затем выйдите из нее.
- 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
- Примените исполняемые разрешения к двоичному.
chmod +x /usr/local/bin/docker-compose
- Проверьте установку.
docker-compose --version
Ожидаемая версия doker 1.7.1, build 0a9ab35
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.
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
Будет создан и запущен новый контейнер с рельсами.