Introducere în Docker
Tim Sangster
Software Engineer @ DataCamp
FROM, RUN și COPY interacționează prin sistemul de fișiere.
COPY /projects/pipeline_v3/start.sh /app/start.sh
RUN /app/start.sh
Unele influențează direct alte instrucțiuni:
WORKDIR: Schimbă directorul de lucru pentru toate instrucțiunile următoareUSER: Schimbă utilizatorul pentru toate instrucțiunile următoarePornind toate căile din rădăcina sistemului de fișiere:
COPY /projects/pipeline_v3/ /app/
Devine incomod cu căi lungi:
COPY /projects/pipeline_v3/ /home/my_user_with_a_long_name/work/projects/app/
Alternativ, utilizați WORKDIR:
WORKDIR /home/my_user_with_a_long_name/work/projects/
COPY /projects/pipeline_v3/ app/
În loc să utilizați calea completă pentru fiecare comandă:
RUN /home/repl/projects/pipeline/init.sh
RUN /home/repl/projects/pipeline/start.sh
Setați WORKDIR:
WORKDIR /home/repl/projects/pipeline/
RUN ./init.sh
RUN ./start.sh
În loc să utilizați calea completă:
CMD /home/repl/projects/pipeline/start.sh
Setați WORKDIR:
WORKDIR /home/repl/projects/pipeline/
CMD start.sh
Comanda de suprascriere va fi și ea rulată în WORKDIR:
docker run -it pipeline_image start.sh
$$
Bună practică
Ubuntu -> root implicit
FROM ubuntu --> Utilizator root implicit
RUN apt-get update --> Rulat ca root
Instrucțiunea USER în Dockerfile:
FROM ubuntu --> Utilizator root implicit
USER repl --> Schimbă utilizatorul la repl
RUN apt-get update --> Rulat ca repl
Dockerfile care setează utilizatorul la repl:
FROM ubuntu --> Utilizator root implicit
USER repl --> Schimbă utilizatorul la repl
RUN apt-get update --> Rulat ca repl
Va porni și containerele cu utilizatorul repl:
docker run -it ubuntu bash
repl@container: whoami
repl
| Utilizare | Instrucțiune Dockerfile |
|---|---|
| Schimbarea directorului de lucru curent | WORKDIR <path> |
| Schimbarea utilizatorului curent | USER <user-name> |
Introducere în Docker