Смена пользователя и рабочей директории

Введение в Docker

Tim Sangster

Software Engineer @ DataCamp

Взаимодействие инструкций Dockerfile

FROM, RUN и COPY взаимодействуют через файловую систему.

COPY /projects/pipeline_v3/start.sh /app/start.sh
RUN /app/start.sh

Некоторые инструкции влияют на последующие напрямую:

  • WORKDIR: изменяет рабочую директорию для всех следующих инструкций
  • USER: изменяет пользователя для всех следующих инструкций
Введение в Docker

WORKDIR — смена рабочей директории

Если начинать все пути от корня файловой системы:

COPY /projects/pipeline_v3/ /app/

Длинные пути быстро становятся громоздкими:

COPY /projects/pipeline_v3/ /home/my_user_with_a_long_name/work/projects/app/

Можно использовать WORKDIR:

WORKDIR /home/my_user_with_a_long_name/work/projects/
COPY /projects/pipeline_v3/ app/
Введение в Docker

RUN в текущей рабочей директории

Вместо полного пути в каждой команде:

RUN /home/repl/projects/pipeline/init.sh
RUN /home/repl/projects/pipeline/start.sh

Задайте WORKDIR:

WORKDIR /home/repl/projects/pipeline/
RUN ./init.sh
RUN ./start.sh
Введение в Docker

Изменение поведения при запуске с помощью WORKDIR

Вместо полного пути:

CMD /home/repl/projects/pipeline/start.sh

Задайте WORKDIR:

WORKDIR /home/repl/projects/pipeline/
CMD start.sh

Переопределённая команда также выполняется в WORKDIR:

docker run -it pipeline_image start.sh
Введение в Docker

Права доступа в Linux

  • Права доступа назначаются пользователям.
  • Root — особый пользователь со всеми правами.

$$

Рекомендация

  • Используйте root для создания пользователей с правами под конкретные задачи.
  • После этого не работайте от имени root.
Введение в Docker

Смена пользователя в образе

Рекомендация: не запускайте всё от имени root

Ubuntu -> root по умолчанию

FROM ubuntu         --> Root user by default
RUN apt-get update  --> Run as root

Инструкция USER в Dockerfile:

FROM ubuntu         --> Root user by default
USER repl           --> Changes the user to repl
RUN apt-get update  --> Run as repl
Введение в Docker

Смена пользователя в контейнере

Dockerfile с заданным пользователем repl:

FROM ubuntu         --> Root user by default
USER repl           --> Changes the user to repl
RUN apt-get update  --> Run as repl 

Контейнеры также будут запускаться от имени пользователя repl:

docker run -it ubuntu bash
repl@container: whoami
repl
Введение в Docker

Итоги

Назначение Инструкция Dockerfile
Изменить текущую рабочую директорию WORKDIR <path>
Изменить текущего пользователя USER <user-name>
Введение в Docker

Время практиковаться!

Введение в Docker

Preparing Video For Download...