Работа с контейнерами в Docker Compose
В статье Упаковка простого 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 существенно облегчает сборку, запуск и остановку вашего приложения. Наибольший эффект от его использования достигается при управлении приложением, состоящим из нескольких связанных контейнеров, о чем я расскажу в следующей статье.