Команды и Директивы Dockerfile
Dockerfile – это текстовый файл, содержащий инструкции по созданию Docker-образа. Каждая инструкция добавляет новый слой в образ.
Основные Инструкции
FROM
Указывает базовый образ, от которого создается новый образ.
FROM ubuntu:latest
Параметры: Имя образа (например, ubuntu:latest, node:16).
RUN
Выполняет команды в командной строке. Используется для установки пакетов, создания директорий и т.п.
RUN apt-get update && apt-get install -y curl
Параметры: Команда для выполнения (используется оболочка, например, /bin/sh -c).
CMD
Определяет команду, которая будет выполнена при запуске контейнера. Может быть переопределена при запуске контейнера.
CMD ["executable", "param1", "param2"]
Параметры: Exec-формат (рекомендуется) или shell-формат (обертывается в /bin/sh -c).
ENTRYPOINT
Определяет исполняемый файл, который будет запускаться при запуске контейнера. В отличие от CMD, его сложнее переопределить.
ENTRYPOINT ["executable", "param1", "param2"]
Параметры: Exec-формат или shell-формат.
COPY
Копирует файлы и директории с хост-машины в образ.
COPY ./src /app
Параметры: source (на хост-машине) destination (в образе).
ADD
Аналогичен COPY, но может автоматически распаковывать архивы и извлекать URL-адреса.
ADD ./archive.tar.gz /app
Параметры: source (на хост-машине) destination (в образе).
WORKDIR
Устанавливает рабочую директорию для последующих инструкций.
WORKDIR /app
Параметры: Путь к директории.
EXPOSE
Определяет порты, которые контейнер будет слушать при запуске. Не публикует порты, а служит документацией.
EXPOSE 80 443
Параметры: Список портов.
ENV
Устанавливает переменные окружения.
ENV APP_HOME /app
Параметры: Имя переменной имя_переменной=значение.
ARG
Определяет аргумент сборки, который может быть передан при сборке образа. Не влияет на время выполнения контейнера.
ARG VERSION=1.0
Параметры: Имя аргумента имя_аргумента=значение.
VOLUME
Создает точку монтирования для внешних томов.
VOLUME /data
Параметры: Путь к точке монтирования.
USER
Устанавливает пользователя для последующих инструкций и команды запуска.
USER devuser
Параметры: Имя пользователя или UID.
LABEL
Добавляет метаданные к образу.
LABEL maintainer="Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в браузере должен быть включен Javascript. "
Параметры: Пары ключ-значение.
Дополнительные Инструкции
HEALTHCHECK
Определяет команду для проверки здоровья контейнера.
ONBUILD
Определяет инструкции, которые будут выполнены при создании образов на основе данного образа.
Примечание: ONBUILD не рекомендуется к использованию, т.к. может привести к сложностям в отладке и управлении зависимостями.
Важные Замечания
- Каждая инструкция создает новый слой образа. Оптимизируйте Dockerfile, чтобы минимизировать количество слоев.
- Используйте кэширование слоев Docker для ускорения процесса сборки.
- Используйте многострочные команды
RUNс операторами&&для объединения команд в один слой.
Пример Dockerfile с Пояснениями
Этот Dockerfile демонстрирует типичную конфигурацию для веб-приложения на Apache, PHP и MySQL. Он включает в себя установку необходимых пакетов, копирование файлов приложения и настройку конфигурации.
Dockerfile:
# Используем базовый образ Ubuntu
FROM ubuntu:latest
# Поддерживаем переменные окружения, если нужно
ENV DEBIAN_FRONTEND=noninteractive
# Устанавливаем необходимые пакеты
RUN apt-get update && \
apt-get install -y --no-install-recommends \
apache2 \
php \
libapache2-mod-php \
mysql-client \
git \
zip \
unzip && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# Включаем модуль rewrite для Apache
RUN a2enmod rewrite
# Создаем пользователя для приложения (если необходимо)
RUN useradd -ms /bin/bash devuser
# Меняем владельца директории для приложения
RUN chown -R devuser:devuser /var/www/html
# Переключаем пользователя (если необходимо)
USER devuser
# Копируем файлы приложения в директорию
COPY ./src /var/www/html/
# Настраиваем виртуальный хост Apache (пример)
RUN echo '<VirtualHost *:80>\n\
ServerName example.com\n\
DocumentRoot /var/www/html/public\n\
</VirtualHost>' > /etc/apache2/sites-available/example.com.conf
# Включаем виртуальный хост
RUN a2ensite example.com.conf
# Перезапускаем Apache
CMD ["apache2ctl", "-D", "FOREGROUND"]
Пояснения к Dockerfile:
- `FROM ubuntu:latest`: Указывает, что образ будет создан на основе базового образа Ubuntu.
- `ENV DEBIAN_FRONTEND=noninteractive`: Устанавливает переменную окружения для неинтерактивной установки пакетов. Полезно, чтобы избежать запросов на подтверждение во время сборки.
- `RUN apt-get update && apt-get install -y ...`: Обновляет список пакетов и устанавливает необходимые пакеты, такие как Apache, PHP, MySQL-клиент и другие. `--no-install-recommends` уменьшает размер образа, избегая установки рекомендованных пакетов. `apt-get clean && rm -rf /var/lib/apt/lists/*` очищает кэш apt после установки, чтобы уменьшить размер образа.
- `RUN a2enmod rewrite`: Включает модуль `rewrite` для Apache, который необходим для работы большинства современных веб-приложений.
- `RUN useradd -ms /bin/bash devuser`: Создает пользователя `devuser` для запуска приложения.
- `RUN chown -R devuser:devuser /var/www/html`: Изменяет владельца директории `/var/www/html` на пользователя `devuser`. Это важно для безопасности и предотвращения проблем с правами доступа.
- `USER devuser`: Переключается на пользователя `devuser` для последующих команд и запуска приложения.
- `COPY ./src /var/www/html/`: Копирует файлы приложения из локальной директории `src` в директорию `/var/www/html/` на образе. Важно: `src` должна находиться в том же каталоге, где и Dockerfile.
- `RUN echo ' ... ' > /etc/apache2/sites-available/example.com.conf`: Создает конфигурационный файл для виртуального хоста Apache. Этот пример показывает простейшую конфигурацию. Рекомендуется использовать более сложные конфигурации для production-окружений.
- `RUN a2ensite example.com.conf`: Включает виртуальный хост `example.com.conf`.
- `CMD ["apache2ctl", "-D", "FOREGROUND"]`: Указывает команду для запуска Apache при старте контейнера. Опция `-D FOREGROUND` указывает Apache работать в foreground, чтобы контейнер не завершился сразу.
Важно: Это базовый пример. В реальных проектах необходимо учитывать больше факторов, таких как настройка базы данных, конфигурация SSL, логирование и мониторинг.
- Информация о материале
- Просмотров: 0