看不懂Dockerfile里很痛苦,直到https://goinbigdata.com/docker-run-vs-cmd-vs-entrypoint/#:~:text=In%20a%20nutshell&text=CMD%20sets%20default%20command%20and,will%20run%20as%20an%20executablegoinbigdata.com
.这篇文章解释的很清楚
In a nutshellRUN会在现有的基础上新添一层layer,创建一个新的image。(一般用来安装软件包)
CMD 设定默认的command或者参数。在启动docker时没有指定参数会执行,如果指定了就会被覆盖执行。
ENTRYPOINT 将容器配置成一个executable.
Docker images and layers
Docker跑容器时,他在容器内启动了一个image。这个image往往都是通过执行Docker instructions来一层层的往上加layer来执行的。所以说祖宗容器就是最初的Image,每向上加一层就会形成一个新的容器。
Shell and Exec forms
RUN, CMD and ENTRYPOINT 都可以通过 shell或者 exec两种方式来执行。下面先举些例子.
Shell form
例子
RUN apt-get install python3
CMD echo "Hello world"
ENTRYPOINT echo "Hello world"
当这个指令执行时候,他会call /bin/sh -c 来执行调用一个常规的shell 进程。举个具体的例子,在Dockerfile中这么写的话:
ENV name John