Каковы основные директивы Dockerfile и их назначение?

Ответ

Dockerfile — это текстовый файл, содержащий набор инструкций для автоматической сборки Docker-образа. Каждая инструкция создает новый слой в образе.

Ключевые директивы:

  • FROM: Указывает базовый (родительский) образ, на основе которого будет создан новый. Всегда является первой инструкцией в Dockerfile. Пример: FROM ubuntu:22.04

  • WORKDIR: Задает рабочую директорию для всех последующих инструкций (RUN, CMD, COPY, ADD). Если директория не существует, она будет создана. Пример: WORKDIR /app

  • COPY: Копирует файлы и директории из файловой системы хоста в файловую систему контейнера. Предпочтительнее ADD для простого копирования. Пример: COPY ./requirements.txt .

  • RUN: Выполняет команды в новом слое образа во время сборки. Используется для установки пакетов, компиляции кода и других подготовительных шагов. Пример: RUN pip install -r requirements.txt

  • EXPOSE: Информирует Docker о том, что контейнер прослушивает указанные сетевые порты во время выполнения. Не публикует порт, а служит в качестве документации. Пример: EXPOSE 8000

  • CMD: Задает команду по умолчанию, которая будет выполнена при запуске контейнера. Может быть легко переопределена при запуске (docker run ... <new_command>). Пример: CMD ["python", "main.py"]

Пример Dockerfile для Python-приложения:

# 1. Использовать официальный образ Python
FROM python:3.10-slim

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

# 3. Скопировать файл зависимостей и установить их
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# 4. Скопировать исходный код приложения
COPY . .

# 5. Сообщить, что контейнер будет слушать порт 5000
EXPOSE 5000

# 6. Запустить приложение при старте контейнера
CMD ["flask", "run", "--host=0.0.0.0"]