Гладиаторы - меню
Гладиаторы - меню

Docker Compose и основы работы с контейнерами

Контейнеризация стала одним из ключевых подходов в современной разработке и эксплуатации IT-систем. Она позволяет запускать приложения в изолированных средах, быстро переносить их между серверами и упрощать процесс развертывания.

Одним из самых популярных инструментов для работы с контейнерами является Docker. Однако в реальных проектах приложение редко состоит из одного контейнера. Чаще всего оно включает несколько компонентов: веб-сервер, backend-сервис, базу данных, кэш и другие сервисы.

Для управления такими системами используется Docker Compose — инструмент, который позволяет запускать и настраивать несколько контейнеров одновременно. В этой статье разберем основы работы с Docker Compose, структуру проекта и принципы взаимодействия контейнеров.


Содержание:

Команда редакторов "Гладиаторы ИБ"
Дата публикации: 11.03.2026
Время прочтения 8 минут

Для чего нужен Docker Compose

Docker Compose — это инструмент для управления многоконтейнерными приложениями.

В отличие от обычного Docker, который управляет отдельными контейнерами, Docker Compose позволяет описать сразу весь проект — включая сервисы, сети и зависимости — в одном конфигурационном файле.

Основная идея заключается в следующем:
  • вся инфраструктура приложения описывается в файле docker-compose.yml
  • каждый компонент приложения определяется как отдельный сервис
  • все сервисы можно запустить одной командой

Например, типичное веб-приложение может состоять из:
  • веб-сервера (Nginx)
  • backend-приложения
  • базы данных
  • системы кеширования

Docker Compose позволяет собрать эту инфраструктуру и запустить ее одной командой:
docker-compose up

Такой подход значительно упрощает:
  • разработку
  • тестирование
  • локальное развертывание
  • управление зависимостями между сервисами

Поэтому Docker Compose широко используется разработчиками, DevOps-инженерами и специалистами по инфраструктуре.

Что такое YAML

Конфигурация Docker Compose хранится в файле docker-compose.yml. Он написан в формате YAML.

YAML (YAML Ain't Markup Language) — это простой и человекочитаемый формат данных, который используется для конфигурационных файлов.

Главная особенность YAML — использование отступов для описания структуры данных.

Благодаря этому файл легко читается и позволяет описывать сложные конфигурации.

Простейший пример структуры docker-compose.yml:
version: '3.8'
services:
  web:
    image: nginx
    ports:
      - "80:80"

В этом примере:
  • version — версия формата Docker Compose
  • services — список сервисов проекта
  • web — имя сервиса
  • image — образ контейнера
  • ports — проброс портов между хостом и контейнером

YAML широко используется не только в Docker Compose, но и в других системах:
  • Kubernetes
  • CI/CD инструментах
  • системах автоматизации инфраструктуры

Создание проекта для запуска в Docker Compose

Рассмотрим простой пример проекта, в котором используются два контейнера:
  • Nginx — веб-сервер
  • PHP — backend-приложение

Такая связка часто используется в веб-разработке.

Структура проекта

Пример структуры проекта:
project/
├── docker-compose.yml
├── nginx/
│   ├── nginx.conf
│   └── html/
└── php/
    └── index.php

Контейнер Nginx

Для работы веб-сервера используется официальный образ Nginx.

В docker-compose.yml сервис может быть описан следующим образом:
services:
  nginx:
    image: nginx:latest
    container_name: nginx
    ports:
      - "80:80"
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf
      - ./nginx/html:/var/www/html
    depends_on:
      - php
    networks:
      - app_network

Здесь:
  • ports — пробрасывает порт 80 контейнера на порт 80 хоста
  • volumes — подключает локальные файлы к контейнеру
  • depends_on — указывает зависимость от PHP-сервиса
  • networks — подключает контейнер к сети проекта

Контейнер PHP

Backend-логика приложения выполняется в контейнере PHP.

Описание сервиса может выглядеть так:
services:
  php:
    image: php:8.2-fpm
    container_name: php
    volumes:
      - ./php:/var/www/html
    networks:
      - app_network

Контейнер использует PHP-FPM, который обрабатывает запросы от веб-сервера.

Итоговый docker-compose.yml

Полная конфигурация может выглядеть следующим образом:

version: '3.8'
services:

  nginx:
    image: nginx:latest
    container_name: nginx
    ports:
      - "80:80"
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf
      - ./nginx/html:/var/www/html
    depends_on:
      - php
    networks:
      - app_network

  php:
    image: php:8.2-fpm
    container_name: php
    volumes:
      - ./php:/var/www/html
    networks:
      - app_network

networks:
  app_network:
    driver: bridge

После запуска проекта по адресу http://localhost будет доступно приложение.

Работа с контейнерами

Docker Compose предоставляет набор команд для управления контейнерами.

Сборка контейнеров
Если используются Dockerfile, сначала необходимо собрать образы:
docker-compose build

Запуск проекта
Запуск всех сервисов выполняется командой:
docker-compose up
Для запуска в фоновом режиме используется флаг:
docker-compose up -d

Остановка контейнеров
Чтобы остановить сервисы без удаления контейнеров:
docker-compose stop

Полное удаление контейнеров
Для удаления контейнеров, сетей и ресурсов используется команда:
docker-compose down

Выполнение команд внутри контейнера

Иногда требуется выполнить команду внутри работающего контейнера.

Для этого используется:
docker-compose exec <service_name> <command>

Например:
docker-compose exec php bash

Эта команда откроет терминал внутри контейнера PHP.

Просмотр логов
Для анализа работы сервисов можно посмотреть логи:
docker-compose logs nginx

Это полезно при диагностике ошибок или анализе работы приложения.

Работа с сетью

Контейнеры внутри Docker Compose могут взаимодействовать друг с другом через виртуальные сети.

Пользовательские сети

В docker-compose.yml можно определить собственную сеть:

networks:
  app_network:
    driver: bridge

После этого сервисы можно подключить к ней:

services:
  nginx:
    networks:
      - app_network

Коммуникация между контейнерами

Docker Compose автоматически создает внутренний DNS для сервисов.

Это означает, что контейнеры могут обращаться друг к другу по имени сервиса.

Например:
php:9000

Здесь php — имя сервиса, указанное в docker-compose.yml.

Благодаря этому backend-контейнер может взаимодействовать с базой данных, а веб-сервер — с приложением.

Изоляция сетей

Для повышения безопасности можно создавать несколько сетей.

Например:
  • отдельная сеть для базы данных
  • отдельная сеть для backend-сервисов
  • отдельная сеть для внешнего доступа

Это позволяет ограничить взаимодействие между компонентами инфраструктуры.

Заключение

Docker Compose значительно упрощает управление контейнерными приложениями. С его помощью можно описать всю инфраструктуру проекта в одном файле и запускать несколько сервисов одной командой.

В статье мы рассмотрели основные принципы работы Docker Compose:
  • зачем используется этот инструмент;
  • что представляет собой формат YAML;
  • как создать проект с несколькими контейнерами;
  • как управлять сервисами и контейнерами;
  • как настраивать сети между компонентами приложения.

В современных проектах контейнеризация стала стандартом разработки и эксплуатации систем.

Понимание Docker Compose помогает быстрее разворачивать приложения, управлять инфраструктурой и упрощать процессы разработки и тестирования.
Показать еще

Хочу составить стратегию безопасности для компании!

Нажимая на кнопку, вы даете согласие на обработку персональных данных и соглашаетесь c политикой конфиденциальности