Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про Docker: Dockerfile, FROM, RUN, COPY, WORKDIR, CMD

Что должно быть указано в Dockerfile?

Этот вопрос проверяет понимание структуры Dockerfile и его ключевых инструкций, необходимых для создания Docker-образов.

Короткий ответ

Dockerfile — это текстовый файл с инструкциями для сборки Docker-образа. В нём указывается базовый образ (FROM), команды для установки зависимостей (RUN), копирование файлов проекта (COPY), рабочая директория (WORKDIR) и команда для запуска контейнера (CMD или ENTRYPOINT). Также часто указываются переменные окружения (ENV) и порты (EXPOSE). Правильный Dockerfile делает образ воспроизводимым и переносимым.

Длинный ответ

Dockerfile — это сценарий сборки, который Docker использует для создания образа. Он содержит пошаговые инструкции, описывающие, как собрать среду выполнения приложения.

Обязательные и ключевые инструкции

  • FROM: Определяет базовый образ (например, node:18-alpine или python:3.11-slim). Это первая инструкция в любом Dockerfile.
  • RUN: Выполняет команды в слое образа для установки пакетов, обновления системы или настройки среды.
  • COPY или ADD: Копирует файлы и директории с хоста (вашего компьютера) в образ. COPY предпочтительнее для простого копирования.
  • WORKDIR: Устанавливает рабочую директорию для последующих инструкций RUN, CMD, ENTRYPOINT, COPY и ADD.
  • CMD или ENTRYPOINT: Определяет команду по умолчанию для запуска контейнера. CMD предоставляет аргументы по умолчанию для ENTRYPOINT или может быть самостоятельной командой.

Дополнительные полезные инструкции

  • ENV: Устанавливает переменные окружения внутри контейнера.
  • EXPOSE: Информирует Docker, что контейнер слушает указанные сетевые порты (например, EXPOSE 3000).
  • USER: Указывает пользователя (и группу), от имени которого будут выполняться последующие инструкции и запускаться контейнер. Повышает безопасность.
  • ARG: Определяет переменные, которые можно передать во время сборки образа (с помощью флага --build-arg).
  • VOLUME: Создает точку монтирования для хранения данных и настройки разделяемых томов.

Пример Dockerfile для Node.js приложения

# Используем официальный легковесный образ Node.js
FROM node:18-alpine AS builder

# Устанавливаем рабочую директорию
WORKDIR /app

# Копируем файлы зависимостей
COPY package*.json ./

# Устанавливаем зависимости
RUN npm ci --only=production

# Копируем исходный код приложения
COPY . .

# Открываем порт, на котором работает приложение
EXPOSE 3000

# Определяем команду для запуска приложения
CMD ["node", "server.js"]

Этот пример показывает типичный многоступенчатый подход: сначала копируются файлы зависимостей (package.json), чтобы использовать кэш Docker при установке, а затем копируется остальной код. Это ускоряет повторные сборки.

Где и как применяется

Dockerfile используется в CI/CD пайплайнах для автоматической сборки образов, в локальной разработке для создания идентичных сред и при развертывании в оркестраторах, таких как Kubernetes. Он обеспечивает воспроизводимость: образ, собранный из одного и того же Dockerfile, будет идентичным на любой системе.

Вывод: Правильно составленный Dockerfile должен содержать минимально необходимый набор инструкций для создания эффективного, безопасного и переносимого образа. Его стоит применять для контейнеризации любого приложения, чтобы гарантировать одинаковое поведение в разных средах — от ноутбука разработчика до продакшн-сервера.

Уровень

  • Рейтинг:

    4

  • Сложность:

    3

Навыки

  • Docker

    Docker

Ключевые слова

#Dockerfile

#FROM

#RUN

#COPY

#WORKDIR

#CMD

Подпишись на Python Developer в телеграм