Проверяет понимание ключевых инструкций Dockerfile, определяющих, что и как запускается внутри контейнера при сборке и старте.
Инструкции RUN, CMD и ENTRYPOINT решают разные задачи в жизненном цикле контейнера. RUN работает на этапе сборки образа, а CMD и ENTRYPOINT — на этапе запуска контейнера. Понимание этой разницы критично, чтобы правильно проектировать образы и не путать сборку с исполнением.
RUN запускает команду внутри промежуточного контейнера и фиксирует результат в новом слое образа. Каждый RUN создаёт отдельный слой, поэтому команды часто объединяют через &&, чтобы уменьшить размер образа.
FROM node:20-alpine
RUN apk add --no-cache curl \
&& npm install -g pnpm
CMD задаёт команду или аргументы, которые выполняются при старте контейнера, если пользователь не передал свою команду. В Dockerfile может быть только один CMD, и он легко переопределяется аргументами docker run.
FROM node:20-alpine
WORKDIR /app
COPY . .
CMD ["node", "server.js"]
ENTRYPOINT задаёт исполняемый файл, который всегда запускается. Аргументы из CMD или из docker run добавляются к ENTRYPOINT. Это удобно для образов-утилит, где важно зафиксировать точку входа.
FROM alpine
ENTRYPOINT ["ping"]
CMD ["localhost"]
# docker run myimage 8.8.8.8 -> ping 8.8.8.8
Итог: RUN применяйте для установки зависимостей и подготовки образа, CMD — для дефолтной команды запуска, ENTRYPOINT — когда нужно жёстко зафиксировать точку входа контейнера.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию