> Docker: Просто и удобно

VARCKIN@BLOG:~$

Что за зверь этот ваш Docker?

Docker — это открытая платформа для разработки, доставки и запуска приложений в контейнерах. Контейнеры позволяют упаковать приложение вместе со всеми его зависимостями и гарантировать его работу в любой среде: на локальной машине, сервере или в облаке.

Компоненты Docker.

  • Docker Engine — основной компонент, запускающий и управляющий контейнерами.

  • Docker Images — образы, из которых создаются контейнеры.

  • Docker Containers — изолированные экземпляры приложений.

  • Docker Hub — облачный реестр для хранения и распространения образов.

Отличия от виртуальной машины.

Критерий Контейнер (Docker) Виртуальная машина
Загрузка Быстрая (секунды) Медленная (минуты)
Ресурсы Минимальные (делится ядром ОС) Требует отдельной ОС
Изоляция Процессная, внутри ОС Полная, включая ОС
Портативность Очень высокая Средняя
Примеры применения Микросервисы, DevOps, CI/CD Legacy-приложения, монолиты

Что за зверь Docker Compose?

Docker Compose — это инструмент для определения и управления многоконтейнерными Docker-приложениями с использованием YAML-файлов. Он позволяет запускать несколько связанных контейнеров одной командой.

Преимущества.

  • Упрощение многоконтейнерных приложений.

  • Конфигурация в одном файле (docker-compose.yml).

  • Удобство в тестировании, CI и разработке.

  • Возможность задания зависимостей между сервисами.

Архитектура Docker.

Компоненты:

  • Client (CLI) — интерфейс командной строки, через который пользователь взаимодействует с Docker Engine.

  • Docker Daemon (dockerd) — фоновый процесс, который управляет контейнерами.

  • Docker Registry — хранилище образов (Docker Hub или локальный registry).

  • Container Runtime — механизм запуска контейнеров (runc, containerd).

Принцип работы:

  1. Пользователь пишет Dockerfile.

  2. Docker Engine строит образ.

  3. Образ помещается в реестр или запускается как контейнер.

  4. Контейнер выполняется изолированно от хоста и других контейнеров.

Команды Docker и Docker Compose.

Управление образами (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 Без подтверждения

Расширенные возможности и доп. настройки Docker.

  • volumes: — для хранения данных вне контейнера.

  • networks: — для изоляции и связи между сервисами.

  • .env-файлы: - Docker Compose поддерживает подстановку переменных окружения из .env

.env
DB_USER=admin
DB_PASS=secret

.yaml
environment:
  - POSTGRES_USER=${DB_USER}
  - POSTGRES_PASSWORD=${DB_PASS}

Преимущества и ограничения.

Преимущества:

  1. Быстрый старт.
  2. Унификация окружений.
  3. Легкость в тестировании.
  4. Гибкость масштабирования.

Ограничения:

  1. Не полноценный оркестратор (в отличие от Kubernetes).
  2. Безопасность требует настройки.
  3. Не подходит для сложных HA-архитектур.

Сравнение Docker Compose и Kubernetes.

Характеристика Docker Compose Kubernetes
Простота запуска Очень высокая Средняя
Поддержка масштабирования Ограниченная Расширенная
Обратная совместимость Хорошая Частичная
Использование в DevOps Да Да
Подходит для продакшн Частично (Dev/Test/Prod для средних проектов) Да (Enterprise)

Вот и конец.

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

Для малых и средних проектов Docker Compose — отличный выбор благодаря своей простоте и читаемости. В более сложных случаях (кластеризация, балансировка нагрузки) стоит рассматривать Kubernetes или Docker Swarm.

AUTHOR: XYZ
CREATED: 2025-05-28
👁 VIEWS: 47
📁 CATEGORY: РАЗРАБОТКА
🏷 TAGS: #DOCKER

Copyright © 2025 Markus Varckin. Все права защищены. Скачивание, копирование и редактирование запрещено!