Ответ
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"]