Вступ до 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 за замовчуванням
RUN apt-get update --> Виконується як root
Інструкція Dockerfile USER:
FROM ubuntu --> Користувач root за замовчуванням
USER repl --> Змінює користувача на repl
RUN apt-get update --> Виконується як repl
Dockerfile встановлює користувача repl:
FROM ubuntu --> Користувач root за замовчуванням
USER repl --> Змінює користувача на repl
RUN apt-get update --> Виконується як repl
Також контейнери запускатимуться з користувачем repl:
docker run -it ubuntu bash
repl@container: whoami
repl
| Використання | Інструкція Dockerfile |
|---|---|
| Змінити поточний робочий каталог | WORKDIR <path> |
| Змінити поточного користувача | USER <user-name> |
Вступ до Docker