Работа с контейнерами в Docker Compose
О технологиях

Работа с контейнерами в Docker Compose

14682
5 минут

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

Файл docker-compose.yml

В директории нашего проекта my_project создайте файл docker-compose.yml, в который необходимо добавить следующее содержимое

$ cat docker-compose.yml
web:
 build: ./my_flask_app
 ports:
   - "5000:5000"
 volumes:
   - ./my_flask_app:/app 

Описание содержания docker-compose.yml

web:

Название компонента приложения, управляемого Docker Compose. Каждый компонент запускается в отдельном контейнере или их группе


 build: ./my_flask_app

Обозначение того, что данный компонент будет запускаться из образа, который необходимо собрать. Инструкции по сборке будут искаться в Dockerfile в директории ./my_flask_app относительно docker-compose.yml файла



			 ports:
			   - "5000:5000"
		

Обозначение того, что необходимо выполнить публикацию порта 5000 данного компонента в порт 5000, доступный по внешнему IP-адресу хоста (или виртуальной машины), на котором будет запущено приложение.



			 volumes:
			   - ./my_flask_app:/app
		

Обозначение того, что внутрь контейнера, отвечающего за данный компонент приложения, необходимо подключить Docker диск (Docker Volume). В данном случае в роли Docker диска будет выступать директория ./my_flask_app, которая будет cмонтирована в директорию /app внутрь контейнера. Эта операция выполнена для того, чтобы можно было легко менять Flask приложение и наблюдать изменения обновляя окно браузера, а не выполняя пересборку всего контейнера целиком. Попробуйте изменить вывод функции hello_world в файле ./my_flask_app/app.py, чтобы в этом убедиться.


Если вы еще не остановили запущенный в прошлой статье контейнер, сделайте это, чтобы не возникло конфликта с использованием порта 5000 в процессе запуска нового контейнера, который будет управляться Docker Compose.

Работа с контейнерами в Docker Compose. Запуск контейнера

Сборка и запуск нового контейнера выполняется командой

$ docker-compose up -d

Ключ -d необходим, чтобы запустить ваше приложение, состоящее из одного контейнера, и вернуть управление терминалу, в котором вы вызывали docker-compose.

После успешной сборки и запуска контейнера, вы сможете снова увидеть вывод «Moe Flask приложение в контейнере Docker.» в браузере по адресу http://192.168.99.100:5000/.

Для того, чтобы пересобрать ваше приложение после сделанных вами изменений выполните команду

$ docker-compose build

А перезапуск контейнера вместе с предварительной пересборкой, выполняется командой

$ docker-compose up -d --build

Просмотр запущенных docker-compose контейнеров, а также информации по опубликованным ими портам осуществляется командой

$ docker-compose ps

 Name Command State Ports
----------------------------------------------------------------
myproject_web_1 python app.py Up 0.0.0.0:5000->5000/tcp

Остановка и удаление приложения

Остановка приложения выполняется командой

$ docker-compose stop
Stopping myproject_web_1 ... done

Одновременная остановка и удаление выполняются командой

$ docker-compose down
Stopping myproject_web_1 ... done
Removing myproject_web_1 ... done

Использование Docker Compose существенно облегчает сборку, запуск и остановку вашего приложения. Наибольший эффект от его использования достигается при управлении приложением, состоящим из нескольких связанных контейнеров, о чем я расскажу в следующей статье.

Внедряем и поддерживаем Kubernetes/DevOps
Развертываем и сопровождаем инфраструктуру для бизнес-приложений на базе микросервисов и контейнеров
17 сентября 2019
Docker и InSpec: проверка контейнерной инфраструктуры на безопасность
Cis-docker-benchmark – это ни что иное как профиль соответствия InSpec, который содержит в себе набор тестов для запуска в автоматическом режиме. По итогам тестирования вы получаете детальное описание того, что у вас сделано хорошо, а что требует улучшения.
2 минуты
3352
6 сентября 2019
Docker: решения для хранения образов
На сегодняшний день ни одно решение, построенное на основе или просто использующее Docker, не обходится без хранилища Docker образов (images). Такие хранилища делятся на публично доступные и приватные.
1 минута
10007
scrollup