Описание
Docker-compose позволяет управлять инфраструктурой контейнеров, он предоставляет возможность простого запуска многоконтейнерных приложений.
Вместо того, чтобы запускать контейнеры по отдельности и указывать большое количество параметров при запуске, их можно указать в файле. Файл должен называться docker-compose.yaml. С его помощью можно одной командой запустить большое количество контейнеров с нужными параметрами. Позволяет определить контейнерное приложение, состоящее из набора контейнеров, которые должны работать вместе.
Конфигурацию можно разделить на несколько файлов, например docker-compose.yaml, docker-compose-1.yaml, docker-compose-2.yaml. При этом в docker-compose.yaml будут содержатся общие настройки, а в других файлах различия.
Если установлен Docker-desktop, docker-compose устанавливается вместе с ним, если устанавливается консольная версия docker-ce, то docker-compose нужно установить отдельно.
Установка Docker-compose
добавление репозитория со свежей версией docker
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repoустановка docker-compose
yum install docker-compose-plugin
добавление ключа репозитория
mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpgдобавление репозитория
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/nullустановка docker-compose
apt install update apt install docker-compose
Команды Docker-compose
- docker compose version вывод версии
- docker compose build сборка образа перед запуском, работает если в файле docker-compose.yaml указана инструкция build
- docker compose up запуск контейнеров, при этом файл обязательно должен называться docker-compose.yaml и быть в каталоге из которого выполняется команда
- docker compose up -d запуск контейнеров в фоне
- docker compose -f docker/docker-compose.yaml up запуск контейнеров с указанием пути к файлу
- docker compose -f docker-compose.1.yaml -f docker-compose.2.yaml up запуск контейнеров из нескольких файлов
- docker compose down остановить и удалить все контейнеры
- docker compose -f docker/docker-compose.yaml down остановить и удалить контейнеры, которые были созданы по файлу
- docker compose ps вывод списка запущенных контейнеров
- docker compose stop остановить все контейнеры
- docker compose start запустить все ранее остановленные контейнеры
- docker compose run --rm test-nginx запустить один из контейнеров, описанных в файле
- docker compose run --rm db psql -h db -U postgres dbname запуск psql в одном из контейнеров
Инструкции файла docker-compose.yaml
Полный список есть в документации.
image
Указывает образ, с которого будет запускаться контейнер.
image: nginx
build
build:
context: ./test-dockerfile #указывается каталог с dockerfile, можно указать или относительный или абсолютный путь
blkio_config
Параметры, определяющие лимиты ввода-вывода для контейнера.device_read_bps, device_write_bps - устанавливает ограничение скорости для операций чтения/записи на указанном устройстве в килобайтах или мегабайтах. Каждый элемент в списке должен иметь два ключа:
path - путь к устройству;
rate - скорость в килобайтах или мегабайтах.
device_read_iops, device_write_iops - устанавливает ограничение в операциях в секунду для операций чтения/записи на данном устройстве. Каждый элемент в списке должен иметь два ключа:
path - путь к устройству;
rate - число, определяющее допустимое количество операций в секунду.
weight - устанавливает долю полосы пропускания, выделенной для контейнера, по сравнению с другими контейнерами. Принимает целое значение от 10 до 1000, по умолчанию используется значение 500.
weight_device - устанавливает долю полосы пропускания, по устройствам. Принимает целое значение от 10 до 1000, по умолчанию используется значение 500. Каждый элемент в списке должен иметь два ключа:
path - путь к устройству;
rate - число, определяющее долю полосы пропускания.
blkio_config:
weight: 300
weight_device:
- path: /dev/sda
weight: 400
device_read_bps:
- path: /dev/sdb
rate: '12mb'
device_read_iops:
- path: /dev/sdb
rate: 120
device_write_bps:
- path: /dev/sdb
rate: '1024k'
device_write_iops:
- path: /dev/sdb
rate: 30
command
Переопределяет команду по умолчанию, объявленную образом контейнера, то есть изменяет CMD, которая записана в образе.
command: python app.py
или
command: ["python", "app.py"]
container_name
Указывает пользовательское имя контейнера, а не сгенерированное имя по умолчанию.
container_name: container-name
depends_on
Определяет зависимости запуска и завершения работы между контейнерами.
services:
web:
build: .
depends_on:
- db
- redis
redis:
image: redis
db:
image: postgres
environment
Определяет переменные среды, передаваемые в контейнер.
environment:
RACK_ENV: development
SHOW: "true"
USER_INPUT:
Или
environment:
- RACK_ENV=development
- SHOW=true
- USER_INPUT
hostname
Объявляет пользовательское имя хоста, которое будет использоваться для контейнера.
labels
Добавляет метаданные к контейнеру.
labels:
com.example.description: "Accounting webapp"
com.example.department: "Finance"
com.example.label-with-empty-value: ""
Или
labels:
- "com.example.description=Accounting webapp"
- "com.example.department=Finance"
- "com.example.label-with-empty-value"
links
Определяет сетевую ссылку на контейнеры.
web:
links:
- db
- db:database
- redis
networks
Определяет сети, к которым подключены контейнеры. Docker-compose самостоятельно создает сеть и подключает к ней контейнеры.
services:
some-service:
networks:
- some-network
- other-network
ipv4_address, ipv6_address
Указывает статический ip-адрес контейнера.
services:
frontend:
image: awesome/webapp
networks:
front-tier:
ipv4_address: 172.16.238.10
ipv6_address: 2001:3984:3989::10
networks:
front-tier:
ipam:
driver: default
config:
- subnet: "172.16.238.0/24"
- subnet: "2001:3984:3989::/64"
mac_address
Задает mac-адрес контейнера.
ports
Открывает порты контейнеров для основной системы.
ports:
- "3000"
- "8080:80"
restart
Определяет политику, которая будет применятся при выключении контейнера.
restart: "no" #не перезапускать
restart: always #перезапускать всегда
restart: on-failure #
restart: unless-stopped #
user
Переопределяет пользователя, используемого для запуска процесса контейнера. По умолчанию используется root.
volumes
Определяет том для подключения к контейнеру.
services:
frontend:
image: awesome/webapp
volumes:
- type: volume
source: test-volume
target: /etc/test-volume-dir
volumes:
test-volume:
Примеры файла docker-compose.yaml
services:
test-nginx:
image: nginx
test-apache:
image: httpd
services:
test-nginx:
image: nginx
ports:
- "8080:80"
networks:
- test-network
test-apache:
image: httpd
ports:
- "8081:80"
networks:
- test-network
volumes:
- test-volume:/etc/test-volume-dir
test-my_image:
build: #указывается если нужно запустить контейнер предварительно собрав его образ из dockerfile
context: /home/test-dockerfile #указывается каталог с dockerfile, можно указать или относительный или абсолютный путь
networks:
- test-network
volumes:
test-volume:
networks:
test-network: {}