Docker — это открытая платформа для разработки, доставки и запуска приложений в контейнерах. Контейнеры позволяют упаковать приложение вместе со всеми его зависимостями и гарантировать его работу в любой среде: на локальной машине, сервере или в облаке.
Docker Engine — основной компонент, запускающий и управляющий контейнерами.
Docker Images — образы, из которых создаются контейнеры.
Docker Containers — изолированные экземпляры приложений.
Docker Hub — облачный реестр для хранения и распространения образов.
Критерий | Контейнер (Docker) | Виртуальная машина |
---|---|---|
Загрузка | Быстрая (секунды) | Медленная (минуты) |
Ресурсы | Минимальные (делится ядром ОС) | Требует отдельной ОС |
Изоляция | Процессная, внутри ОС | Полная, включая ОС |
Портативность | Очень высокая | Средняя |
Примеры применения | Микросервисы, DevOps, CI/CD | Legacy-приложения, монолиты |
Docker Compose — это инструмент для определения и управления многоконтейнерными Docker-приложениями с использованием YAML-файлов. Он позволяет запускать несколько связанных контейнеров одной командой.
Упрощение многоконтейнерных приложений.
Конфигурация в одном файле (docker-compose.yml
).
Удобство в тестировании, CI и разработке.
Возможность задания зависимостей между сервисами.
Client (CLI) — интерфейс командной строки, через который пользователь взаимодействует с Docker Engine.
Docker Daemon (dockerd) — фоновый процесс, который управляет контейнерами.
Docker Registry — хранилище образов (Docker Hub или локальный registry).
Container Runtime — механизм запуска контейнеров (runc, containerd).
Пользователь пишет Dockerfile.
Docker Engine строит образ.
Образ помещается в реестр или запускается как контейнер.
Контейнер выполняется изолированно от хоста и других контейнеров.
Управление образами (Images):
Команда | Описание | Пример |
---|---|---|
docker build |
Сборка образа из Dockerfile | docker build -t myapp:1.0 . |
docker pull |
Загрузка образа из Docker Hub или другого registry | docker pull nginx:latest |
docker push |
Загрузка собственного образа в реестр | docker push myuser/myapp:1.0 |
docker images |
Список локальных образов | docker images |
docker rmi |
Удаление образа | docker rmi nginx:latest |
Управление контейнерами (Containers):
Команда | Описание | Пример |
---|---|---|
docker run |
Запуск контейнера | docker run -d -p 8080:80 nginx |
docker start |
Запуск ранее остановленного контейнера | docker start my_container |
docker stop |
Остановка контейнера | docker stop my_container |
docker restart |
Перезапуск контейнера | docker restart my_container |
docker rm |
Удаление контейнера | docker rm my_container |
docker ps |
Список запущенных контейнеров | docker ps |
docker ps -a |
Все контейнеры (включая остановленные) | docker ps -a |
Популярные флаги команды docker run
:
-d
— запуск в фоне;
-p
— проброс портов (HOST:CONTAINER);
--name
— имя контейнера;
-v
— монтирование тома;
--rm
— удалить после остановки;
--env
или -e
— передача переменных окружения.
Работа внутри контейнера:
Команда | Описание | Пример |
---|---|---|
docker exec |
Выполнение команды в работающем контейнере | docker exec -it my_container bash |
docker attach |
Присоединение к STDIN/STDOUT контейнера | docker attach my_container |
docker logs |
Просмотр логов | docker logs -f my_container |
docker cp |
Копирование файлов из/в контейнер | docker cp config.yml my_container:/app/config.yml |
Информация, сети и тома:
Команда | Описание | Пример |
---|---|---|
docker inspect |
Полная информация о контейнере | docker inspect my_container |
docker network ls |
Список сетей Docker | docker network ls |
docker volume ls |
Список томов | docker volume ls |
docker stats |
Мониторинг ресурсов | docker stats |
Пример как выглядит простой docker-compose.yml:
# Версию можно не указывать в новых версия.
version: '3.8'
services:
web:
image: nginx
ports:
- "8080:80"
Основные команды Docker Compose:
Команда | Описание |
---|---|
docker-compose up |
Запуск всех сервисов |
docker-compose up -d |
Запуск в фоне |
docker-compose down |
Остановка и удаление контейнеров, сетей и томов |
docker-compose build |
Сборка сервисов из Dockerfile |
docker-compose restart |
Перезапуск всех контейнеров |
docker-compose stop |
Остановка, без удаления |
docker-compose start |
Запуск после остановки |
Диагностика и отладка:
Команда | Описание | Пример |
---|---|---|
docker-compose logs |
Просмотр логов всех контейнеров | docker-compose logs |
docker-compose logs -f |
Потоковый вывод логов | docker-compose logs -f web |
docker-compose exec |
Выполнение команды внутри контейнера | docker-compose exec web bash |
docker-compose ps |
Список запущенных сервисов | docker-compose ps |
docker-compose config |
Проверка и отладка YAML-конфигурации | docker-compose config |
Доп. пример от меня:
Переменные окружения .env файл:
.env
PORT=8080
В docker-compose.yml:
.yaml
ports:
- "${PORT}:80"
Отдельно хочу подчеркнуть команду docker system prune:
Параметр | Поведение |
---|---|
docker system prune |
Стандартная очистка неиспользуемых ресурсов (образы, контейнеры и кэш) |
--volumes |
Удаляет тома |
--all |
Удаляет также образы с тегами |
--force |
Без подтверждения |
volumes:
— для хранения данных вне контейнера.
networks:
— для изоляции и связи между сервисами.
.env-файлы:
- Docker Compose поддерживает подстановку переменных окружения из .env
.env
DB_USER=admin
DB_PASS=secret
.yaml
environment:
- POSTGRES_USER=${DB_USER}
- POSTGRES_PASSWORD=${DB_PASS}
Преимущества:
Ограничения:
Характеристика | Docker Compose | Kubernetes |
---|---|---|
Простота запуска | Очень высокая | Средняя |
Поддержка масштабирования | Ограниченная | Расширенная |
Обратная совместимость | Хорошая | Частичная |
Использование в DevOps | Да | Да |
Подходит для продакшн | Частично (Dev/Test/Prod для средних проектов) | Да (Enterprise) |
Docker и Docker Compose упрощает разработку, тестирование и развертывание приложений. Эти инструменты позволяют изолировать окружения, минимизировать конфликты зависимостей и повысить воспроизводимость ПО.
Для малых и средних проектов Docker Compose — отличный выбор благодаря своей простоте и читаемости. В более сложных случаях (кластеризация, балансировка нагрузки) стоит рассматривать Kubernetes или Docker Swarm.
Copyright © 2025 Markus Varckin. Все права защищены. Скачивание, копирование и редактирование запрещено!