更改用户和工作目录

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...