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 入门