← Назад ко всем вопросам

Какой командой можно поменять пользователя в Dockerfile

1️⃣ Как кратко ответить

В Dockerfile для смены пользователя используется команда USER. Она задает пользователя, от имени которого будут выполняться последующие команды в контейнере.

2️⃣ Подробное объяснение темы

В Dockerfile команда USER используется для указания пользователя, от имени которого будут выполняться команды внутри контейнера. Это важно для обеспечения безопасности и управления доступом в контейнере. По умолчанию, Docker запускает контейнеры от имени пользователя root, что может быть небезопасно, особенно в производственной среде.

Пример использования команды USER в Dockerfile

# Используем базовый образ Ubuntu
FROM ubuntu:20.04
​
# Устанавливаем необходимые пакеты
RUN apt-get update && apt-get install -y \
    sudo \
    curl
​
# Создаем нового пользователя с именем 'appuser'
RUN useradd -m -s /bin/bash appuser
​
# Даем 'appuser' права на выполнение команд от имени суперпользователя
RUN echo 'appuser ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
​
# Переходим на выполнение команд от имени 'appuser'
USER appuser
​
# Устанавливаем рабочую директорию
WORKDIR /home/appuser
​
# Копируем скрипт в контейнер
COPY script.sh .
​
# Делаем скрипт исполняемым
RUN chmod +x script.sh
​
# Выполняем скрипт
CMD ["./script.sh"]

Пояснение к коду

  1. FROM ubuntu:20.04
    Указывает базовый образ, на основе которого будет строиться контейнер. В данном случае используется образ Ubuntu версии 20.04.

  2. RUN apt-get update && apt-get install -y sudo curl
    Обновляет список пакетов и устанавливает sudo и curl. sudo понадобится для выполнения команд с повышенными привилегиями, а curl — для загрузки данных из сети.

  3. RUN useradd -m -s /bin/bash appuser
    Создает нового пользователя appuser с домашним каталогом и оболочкой /bin/bash.

  4. RUN echo 'appuser ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
    Добавляет appuser в файл sudoers, позволяя ему выполнять команды от имени суперпользователя без ввода пароля.

  5. USER appuser
    Устанавливает appuser как текущего пользователя для выполнения последующих команд в Dockerfile. Это повышает безопасность, так как команды не будут выполняться от имени root.

  6. WORKDIR /home/appuser
    Устанавливает рабочую директорию для последующих команд. Это удобно для организации файлов и выполнения команд в нужном контексте.

  7. COPY script.sh .
    Копирует файл script.sh из текущей директории на хосте в текущую рабочую директорию контейнера.

  8. RUN chmod +x script.sh
    Делает скрипт script.sh исполняемым, чтобы его можно было запустить.

  9. CMD ["./script.sh"]
    Указывает команду, которая будет выполнена при запуске контейнера. В данном случае это запуск скрипта script.sh.

Использование команды USER позволяет управлять правами доступа и повышает безопасность контейнеров, особенно в многопользовательских системах или при работе с чувствительными данными.

Тема: Docker / Контейнеры
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки