Введение в Docker
Tim Sangster
Software Engineer @ DataCamp
FROM, RUN и COPY взаимодействуют через файловую систему.
COPY /projects/pipeline_v3/start.sh /app/start.sh
RUN /app/start.sh
Некоторые инструкции влияют на последующие напрямую:
WORKDIR: изменяет рабочую директорию для всех следующих инструкцийUSER: изменяет пользователя для всех следующих инструкцийЕсли начинать все пути от корня файловой системы:
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/
Вместо полного пути в каждой команде:
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
Вместо полного пути:
CMD /home/repl/projects/pipeline/start.sh
Задайте WORKDIR:
WORKDIR /home/repl/projects/pipeline/
CMD start.sh
Переопределённая команда также выполняется в WORKDIR:
docker run -it pipeline_image start.sh
$$
Рекомендация
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
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
| Назначение | Инструкция Dockerfile |
|---|---|
| Изменить текущую рабочую директорию | WORKDIR <path> |
| Изменить текущего пользователя | USER <user-name> |
Введение в Docker