Псевдокод не является корректным Dockerfile: установку и создание каталога выполняют через RUN, рабочий каталог задают WORKDIR, запуск — CMD/ENTRYPOINT.
Выявление ошибок и оптимизация Dockerfile‑псевдокода
Псевдокод не является корректным Dockerfile: установку и создание каталога выполняют через RUN, рабочий каталог задают WORKDIR, запуск — CMD/ENTRYPOINT.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Дан псевдокод Dockerfile. Какие недостатки можно обнаружить в его написании и как его можно улучшить?
FROM {base_image}
pip install ...
mkdir {folder}
s3 sync {folder} # 4gb
run app
Ответ
Псевдокод не является корректным Dockerfile: установку и создание каталога выполняют через RUN, рабочий каталог задают WORKDIR, запуск — CMD/ENTRYPOINT.
Пример структуры с заранее выбранным Python-образом:
ARG BASE_IMAGE
FROM ${BASE_IMAGE}
WORKDIR /app
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "app.py"]
Зависимости копируются отдельно для переиспользования слоя. Нужны .dockerignore, зафиксированные зависимости, непривилегированный пользователь и осмысленно выбранный базовый образ.
Не стоит автоматически включать 4 ГБ изменяемых данных S3 в каждый образ: это увеличивает сборку, передачу и хранение слоёв. Рассмотрите загрузку в volume/init-container или чтение по мере необходимости. Если данные обязаны входить в образ, закрепите версию и контрольную сумму. Секреты S3 нельзя сохранять в слоях.