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
может выполнятся из любой папки.