FROM <image>[:<tag>] [AS <name>]:
Обязательная инструкция: Определяет базовый образ, на основе которого будет строиться новый образ.
<image>: Имя образа (например, ubuntu, python, node).
<tag>: Конкретная версия образа (например, 18.04, 3.9-slim, latest). Если не указан, используется latest.
AS <name>: Присваивает псевдоним базовому образу для использования в многоэтапных сборках (multi-stage builds).
RUN <command> (shell form) или RUN ["executable", "param1", "param2"] (exec form):
Выполняет команды внутри образа. Используется для установки программного обеспечения, настройки системы и выполнения других действий.
Shell form: Команда выполняется в оболочке (/bin/sh -c на Linux).
Exec form: Команда выполняется напрямую без оболочки. Рекомендуется для большей предсказуемости.
Примеры:
dockerfile
RUN apt-get update && apt-get install -y --no-install-recommends python3 python3-pip
RUN ["pip3", "install", "-r", "requirements.txt"]
COPY <src>... <dest> или COPY --from=<name> <src>... <dest>:
Копирует файлы и директории с хостовой машины в образ.
<src>: Путь к файлу или директории на хосте. Может быть несколько источников.
<dest>: Абсолютный путь внутри образа, куда будут скопированы файлы.
--from=<name>: Используется в многоэтапных сборках для копирования артефактов из предыдущего этапа сборки.
Пример:
dockerfile
COPY ./app /app
ADD <src>... <dest> или ADD --from=<name> <src>... <dest>:
Аналогична COPY, но имеет дополнительные возможности:
Рекомендуется использовать COPY для простых операций копирования.
Пример:
dockerfile
ADD [https://example.com/app.tar.gz](https://example.com/app.tar.gz) /app/
WORKDIR <path>:
Устанавливает рабочую директорию для последующих инструкций RUN, CMD, ENTRYPOINT, COPY, ADD.
Если директория не существует, она будет создана.
Пример:
dockerfile
WORKDIR /app
ENV <key>=<value> ...:
Устанавливает переменные окружения внутри образа.
Могут использоваться в последующих инструкциях и доступны в запущенном контейнере.
Пример:
dockerfile
ENV PYTHON_VERSION 3.9
RUN apt-get update && apt-get install -y python${PYTHON_VERSION}
EXPOSE <port> [<port>/<protocol>...]:
Объявляет порты, которые приложение внутри контейнера прослушивает.
Не публикует порт автоматически на хостовой машине. Это делается при запуске контейнера с флагом -p.
Используется для документирования и взаимодействия между связанными контейнерами.
Пример:
dockerfile
EXPOSE 80/tcp 443/tcp
CMD ["executable", "param1", "param2"] (exec form, рекомендуется) или CMD command param1 param2 (shell form) или CMD ["param1", "param2"] (как аргументы для ENTRYPOINT):
Указывает команду, которая будет выполнена при запуске контейнера из образа.
Может быть переопределена при запуске контейнера с помощью docker run <image> <command> [arguments].
В Dockerfile может быть только одна инструкция CMD.
Пример:
dockerfile
CMD ["python", "app.py"]
ENTRYPOINT ["executable", "param1", "param2"] (exec form, рекомендуется) или ENTRYPOINT command param1 param2 (shell form):
Указывает исполняемый файл, который будет запущен при старте контейнера.
Аргументы, переданные в docker run <image> [arguments], будут добавлены к команде ENTRYPOINT.
Часто используется для создания исполняемых образов.
Может быть переопределен при запуске контейнера с флагом --entrypoint.
В Dockerfile может быть только одна инструкция ENTRYPOINT.
Пример:
dockerfile
ENTRYPOINT ["/bin/my-app"]
USER <uid>[:<gid>] или USER <username>[:<groupname>]:
Устанавливает пользователя (и опционально группу), под которым будут выполняться последующие инструкции RUN, CMD и ENTRYPOINT.
Рекомендуется запускать процессы внутри контейнера от непривилегированного пользователя для безопасности.
Пример:
dockerfile
USER nobody
VOLUME ["/data"]:
Объявляет именованную или анонимную точку монтирования тома.
Позволяет сохранять данные, созданные внутри контейнера, вне его файловой системы.
Пример:
dockerfile
VOLUME ["/var/lib/mysql"]
ARG <variable>[=<value>]:
Определяет переменные, которые могут быть переданы во время сборки образа с помощью флага --build-arg.
Могут иметь значения по умолчанию.
Пример:
dockerfile
ARG NODE_VERSION=16
FROM node:${NODE_VERSION}-slim
ONBUILD <instruction>:
Выполняет указанную инструкцию в дочернем образе, созданном на основе текущего.
Полезно для создания базовых образов, которые ожидают определенной настройки в производных образах.
Пример:
dockerfile
ONBUILD COPY . /app
ONBUILD WORKDIR /app
STOPSIGNAL <signal>:
Устанавливает системный сигнал, который будет отправлен контейнеру для его корректного завершения. По умолчанию SIGTERM.
Пример:
dockerfile
STOPSIGNAL SIGINT
HEALTHCHECK [--interval=<duration> --timeout=<duration> --start-period=<duration> --retries=<number>] CMD <command>:
Определяет команду для проверки работоспособности контейнера.
Docker Daemon периодически выполняет эту команду и определяет статус контейнера (starting, healthy, unhealthy).
Пример:
dockerfile
HEALTHCHECK --interval=5m --timeout=3s CMD curl -f http://localhost:8080/health || exit 1
SHELL ["executable", "parameters"]:
Изменяет стандартную оболочку, используемую для инструкции RUN (shell form). По умолчанию ["/bin/sh", "-c"] на Linux.
Пример:
dockerfile
SHELL ["powershell", "-Command"]
RUN Get-ChildItem C:\