DevOps и инфраструктура

Учебник Docker для начинающих

38 уроков · 10 разделов · бесплатно, без регистрации

Docker — инструмент, который упаковывает приложение вместе со всем его окружением в переносимый контейнер и запускает его одинаково на ноутбуке разработчика, на сервере и в облаке. Этот курс проведёт вас от первого docker run до полноценного многоконтейнерного стека на Docker Compose.

Вы научитесь запускать и останавливать контейнеры, собирать собственные образы через Dockerfile, сохранять данные в томах, связывать контейнеры по сети и поднимать приложение вместе с базой данных одной командой. Курс рассчитан на разработчиков, которые знают командную строку, но ещё не работали с контейнерами. Все примеры практические: контейнеризация веб-приложения, запуск nginx и PostgreSQL.

Курс «Docker» состоит из 10 разделов и 38 уроков: Введение в контейнеризацию, Образы и контейнеры, Создание образов с Dockerfile, Данные и тома, Сети и порты, Docker Compose, Оптимизация образов, Docker под капотом, Docker в продакшене и Реестры, безопасность и CI/CD. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.

Программа курса

  1. 1 Введение в контейнеризацию

    1. Какую проблему решает Docker

      Почему «работает у меня на машине» — это боль, и как контейнеризация решает проблему различий окружений между разработкой и продакшеном.

    2. Контейнер против виртуальной машины

      Чем контейнер отличается от виртуальной машины: общее ядро ОС, лёгкость, скорость запуска и когда что выбирать.

    3. Ключевые понятия: образ, контейнер, реестр

      Образ, контейнер и реестр — три базовых понятия Docker. Как они связаны и чем образ отличается от контейнера.

    4. Установка Docker и первый запуск

      Как установить Docker Desktop или Docker Engine, проверить версию и запустить hello-world для проверки работоспособности.

  2. 2 Образы и контейнеры

    1. Запуск контейнера: docker run и флаги

      Команда docker run и ключевые флаги: -d для фона, -it для интерактива, --name для имени, -p для проброса портов.

    2. Жизненный цикл контейнера

      Управление контейнерами: docker ps для списка, stop и start для остановки и запуска, rm для удаления.

    3. Образы и Docker Hub

      Работа с образами: docker images для списка, docker pull для скачивания, теги версий и официальные образы Docker Hub.

    4. Вход в контейнер и логи

      Отладка контейнеров: docker exec для запуска команд внутри и входа в оболочку, docker logs для просмотра вывода.

  3. 3 Создание образов с Dockerfile

    1. Что такое Dockerfile

      Dockerfile — текстовый рецепт сборки образа. Зачем он нужен, как выглядит и чем отличается от готового образа.

    2. Основные инструкции Dockerfile

      Разбор инструкций Dockerfile: FROM, WORKDIR, COPY, RUN, CMD, EXPOSE и ENV — что делает каждая и когда применяется.

    3. Сборка образа: docker build

      Как собрать образ командой docker build -t, что такое контекст сборки и как запустить контейнер из своего образа.

    4. Слои, кэширование и .dockerignore

      Почему образ состоит из слоёв, как работает кэш сборки, почему важен порядок инструкций и зачем нужен .dockerignore.

  4. 4 Данные и тома

    1. Почему данные в контейнере эфемерны

      Записываемый слой контейнера исчезает вместе с ним. Почему данные нужно выносить из контейнера наружу.

    2. Именованные тома

      Именованные тома Docker: создание через docker volume, подключение флагом -v и хранение данных PostgreSQL между перезапусками.

    3. Bind mounts и выбор подхода

      Bind mounts — монтирование папки хоста в контейнер. Чем отличаются от томов и когда что использовать.

  5. 5 Сети и порты

    1. Проброс портов наружу

      Как флаг -p публикует порт контейнера на хосте, формат host:container и публикация нескольких портов.

    2. Сети Docker и драйвер bridge

      Сети Docker, драйвер bridge по умолчанию, создание пользовательской сети через docker network и зачем она нужна.

    3. Связь контейнеров по имени

      Как контейнеры в одной сети находят друг друга по имени: встроенный DNS вместо IP-адресов на примере приложения и PostgreSQL.

  6. 6 Docker Compose

    1. Зачем нужен Docker Compose

      Docker Compose описывает многоконтейнерное приложение в одном файле, заменяя длинные команды docker run одной командой запуска.

    2. Структура файла compose.yaml

      Разбор compose.yaml: services, image, ports, volumes, environment и depends_on — что задаёт каждый ключ.

    3. Запуск и управление стеком

      Команды Docker Compose: up для запуска стека, флаг -d, down для остановки, logs и ps для наблюдения за сервисами.

    4. Пример: приложение и база данных

      Полный пример Docker Compose: веб-приложение, PostgreSQL и nginx в одном compose.yaml с сетью, томами и зависимостями.

  7. 7 Оптимизация образов

    1. Слои и кэширование сборки

      Как работает build cache в Docker: хеширование слоёв, инвалидация COPY/RUN, паттерн COPY package.json до кода для Node, Go и Python, отладка кэша.

    2. Multi-stage builds: маленькие образы

      Multi-stage builds в Docker: несколько стадий FROM, COPY --from, отделение сборки от рантайма. Примеры для Go и Node — образ 1.2GB против 15MB.

    3. Минимальные образы: alpine, distroless, .dockerignore

      Как выбрать базовый образ Docker: alpine, debian-slim или distroless. Уменьшаем размер и поверхность атаки, объединяем RUN и чистим кэш пакетов.

    4. BuildKit: современная сборка

      BuildKit — современный движок сборки Docker: параллельные стадии, secret mounts без утечек в слои, cache mounts для npm и pip, мультиплатформа buildx.

  8. 8 Docker под капотом

    1. Архитектура Docker: демон, клиент, containerd, OCI

      Архитектура Docker: клиент docker, демон dockerd, containerd и runc, что такое OCI-образ и OCI-runtime и почему контейнер — это не виртуалка.

    2. Файловая система образа: слои и overlay

      Файловая система Docker-образа: union-/overlayfs, read-only слои образа и writable-слой контейнера, copy-on-write, docker history и docker diff.

    3. Изоляция: namespaces и cgroups в контексте Docker

      Как Docker изолирует контейнеры: namespaces Linux (pid, net, mnt, uts, ipc, user) разделяют видимость, а cgroups ограничивают CPU и память контейнера.

    4. Что происходит при docker run: жизненный цикл контейнера

      Жизненный цикл контейнера Docker: pull, create, start, PID 1, остановка по SIGTERM и SIGKILL, remove, состояния и почему контейнер «умирает» сразу.

  9. 9 Docker в продакшене

    1. Безопасность: non-root, минимум привилегий

      Как закалить Docker-образ: запуск от non-root через USER, read-only файловая система, drop capabilities и no-new-privileges — оборонительные практики.

    2. Надёжность: healthcheck, restart policy, graceful shutdown

      Надёжность контейнеров: HEALTHCHECK, restart policy always/unless-stopped, обработка SIGTERM, роль PID 1, зомби-процессы и tini/--init.

    3. Ресурсы и логи в проде

      Лимиты --memory и --cpus, OOM-killer, драйверы логирования json-file и journald, ротация логов и наблюдение через docker stats.

    4. Конфигурация и секреты

      Конфигурация снаружи образа по 12-factor: env против файлов, почему секреты не в образе и не в ENV, docker secrets, тома и .env.

  10. 10 Реестры, безопасность и CI/CD

    1. Реестры образов: Docker Hub и приватные

      Реестр образов Docker: push, pull, login, теги и версионирование, почему latest — антипаттерн, как поднять приватный registry и настроить retention.

    2. Сканирование уязвимостей образов

      Сканирование Docker-образов на уязвимости: trivy и docker scout, откуда берутся CVE, как читать отчёт, обновление базовых образов и зачем нужен SBOM.

    3. Сборка образов в CI/CD

      Сборка Docker-образов в CI/CD: build и push в GitHub Actions и GitLab CI, кэш слоёв в пайплайне, тегирование по коммиту и версии, build matrix под платформы.

    4. От Compose к оркестрации

      От Docker Compose к оркестрации: ограничения одного хоста, Compose в небольшом проде, краткий обзор Docker Swarm и зачем нужен Kubernetes — мостик без глубокого k8s.