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 執行
USER Dockerfile 指令:
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 入門