Skip to main content

Dockerfile

DockerFile - набор инструкций по установке и настройке контейнера. Также используется для создания преднастроенных образов. Обычно dockerfile расположен в директории, из которой вызывается команда. 
Имя файла: Dockerfile (без расширения).
Контекст создания - набор локальных файлов/каталогов, к которым можно обращаться через copy/add. 
/ не стоит использовать как контекст, полностью включается в архив
# комментарии
При сборке образа попытки использования кэша идут до первого промаха. Затем кэш не проверяется.
.dockerignore - файл исключений из контекста
При сборке компилируемых приложений лучше использовать multi-stage build, возможно создание нескольких образов из одного dockerfile
Основная команда Параметры Описание
docker build  

создание образа

Создание образа из docker файла . - контекст создания (текущая папка)

 

docker build -t test/cowsay-dockerfile .

-t имя слоя

-f расположение слоя

--squash сжимает все слои в один
docker history <image> инструкции создания образа
docker buildx
для компиляции под разные платформы
Формат exec и формат командной оболочки
Формат  exec
JSON-массив
первый элемент массива: имя выполняемого файла
остальные - параметры,  передаваемые  при  запуске.  
Формат  командной оболочки 
строка произвольной формы, передаваемая для интерпретации в /bin/sh -c. 
Используйте формат exec, чтобы избежать случайного искажения строк командной оболочки, или в тех случаях, когда образ не содержит /bin/sh.
Команды файла:
Основная команда Параметры Описание
FROM <name> название базового образа
MAINTAINER <name> имя поддерживающего пользователя
USER <name> !Всегда определять! Задает пользователя (по имени или по идентификатору UID) для использования во всех последующих инструкциях RUN, CMD, ENTRYPOINT.
WORKDIR 
рабочий каталог для последующих RUN, CMD, ENTRYPOINT, ADD, COPY. 
можно использовать несколько раз 
можно относительные пути, итоговый путь относительно предыдущего WORKDIR.
RUN <commands>
команды при инициализации образа, обычно установка пакетов
каждая создает новый слой
CMD {''}
команда с аргументами, выполняемая после запуска контейнера. Аргументы могут быть переопределены при запуске контейнера. В файле может присутствовать лишь одна инструкция CMD.
ENTRYPOINT <program name>
Выполняемый файл, который будет вызываться для обработки аргументов, переданных в команду docker run
COPY <> <>
копирование файла из ФС ОС в ФС образа COPY . /src копирует все из текущей папки в папку /src
VOLUME <>
Том в ФС
ARG
Определяет переменные среды, доступные внутри образа при сборке. Неизменяемые.
ENV
Определяет переменные среды внутри образа, но могут изменяться. На эти переменные можно ссылаться в последующих инструкциях.*
ENV MY_VERSION 1.3
RUN apt-get install -y mypackage=$MY_VERSION
FROM alpine:latest
ARG NODE_ENV=production
ENV NODE_ENV=$NODE_ENV
CMD ["echo", "$NODE_ENV"]

 

EXPOSE
Сообщает механизму Docker, что в контейнере будет процесс, прослушивающий порт(ы)
не оказывает воздействия на сетевую среду
нужно для аргумента -p в docker run
ONBUILD
инструкция, выполняемая когда образ будет использоваться как основной уровень для другого образа. Полезным при обработке данных, добавляемых в образ-потомок 
(например, инструкция копирования дополнительного кода из заданного каталога и запуска скрипта сборки, обрабатывающего скопированные данные).
* Для различных образов могут использоваться доп. переменные, иногда обязательные. Детали нужно уточнять для конкретного образа.