Docker.guide

Контейнеризация · DevOps · Cloud

Docker — современная платформа контейнеризации

Упаковывайте приложения вместе со всеми зависимостями, разворачивайте их за секунды и масштабируйте одинаково на ноутбуке разработчика, в CI и в production.

  • 1 образдля всех окружений
  • секундына запуск контейнера
  • OCIоткрытый стандарт

Основы

Что такое Docker

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

Представьте морской контейнер: неважно, что внутри и на каком судне его везут — у него стандартный размер и крепления. Так и с Docker: контейнер одинаково запускается на ноутбуке, тестовом сервере и в облаке. Фраза «а у меня работает» перестаёт быть проблемой.

В отличие от виртуальной машины, контейнер не содержит собственного ядра ОС — он использует ядро хоста. Поэтому контейнеры стартуют за доли секунды и занимают мегабайты, а не гигабайты.

Виртуальная машина

Приложение
Библиотеки
Гостевая ОС
Гипервизор
Хост

Контейнер

Приложение
Библиотеки
Docker Engine
Хост и общее ядро

Экосистема

Возможности

Всё, что нужно, чтобы пройти путь от первой строки Dockerfile до работающего сервиса.

Containerization

Изолированные процессы со своей файловой системой, сетью и лимитами ресурсов на базе namespaces и cgroups.

Docker Images

Неизменяемые слоистые образы: общие слои кэшируются и переиспользуются, сборка и загрузка проходят быстрее.

Docker Compose

Описание многосервисного приложения в одном YAML-файле и запуск всего стека одной командой.

Container Networking

Bridge, host и overlay-сети, встроенный DNS по именам сервисов и публикация портов наружу.

Volumes

Постоянное хранение данных вне жизненного цикла контейнера: базы данных, загрузки, кэши.

CI/CD Integration

Сборка и тестирование в одинаковых контейнерах в GitHub Actions, GitLab CI, Jenkins и других системах.

Docker Registry

Хранение и распространение образов через Docker Hub или собственный приватный реестр.

Production Deployment

Healthcheck, политики перезапуска, лимиты ресурсов и запуск в оркестраторах — Swarm или Kubernetes.

Зачем это нужно

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

Изоляция

Каждый сервис получает свои зависимости и версии библиотек. Обновление одного приложения не ломает другое, а ограничения CPU и памяти защищают соседей.

Переносимость

Образ, собранный один раз, запускается на любой машине с Docker: Linux, Windows, macOS, облачные платформы и on-premise.

Скорость развёртывания

Контейнеры стартуют за секунды. Новую версию можно выкатить и откатить, просто сменив тег образа.

Повторяемость окружений

Dockerfile и Compose-файл описывают окружение как код: разработка, тесты и production собираются из одних и тех же инструкций.

Жизненный цикл

Как работает Docker

От исходного кода до работающего сервиса — пять шагов.

  1. Developerпишет код
  2. Dockerfileописывает сборку
  3. Imagedocker build
  4. Containerdocker run
  5. Deploymentсервер или облако
Dockerfile
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["python", "app.py"]
compose.yaml
services:
  web:
    build: .
    ports: ["8000:8000"]
    depends_on: [db]
  db:
    image: postgres:16
    volumes: ["pgdata:/var/lib/postgresql/data"]
volumes:
  pgdata:

Шпаргалка

Примеры команд

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

docker --version

Версия установленного Docker

docker ps

Список запущенных контейнеров (-a — всех)

docker images

Локальные образы и их размер

docker compose up -d

Поднять все сервисы из compose.yaml в фоне

docker logs -f container_name

Следить за логами контейнера в реальном времени

docker build -t app:1.0 .

Собрать образ из Dockerfile в текущем каталоге