FROM

构建的新镜像是基于哪个镜像,也可以直接构建基本镜像

scratch 制作 base image
centos 基于 centos:latest 镜像

LABEL

说明,类似注释 ,最好都得有

RUN & CMD & ENTRYPOINT

WORKDIR

ADD & COPY

大部分情况:copy 优先 add

add 有解压功能
远程目录使用 curl or wget

ADD hello / # 将 hello 添加到/下
ADD test.tar.gz / # ADD 有解压功能

WORKDIR /root   # workdir 和 add 联合使用
ADD hello test/  # /root/test/hello

WORKDIR /root   # workdir 和 add 联合使用
COPY hello test/  # /root/test/hello

ENV

RUN、CMD 和 ENTRYPOINT 指令区别

  1. RUN 在 building 时运行,可以写多条
  2. CMD 和 ENTRYPOINT 在运行 container 时运行,只能写一条,如果写多条,最后一条生效。
  3. CMD 在 run 时可以被 COMMAND 覆盖, ENTRYPOINT 不会被 COMMAND 覆盖,但可以指定—entrypoint 覆盖。

最佳实践

可参考

  1. github.com/docker-library 实例
  2. dockerfile refrence 官方文档
  3. Dockerfile最佳实践