Signal Visionary Xperience
  1. Вы здесь:  
  2. Главная
  3. Docker

Команды и Директивы 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:

  1. `FROM ubuntu:latest`: Указывает, что образ будет создан на основе базового образа Ubuntu.
  2. `ENV DEBIAN_FRONTEND=noninteractive`: Устанавливает переменную окружения для неинтерактивной установки пакетов. Полезно, чтобы избежать запросов на подтверждение во время сборки.
  3. `RUN apt-get update && apt-get install -y ...`: Обновляет список пакетов и устанавливает необходимые пакеты, такие как Apache, PHP, MySQL-клиент и другие. `--no-install-recommends` уменьшает размер образа, избегая установки рекомендованных пакетов. `apt-get clean && rm -rf /var/lib/apt/lists/*` очищает кэш apt после установки, чтобы уменьшить размер образа.
  4. `RUN a2enmod rewrite`: Включает модуль `rewrite` для Apache, который необходим для работы большинства современных веб-приложений.
  5. `RUN useradd -ms /bin/bash devuser`: Создает пользователя `devuser` для запуска приложения.
  6. `RUN chown -R devuser:devuser /var/www/html`: Изменяет владельца директории `/var/www/html` на пользователя `devuser`. Это важно для безопасности и предотвращения проблем с правами доступа.
  7. `USER devuser`: Переключается на пользователя `devuser` для последующих команд и запуска приложения.
  8. `COPY ./src /var/www/html/`: Копирует файлы приложения из локальной директории `src` в директорию `/var/www/html/` на образе. Важно: `src` должна находиться в том же каталоге, где и Dockerfile.
  9. `RUN echo ' ... ' > /etc/apache2/sites-available/example.com.conf`: Создает конфигурационный файл для виртуального хоста Apache. Этот пример показывает простейшую конфигурацию. Рекомендуется использовать более сложные конфигурации для production-окружений.
  10. `RUN a2ensite example.com.conf`: Включает виртуальный хост `example.com.conf`.
  11. `CMD ["apache2ctl", "-D", "FOREGROUND"]`: Указывает команду для запуска Apache при старте контейнера. Опция `-D FOREGROUND` указывает Apache работать в foreground, чтобы контейнер не завершился сразу.

Важно: Это базовый пример. В реальных проектах необходимо учитывать больше факторов, таких как настройка базы данных, конфигурация SSL, логирование и мониторинг.

Информация о материале
Просмотров: 0

Главное меню

  • Главная страница
    • Сигнал
    • Интерфейс
    • Опыт
    • Определения
  • Командная оболочка Bash
    • Перечень команд Bash
    • Скрипты BASH
  • Docker
  • Доменные имена
  • Соглашение
  • О проекте

Форма входа

  • Забыли пароль?
  • Забыли логин?