更換使用者與工作目錄

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 使用者
RUN apt-get update  --> 以 root 執行

USER Dockerfile 指令:

FROM ubuntu         --> 預設為 Root 使用者
USER repl           --> 切換為 repl 使用者
RUN apt-get update  --> 以 repl 執行
Docker 入門

在容器中變更使用者

在 Dockerfile 中設定使用者為 repl:

FROM ubuntu         --> 預設為 Root 使用者
USER repl           --> 切換為 repl 使用者
RUN apt-get update  --> 以 repl 執行 

也會以 repl 使用者啟動容器:

docker run -it ubuntu bash
repl@container: whoami
repl
Docker 入門

摘要

用途 Dockerfile 指令
變更目前工作目錄 WORKDIR <path>
變更目前使用者 USER <user-name>
Docker 入門

Time for practice!

Docker 入門

Preparing Video For Download...