Написание файла Compose
Изучите синтаксис YAML для `docker-compose.yml`, чтобы определять сервисы, сети и тома.
«Написание файла Compose» — бесплатный урок DevOps Bootcamp на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения DevOps Bootcamp, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс DevOps Bootcamp содержит 4 уроков всего.
Файл Compose: чертёж приложения
Добро пожаловать в раздел о написании файлов Docker Compose! Файл docker-compose.yml — это чертёж для описания и запуска приложений Docker, состоящих из нескольких контейнеров.
В нём используется синтаксис YAML для настройки служб, сетей и томов приложения в одном файле.

YAML: краткое повторение
Файлы Docker Compose записываются на YAML (YAML Ain't Markup Language). Это удобный для человека стандарт сериализации данных.
- Пары ключ-значение:
key: value - Списки: элементы начинаются с дефиса (
- item) - Отступы: необходимы для определения структуры и иерархии. Используйте пробелы, а не табуляции!
Ключ `version`
Каждый файл docker-compose.yml начинается с ключа version. Он задаёт версию формата файла Compose и помогает Docker Compose понять, как интерпретировать файл.
Для большинства современных приложений рекомендуется использовать '3.8' или аналогичную версию '3.x'.
version: '3.8'Определение `services`
В разделе services определяются отдельные контейнеры (службы), из которых состоит приложение. Каждая служба представляет один компонент, например веб-сервер или базу данных.
В разделе services перечисляются службы с выбранными Вами именами.
version: '3.8'
services:
web:
# Service configuration goes here
database:
# Another service's configuration`image` и `ports` службы
В определении службы ключ image указывает, какой образ Docker использовать (например, nginx:latest). Ключ ports сопоставляет порты контейнера с портами хоста, обеспечивая внешний доступ.
"80:80"сопоставляет порт 80 хоста с портом 80 контейнера.
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80:80"`volumes` службы
Ключ volumes внутри службы позволяет монтировать пути с хост-компьютера в контейнер или использовать именованные тома для хранения данных с сохранением.
В этом примере локальный каталог ./app монтируется в /usr/src/app внутри контейнера.
version: '3.8'
services:
app:
image: my-node-app
volumes:
- ./app:/usr/src/appПеременные `environment` сервиса
Используйте ключ environment, чтобы передать переменные окружения контейнерам вашего сервиса. Это особенно важно для настроек, которые могут различаться в разных окружениях (например, строк подключения к базе данных).
Переменные можно указать в виде пар «ключ—значение» или в формате списка.
version: '3.8'
services:
backend:
image: my-api
environment:
- DATABASE_URL=postgres://user:pass@host:5432/db
- NODE_ENV=developmentКорневые `networks` и `volumes`
Помимо определения именованных томов и сетей внутри сервисов, вы также можете объявить их на верхнем уровне файла docker-compose.yml.
Это позволяет создавать более организованные и повторно используемые определения для сохранения данных и взаимодействия между контейнерами.
version: '3.8'
services:
# ... service definitions ...
networks:
my_app_network:
# custom network configuration
volumes:
db_data:
# named volume configurationОбъединим всё вместе
Ниже приведён небольшой пример, объединяющий изученные концепции. В нём определены веб-сервис и сервис базы данных, используются образ, порты и именованный том.
Обратите внимание, как отступы создают структуру.
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- web_content:/usr/share/nginx/html
db:
image: postgres:13
environment:
- POSTGRES_DB=mydb
- POSTGRES_USER=user
- POSTGRES_PASSWORD=secret
volumes:
web_content:
db_data:Проверка файла Compose
Какой из следующих фрагментов YAML корректно определяет сервис Docker Compose с именем «api», использующий образ «myapi:1.0» и открывающий порт контейнера 3000 на порту хоста 8080?
Повторение: основные элементы файла Compose
Отличная работа! Вы изучили основы написания файла docker-compose.yml.
- Он начинается с
version. servicesопределяет компоненты вашего приложения.- Каждый сервис использует
image, может открыватьports, использоватьvolumesдля сохранения данных и задавать переменныеenvironment. - Корневые
networksиvolumesпозволяют выполнять расширенную настройку.
Освоение этой структуры YAML — ключ к оркестрации приложений с несколькими контейнерами!
Часто задаваемые вопросы
Урок «Написание файла Compose» бесплатный?
Да — полный текст урока «Написание файла Compose» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс DevOps Bootcamp, подпишись на CoddyKit PRO. Курс DevOps Bootcamp содержит 4 уроков всего.
Чему я научусь в уроке «Написание файла Compose»?
Изучите синтаксис YAML для `docker-compose.yml`, чтобы определять сервисы, сети и тома. Ты практикуешь DevOps Bootcamp с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать DevOps Bootcamp?
Предыдущий опыт не требуется. DevOps Bootcamp на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Написание файла Compose»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке DevOps Bootcamp?
Да. Каждый урок DevOps Bootcamp включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Что такое Docker Compose?
- Написание файла Compose
- Развёртывание приложений из нескольких сервисов
- Переменные окружения и файлы .env