Инструкции Dockerfile

ADD — Копирует файлы из контекста создания или из удаленных URL-ссылок в создаваемый образ. Если архивный файл добавляется из локального пути, то он будет автоматически распакован. Так как диапазон функциональности инструкции ADD достаточно велик, в общем случае лучше воспользоваться более простой командой COPY для копирования файлов и каталогов в локальном контексте создания или инструкциями RUN с запуском curl или wget для загрузки удаленных ресурсов (с сохранением возможности обработки и удаления результатов загрузки в той же самой инструкции).

CMD — Запускает заданную инструкцию во время инициализации контейнера. Если была определена инструкция ENTRYPOINT, то заданная здесь инструкция будет интерпретироваться как аргумент для ENTRY POINT (в этом случае необходимо использовать формат exec). Инструкция CMD замещается любыми аргументами, указанными в команде docker run после имени образа.

COPY — Используется для копирования файлов из контекста создания в образ. Имеет два формата: COPY источник цель и COPY [«источник», «цель»] – оба копируют файл или каталог из источник» в контексте создания в «цель» внутри контейнера. Формат JSON-массива обязателен, если путь содержит пробелы. Можно использовать шаблонные символы для определения ескольких файлов или каталогов. Следует обратить особое внимание на невозможность указания путей «источника», расположенных вне пределов контекста создания (например, нельзя указать для опирования файл ../another_dir/myfile).

ENV — Определяет переменные среды внутри образа. На эти переменные можно ссылаться в последующих инструкциях. Например:

ENV MY_VERSION 1.3
RUN apt-get install -y mypackage=$MY_VERSION

Определенные в этой инструкции переменные будут доступными также и внутри образа.

EXPOSE — Сообщает механизму Docker о том, что в данном контейнере будет существовать процесс, прослушивающий заданный порт или несколько портов. Механизм Docker использует эту информацию при установлении соединения между контейнерами или при открытии портов для общего доступа при помощи аргумента -P в команде docker run. Но сама по себе инструкция EXPOSE не оказывает никакого воздействия на сетевую среду.

FROM — Определяет основной образ для файла Dockerfile. Все последующие инструкции выполняют операции создания поверх заданного образа. Основной образ определяется в форме IMAGE:TAG (например, debian:wheezy). При отсутствии тега по умолчанию полагается latest, но я настоятельно рекомендую всегда явно указывать тег конкретной версии, чтобы избежать неприятных неожиданностей. Эта инструкция обязательно должна быть самой первой в Dockerfile.

MAINTAINERО — определяет метаданные об авторе «Author» для создаваемого образа в заданной строке. Извлечь эти метаданные можно с помощью команды docker inspect -f {{.Author}} IMAGE. Обычно используется для записи имени автора образа и его контактных данных.

ONBUILD — Определяет инструкцию, которая должна выполняться позже, когда данный образ будет использоваться как основной уровень для другого образа. Это может оказаться полезным при обработке данных, добавляемых в образ-потомок (например, это может быть инструкция копирования дополнительного кода из заданного каталога и запуска скрипта сборки, обрабатывающего скопированные данные).

RUN — Запускает заданную инструкцию внутри контейнера и сохраняет результат.

USER — Задает пользователя (по имени или по идентификатору UID) для использования во всех последующих инструкциях RUN, CMD, ENTRYPOINT. Отметим, что идентификаторы UID одинаковы на хосте и в контейнере, но имена пользователей могут присваиваться различным идентификаторам UID, что может приводить к затруднениям при установке прав доступа.

VOLUME — Объявляет заданный файл или каталог как том. Если такой файл или каталог уже существует в образе, то он копируется в том при запуске контейнера. Если задано несколько ргументов, то они интерпретируются как определение нескольких томов. Из соображений обеспечения безопасности и сохранения переносимости нельзя определить каталог хоста как том внутри файла Dockerfile. Более подробно об этом см. раздел «Управление данными с помощью томов и контейнеров данных» ниже.

WORKDIR — Определяет рабочий каталог для всех последующих инструкций RUN, CMD, ENTRYPOINT, ADD, COPY. Инструкцию можно использовать несколько раз. Допускается указание относительных путей, при этом итоговый путь определяется относительно ранее указанного рабочего каталога WORKDIR.