В данном посте представлены основные команды Dockerfile. Dockerfile, который мы используем для создания образа — это рецепт для построения образа при помощи пошаговых команд. При сборке этого Dockerfile мы создаем образ, а из этого образа создаем контейнер.
Команда FROM
Должна быть первой командой в Dockerfile, с помощью этой команды мы устанавливаем исходный образ, который будет использоваться в качестве базового в нашем составном образе
FROM debian
Команда ADD
Чтобы переместить файл в каталог контейнера
ADD opa.txt /directory/
Отличие этой команды от команды COPY в том, что данная команда может автоматически разархивировать .tar
, .gz
ADD /home/user/test.tar.gz /opt
И еще одно отличие — это похоже на то, как работает wget -P
, но для Dockerfile. При создании образа Docker вы можете использовать следующую инструкцию, чтобы загрузить файл и сохранить его в нужном месте в образе контейнера
ADD https://filesamples.com/samples/document/pdf/sample2.pdf /home/user
Команда CMD
Он определяет команду, которая будет выполняться при инициализации контейнера с этим образом. В Dockerfile может быть только одна инструкция CMD. Если вы добавите более одного, вступит в силу только последний
CMD ["sh, "-c", "echo", "$HOME"]
Его можно перезаписать при использовании, если мы передадим другую команду в командной строке, например
docker run -d my-image /bin/bash
Команда LABEL
Используйте его, чтобы установить описание контейнера и упростить управление всеми контейнерами
LABEL Description="Bla bla bla giropops"
Команда COPY
Аналогично ADD, но вы можете копировать обычные файлы и каталоги
COPY opa.txt /directory/
Команда ENTRYPOINT
Это как CMD
, но его нельзя перезаписать, он всегда будет выполняться, контейнер будет работать как исполняемый файл.
Когда эта команда умирает, контейнер тоже умирает
ENTRYPOINT ["npm", "run", "dev"]
Команда ENV
Устанавливает переменные среды в контейнер
ENV API_KEY="Igor Souto"
Команда EXPOSE
Устанавливает порты, которые контейнер будет предоставлять, чтобы контейнер был доступен через эти порты
EXPOSE 80
Команда RUN
Используется для запуска команд в контейнере, обычно используется для установки пакетов.
Каждый RUN
создает новый слой в нашем контейнере, поэтому нам нужно избегать создания слишком большого количества RUN
, создавать меньше слоев и не допускать беспорядка, в конце концов, у нас есть доступ для чтения и записи только в последнем слое, поэтому в зависимости на то, что мы хотим сделать, мы не можем (например, apt-get clean
в другом RUN
).
Команда USER
Чтобы определить пользователя внутри контейнера, по умолчанию используется пользователь ROOT
USER igor
Команда WORKDIR
Определяет каталог работы. Когда контейнер запускается, это каталог, в который мы попадем, когда получим доступ к контейнеру
WORKDIR /mydir
Команда VOLUME
Создает том, каталог, который будет иметь копию на нашем компьютере/хост-докере.
Изменение чего-либо в этом объеме на нашей машине отразится на контейнере, и наоборот
VOLUME /mydir
Команда MAINTAINER
Установить владельца контейнера
MAINTAINER Igor myemail@provider.com
Команда ARG
Инструкция ARG
определяет переменную, которую пользователи могут передать во время сборки сборщику с помощью команды сборки docker
, используя флаг --build-arg <имя_переменной>=<значение>
. Данная переменная будет доступна только на этапе построения и внутри контейнера не доступна
ARG var
Команда ENV
Инструкция ENV
устанавливает для переменной среды <key>
значение <value>
. Переменные среды, установленные с помощью ENV, будут сохраняться при запуске контейнера из полученного образа
ENV var=${var}
Комбинация ARG и ENV
То есть эти две команды можно комбинировать в Dockerfile, записав, как
ARG var
ENV var=${var}
Построение образа
Теперь для сборки образа мы используем команду сборки Docker. мы передаем -t
параметр, чтобы назвать это изображение, двоеточие и версию. И мы используем «.», чтобы сказать, что наш Dockerfile находится на том же уровне каталога. Мы указываем не на Dockerfile, а на каталог, в котором он находится
docker build -t first_image:1.0 .