Docker-compose файл.
Docker-compose - инструмент для совместного запуска несколких контенеров. Основой для docker-compoes является yaml-файл с настройками. Удобство заключается в том, что единожды написанный docker-compose.yml можно легко перенести с устройства на устройство.
Установка
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
Третья строчка скрипта дает нам возможность использовать docker-compose от имени сисетмы, если этот команда не будет выполнена. команда docker-compose потребует указания полноценного пути расположения.
Пример написания docker-compose
Пример взят с docs.microsoft.com
version: "3.7"
services:
app:
image: node:12-alpine
#build: .
command: sh -c "yarn install && yarn run dev"
ports:
- 3000:3000
working_dir: /app
volumes:
- ./:/app
environment:
MYSQL_HOST: mysql
MYSQL_USER: root
MYSQL_PASSWORD: secret
MYSQL_DB: todos
networks:
app_net:
mysql:
image: mysql:5.7
volumes:
- todo-mysql-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: todos
networks:
app_net:
volumes:
todo-mysql-data:
networks:
app_net:
driver: bridge
Ключевые слова используемые в docker-compose:
| Ключи | Применение |
|---|---|
| build | Указывает путь откуда брать Dockerfile для создания образа |
| args | Указание аргументов билда которые требуются во время создания образа |
| command | Переписывает CMD указанную в Dockerfile |
| devices | Мапирование физических устройств в рабочий контейнер |
| depends_on | Указание зависимости сервисов друг от друга. Зависимый сервис будет запускаться последний |
| dns | Указанный в ручуню DNS сервер |
| entrypoint | Переписывает ENTRYPOINT директиву из Dockerfile |
| env_file | Добавление переменных с помощью файла переменных окружения |
| environment | Явное указание переменных в контейнер |
| expose | Выставление портов контейнера, они будут доступны только linked сервисам, могут быть указаны только внутренние порты. |
| image | Указание образа, который будет взят для старта контейнера |
| links | Связывание контейнеров разных сервисах |
| logging | Настройки логирования для сервиса. |
| networks | Сеть к которой будет присоденен сервис |
| ports | Маирование портов из контейнера в хост систему |
| volumes | Мапирование папок из хост системы в контенер |
Docker-compose cli
Сборка контенера, имеет смысл если в yaml файле присутствует директива build.
Можно использовать ключ --no-cache, в таком случае игнорируются кэшированные образы.
docker-compose build
Запуск приложения. В запуск можно добавить --build ключ, тогда docker-compose перебилдит незакешированные шаги.
docker-compose up
Docker-compose останавливает и удаляет запущенные контенеры, согласно yaml конфигурации.
То есть выполянется 2 команды docker: docker stop и docker rm
docker-compose stop
Отображает запущенные контейнеры принадлежащие yaml файлу.
docker-compose ps
ВНИМАНИЕ! Выполенение команда, в отличии от
docker, должно быть с в папке с yaml файлом. Командаdockerможет выполнятся из любой папки.