Dockerfile语法中RUN与CMD的区别

1 阅读1分钟

执行时机

RUN:镜像构建阶段。每个RUN相当于打开一个终端执行一次命令,执行完成后关闭,所以RUN不能用来执行单独的临时配置命令,如:

RUN export LANG=C

以上写法就是错误的,因为“export LANG=C”是进行临时配置,关闭当前终端这个配置就会失效。

CMD:容器启动阶段。

执行次数

RUN:有多少个RUN就执行多少次,每一个RUN相当于一个镜像层。 CMD:每个Dockerfile只有最后一个CMD生效,容器启动时可以被命令行参数覆盖,例如输入命令:

Docker run -it mylinux:latest id

则命令“id”会覆盖生成镜像mylinux:latest所用的Dockerfile中CMD所指定的命令。

执行目的

RUN:执行命令并修改镜像,执行结果会打包进镜像层。
CMD:为容器启指定默认启动命令,仅在容器启动时执行。