Этап 3 из 18 · ≈ 10 ч

Docker

Основа с Junior

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

Контейнер упаковывает сервис со всеми зависимостями: версия Python, библиотеки, системные пакеты. Он одинаково запускается на ноутбуке, в CI и на сервере — конец историям «у меня работает».

FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
USER nobody
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]

Что важно знать

  • Образ — шаблон из слоёв, контейнер — запущенный процесс.
  • Порядок инструкций под кэш: зависимости до кода.
  • Конфигурация и ключи — через переменные окружения или секреты, не в образе.
  • docker compose — локальное окружение из нескольких сервисов.
  • Образы с CUDA для GPU огромные — их собирают отдельно и аккуратно.

Критерии освоения

Junior ≈ 10 ч

  • Пишет Dockerfile для Python-сервиса и запускает его с переменными окружения
  • Поднимает сервис вместе с PostgreSQL через docker compose
  • Объясняет разницу между образом и контейнером, томом и bind mount

Практика. Упаковать FastAPI-сервис с RAG в контейнер, поднять вместе с PostgreSQL и pgvector через compose.

Middle ≈ 8 ч

  • Уменьшает образ multi-stage сборкой и кэшем слоёв зависимостей
  • Настраивает корректную остановку (SIGTERM) и healthcheck
  • Не допускает секретов в образе и запускает контейнер не от root

Практика. Уменьшить образ сервиса минимум вдвое, добавить healthcheck и graceful shutdown, проверить, что незавершённые запросы к модели дорабатывают при остановке.

Проверка знаний

Войдите, чтобы пройти тест: сданный тест отмечает тему пройденной на карте и в ИПР.

Вопросы с собеседований

Смотреть все
Чем контейнер отличается от виртуальной машины?Junior

Виртуальная машина эмулирует оборудование и запускает собственное ядро ОС поверх гипервизора. Контейнер — обычный процесс хоста, изолированный механизмами общего ядра: namespaces (свои PID, сеть, файловая система, пользователи) и cgroups (лимиты CPU и…

Полный разбор
Как написать хороший Dockerfile?Middle

Multi-stage: собирать в образе с компиляторами, а в финальный копировать только артефакт — образ в разы меньше. Порядок инструкций под кэш: сначала то, что меняется редко (зависимости), потом код. Маленький базовый образ (slim, distroless, alpine — с…

Полный разбор
Как в Docker хранить данные и как контейнеры общаются по сети?Junior

Volume — хранилище под управлением Docker, переживает пересоздание контейнера (базы данных). Bind mount — каталог хоста внутрь контейнера (разработка, конфиги). Сеть: в пользовательской bridge-сети контейнеры видят друг друга по имени сервиса; localhost…

Полный разбор
Как устроены слои Docker-образа и почему образ — неизменяемый артефакт?Junior

Образ — стопка слоёв только для чтения, каждый — изменения файловой системы от одной инструкции. Контейнер добавляет сверху тонкий слой для записи. Слои общие между образами и кэшируются. Удаление файла в следующем слое лишь скрывает его — в образе он…

Полный разбор
Как поднять приложение вместе с базой данных через docker compose?Junior

compose.yaml описывает несколько сервисов, их образы или сборку, переменные окружения, порты, тома и зависимости; docker compose up -d поднимает всё одной командой, down — останавливает. Сервисы в одном проекте оказываются в общей сети и находят друг друга по…

Полный разбор
Почему контейнер не останавливается корректно и «висит» до SIGKILL?Middle

Процесс с PID 1 в контейнере особенный: ядро не применяет к нему действия сигналов по умолчанию, и если приложение не обрабатывает SIGTERM, оно его игнорирует. Частая причина — shell-форма CMD java -jar app.jar: PID 1 становится sh, который не передаёт сигнал…

Полный разбор
Как сделать контейнер безопаснее?Middle

Не root внутри контейнера, минимальный образ (меньше пакетов — меньше уязвимостей), сканирование образов в CI (Trivy, Grype), файловая система только для чтения, сброс capabilities, запрет privileged и монтирования docker.sock, секреты не в образе и не в…

Полный разбор

Документация

← Вся карта «ИИ-инженер»

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования