Работа с Dockerfile

Dockerfile — конфигурационный файл, который содержит инструкции, которые будут применены при сборке Docker-образа и запуске контейнера. Dockerfile создается в корневой директории проекта и не имеет расширения.

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

Пример Dockerfile:

FROM alpine
RUN apk add --no-cache nginx && mkdir -p /run/nginx
WORKDIR /etc/nginx/
COPY custom.conf /etc/nginx/conf.d
EXPOSE 80
COPY . /opt/
CMD ["nginx","-g","daemon off;"]

 

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

FROM - инструкция, которая всегда идёт первой и указывает родительского образа. Например, FROM alpine.

RUN - инструкция, которая может принимать конвейер команд Linux, чтобы не создавать лишние слои. Например, RUN apt-get update && apt-get install nginx.

WORKDIR - инструкция, которая устанавливает рабочий каталог контейнера. Например, WORKDIR /etc/nginx/. Последующие команды RUN, CMD, ENTRYPOINT наследуют привязку WORKDIR.

CMD - завершающая инструкция, которая отвечает за запуск контейнера. Например, CMD ["nginx","-g", "daemon off;"]. CMD наследует привязку к WORKDIR.

 

Таблица инструкций Dockerfile с примерами:

Инструкция Описание Пример Комментарий
FROM Задает родительский образ. Все последующие инструкции создают слои поверх родительского образа.

FROM nginx:latest
FROM debian:wheezy

Со списком образов можно ознакомиться на Docker hub.
RUN Выполняет команду внутри контейнера c сохранением результата.

RUN mkdir /etc/nginx/
RUN apt-get update && apt-get install nginx -y

RUN может исполнять команды с логическими операторами && и ||.
COPY Копирует файлы и папки из текущей директории, где находится Dockerfile в указанную директорию в контейнере COPY . /etc/nginx/ COPY считывает позицию Dockerfile на хосте, поэтому первым аргументом идет «.».
ADD Копирует файлы и папки из текущей позиции Dockerfile, скачивает файлы по URL и работает с tar-архивами. ADD https://mhost.by/archive/demo_config.ini /etc/nginx/ Официальная документация не рекомендует применять ADD.
ENV ENV задает переменные среды внутри образа. ENV ADMIN="nginx" ENV часто применяют для передачи в контейнеризированное приложение переменные среды.
ARG Переменные, которые передается докером во время сборки образа. ARG maintainer=nginx В отличие от ENV-переменных, ARG-переменные недоступны во время выполнения\работы контейнера.
WORKDIR Устанавливает рабочую директорию контейнера. WORKDIR /etc/nginx/ Последующие инструкции CMD, RUN, ENTRYPOINT наследуют привязку к директории установленной в WORKDIR.
VOLUME Создает и подключает постоянный том хранения данных. VOLUME /data_1 Просмотреть существующие тома можно командой docker volume ls. К контейнеру можно подключить существующий том, для этого достаточно указать уже существующий том.
EXPOSE Указывает локальный порт контейнера. Инструкция сама по себе не открывает порт. EXPOSE 80 Если требуется пробросить и сопоставить разные порты внутри и снаружи контейнера используется docker run -p внутренний порт:внешний порт
LABEL Добавляет метаданные в образ. LABEL maintainer="nginx_test" Обычно LABEL содержит информацию об авторе образа.
CMD Выполняет команду с указанными аргументами во время запуска контейнера. CMD ["nginx","-g","daemon off;"] CMD должна быть одна в конце Dockerfile. CMD может вызывать исполняемый файл — .sh
ENTRYPOINT Похожа на CMD, но при запуске контейнера не переопределяется в отличие от CMD. ENTRYPOINT ["nginx","-g","daemon off;"] ENTRYPOINT может использоваться совместно с CMD.
  • 0 Пользователи нашли это полезным

Помог ли вам данный ответ?