Какой командой можно поменять пользователя в 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"]
Пояснение к коду
-
FROM ubuntu:20.04
Указывает базовый образ, на основе которого будет строиться контейнер. В данном случае используется образ Ubuntu версии 20.04. -
RUN apt-get update && apt-get install -y sudo curl
Обновляет список пакетов и устанавливаетsudoиcurl.sudoпонадобится для выполнения команд с повышенными привилегиями, аcurl— для загрузки данных из сети. -
RUN useradd -m -s /bin/bash appuser
Создает нового пользователяappuserс домашним каталогом и оболочкой/bin/bash. -
RUN echo 'appuser ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
Добавляетappuserв файлsudoers, позволяя ему выполнять команды от имени суперпользователя без ввода пароля. -
USER appuser
Устанавливаетappuserкак текущего пользователя для выполнения последующих команд в Dockerfile. Это повышает безопасность, так как команды не будут выполняться от имениroot. -
WORKDIR /home/appuser
Устанавливает рабочую директорию для последующих команд. Это удобно для организации файлов и выполнения команд в нужном контексте. -
COPY script.sh .
Копирует файлscript.shиз текущей директории на хосте в текущую рабочую директорию контейнера. -
RUN chmod +x script.sh
Делает скриптscript.shисполняемым, чтобы его можно было запустить. -
CMD ["./script.sh"]
Указывает команду, которая будет выполнена при запуске контейнера. В данном случае это запуск скриптаscript.sh.
Использование команды USER позволяет управлять правами доступа и повышает безопасность контейнеров, особенно в многопользовательских системах или при работе с чувствительными данными.
🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!
Подписаться