Вторая часть цикла, посвященного контейнеризации MEAN-stack приложений, в которой мы познакомимся с Docker Compose - инструментом для конфигурирования и запуска мультиконтейнерных приложений Docker.
Содержание цикла
- Часть 1 - Dockerfile, образы, контейнеры
- Часть 2 - Docker Compose
- Часть 3 - Traefik reverse proxy
- Часть 4 - Docker Swarm
- Часть 5 - Mongo Replica Set в Docker Swarm
В предыдущей части мы создали Docker-образы сервера и клиента приложения. Теперь нам нужно поднять базу данных. Можно воспользоваться все той же командой docker run
. Но каждый раз запускать по отдельности все сервисы одного мультиконтейнерного приложения как-то утомительно. Хочется написать один файл конфига и запускать его одной командой. Как раз для этих целей и необходим инструмент Docker Compose. Он позволяет сконфигурировать работу сервисов (читай контейнеров) приложения в YAML-файле. Создадим этот файл.
docker-compose.yml
# Версия формата compose файла
version: "3"
services:
# Серверное приложение
server:
# Можно собрать образ из Docerfile
# build: ./server
# Но у нас есть репозиторий. Берем образ из него
image: myusername/public:mean-docker-server
# Дать доступ на порту 3000
ports:
- "3000:3000"
# Перезапускать сервис после падения
restart: on-failure
# Запускать сервис только после запуска сервиса db
depends_on:
- db
# Путь к mongoDB по имени сервиса (db). docker - имя базы
environment:
- "db:uri=mongodb://db/docker"
# Подключиться к сети db-net
networks:
- db-net
# Клиентское приложение
client:
image: myusername/public:mean-docker-client
ports:
- "4000:4000"
restart: on-failure
depends_on:
- server
# База данных
db:
image: mongo
restart: on-failure
networks:
- db-net
# Создаем сеть
networks:
db-net:
Основные команды
Запуск сервисов
docker-compose up -d
Параметр -d
указывает запустить в фоновом режиме.
Масштабирование сервисов
docker-compose up --scale server=2 --scale client=3
Логи
docker-compose logs
Запущенные процессы
docker-compose top
Остановка и удаление контейнеров
docker-compose down
Другие команды
docker-compose help
После запуска серверное приложение доступно на порту 3000. По сети докера оно подключается к базе данных. Однако клиентское приложение, хоть и открывается в браузере на localhost:4000
, но не имеет доступа к серверному api. Для этого требуется настроить реверс прокси сервер, чем мы и займемся в следующей части.