Что такое Docker образ и зачем он нужен
Что проверяют
Понимаете ли вы, чем описано окружение вашей модели. В задачах с данными вопрос не про контейнеры вообще, а про воспроизводимость: получит ли коллега через полгода тот же результат и поедет ли обучение с ноутбука на машину с GPU без ручной пересборки окружения.
Как отвечать
Образ это неизменяемый набор слоёв файловой системы плюс метаданные запуска: команда, переменные, рабочий каталог. Контейнер это запущенный экземпляр образа с тонким изменяемым слоем сверху. Собирают образ по Dockerfile, слои кэшируются и переиспользуются между сборками.
Зачем он в конвейере данных: окружение перестаёт быть устной легендой про версии библиотек; обучение и инференс едут в кластер одним артефактом; откат сводится к запуску прежнего образа; проекты с несовместимыми версиями фреймворков спокойно живут рядом.
Различие образа и контейнера имеет прямое следствие: всё, что процесс записал внутрь контейнера, исчезает при пересоздании, поэтому чекпоинты, логи обучения и артефакты пишут в том или во внешнее хранилище.
Порядок инструкций важен: сначала копируют файл зависимостей и ставят их, потом код. Тогда правка кода не пересобирает тяжёлый слой с библиотеками.
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .Где спотыкаются
Говорят, что образ гарантирует одинаковое поведение везде. Он фиксирует файлы, но не железо: сборке с CUDA нужен совместимый драйвер на хосте, а образ под одну архитектуру процессора на другой не запустится.
Не фиксируют версии внутри образа. Подвижные зависимости и подвижный тег базового образа означают, что пересборка того же Dockerfile через месяц даст другое окружение, и воспроизводимость остаётся словами.
Пакуют в образ датасеты и веса. Образ пухнет до десятков гигабайт, выкатка ползёт, а данные всё равно живут своим циклом. Их место в хранилище или томе, в образе остаются код и ссылка.