Команды Dockerfile

Команды Dockerfile

Dockerfile — это конфигурационный файл, в котором описаны инструкции, которые будут применены при сборке Docker-образа и запуске контейнера. Dockerfile создается в корневой директории проекта и не имеет расширения. Синтаксис Dockerfile близок к синтаксису конфигурационных файлов .ini. На каждую строчку приходится одна инструкция. Инструкции пишутся капсом, а их значения отделяются пробелом.

Dockerfile имеет следующую логику заполнения:

  1. Первой инструкцией всегда идёт FROM с указанием родительского образа. Например, FROM python:latest.
  2. Инструкция RUN может принимать конвейер команд Linux, чтобы не создавать лишние слои. Например, RUN apt-get update && apt-get install python3-pip -y && pip install --upgrade pip && pip install pipenv.
  3. Инструкция WORKDIR устанавливает рабочий каталог контейнера. Например, WORKDIR /usr/src/app/. Последующие команды RUN, CMD, ENTRYPOINT наследуют привязку WORKDIR.
  4. Завершающей инструкцией всегда идёт CMD. Например, CMD ["python", "web_interface.py"]. CMD наследует привязку к WORKDIR, поэтому web_interface.py будет запущен из папки /usr/src/app/.
Инструкция Описание Пример использования Комментарий
FROM Задает базовый образ. Все последующие инструкции создают слои поверх родительского образа. FROM openjdk:21 Быстрее всего можно найти образ с нужным тегом на Docker hub.
RUN Выполняет команду внутри контейнера и сохраняет результат. RUN mkdir /usr/src/app/ RUN apt-get update && apt-get install python3-pip -y RUN может исполнять конвейер команд с логическими операторами && и ||.
COPY Копирует файлы и папки из текущей директории, где находится пользователь в указанную директорию в контейнере COPY target/kafkaDevOpsTask3-1.0-SNAPSHOT.jar app.jar COPY считывает позицию пользователя на хосте, поэтому первым аргументом идет «.».
ADD Копирует файлы и папки из текущей позиции пользователя, скачивает файлы по URL и работает с tar-архивами. ADD https://url/config.ini /usr/src/app/ Официальная документация не рекомендует применять ADD. Для скачивания по URL можно использовать RUN с CURL или WGET, а для копирования — COPY.
CMD Выполняет команду с указанными аргументами во время запуска контейнера. CMD ["python", "web_interface.py"] CMD должна быть одна в конце Dockerfile. CMD может вызывать исполняемый файл — .sh. Аргументы docker run переопределяют CMD. Если в Dockerfile нет CMD, обязательно должна быть инструкция ENTRYPOINT.
ENTRYPOINT Похожа на CMD, но при запуске контейнера не переопределяется в отличие от CMD. ENTRYPOINT ["java", "-jar", "/app.jar"] ENTRYPOINT может использоваться совместно с CMD.
ENV Задает переменные среды внутри образа, на которые могут ссылаться другие инструкции. ENV ADMIN="savenkoffcom" ENV часто применяется для передачи информации в контейнеризированное приложение через переменные среды.
ARG Задает переменные, значение которых передается докером во время сборки образа. ARG maintainer=savenkoffcom В отличие от ENV-переменных, ARG-переменные недоступны во время выполнения контейнера.
WORKDIR Устанавливает рабочую директорию контейнера. WORKDIR /usr/src/app/ Последующие инструкции CMD, RUN, ENTRYPOINT наследуют привязку к директории установленной WORKDIR.
VOLUME Создает и подключает постоянный том хранения данных. VOLUME /data_cont_1 Просмотреть существующие тома можно командой docker volume ls. К контейнеру можно подключить существующий том, для этого достаточно указать уже существующий том.
EXPOSE Указывает планируемый рабочий порт у контейнера. Инструкция сама по себе не открывает порт. Чтобы использовался указанный в EXPOSE порт — нужно указать docker run -P при запуске контейнера. EXPOSE 5000 Если требуется пробросить и сопоставить разные порты внутри и снаружи контейнера используется docker run -p внутренний порт:внешний порт
LABEL Добавляет метаданные в образ. LABEL org.opencontainers.image.authors="savenkoffcom" Обычно LABEL содержит информацию об авторе образа.
MAINTAINER Указывает автора образа MAINTAINER savenkoffcom Инструкция MAINTAINER, которая исторически использовалась для указания автора Dockerfile, устарела. Чтобы задать метаданные автора для образа, используйте org.opencontainers.image.authors метку LABEL.