Docker命令RUN、CMD和ENTRYPOINT之间的区别

诸如以下命令CMD, 运行和入口点当你编写一个docker文件创建Docker映像。但是, 如果你刚开始使用Docker或没有足够的动手经验来使用这些命令, 那么这些命令可能会给你带来很多混乱。在本文中, 我们将通过实际示例深入讨论所有这三个命令。
但是在深入解释之前, 我们需要首先了解不同的执行形式。我们可以使用两种不同的形式在Docker中执行命令.
  Shell形式:
如果我们选择命令的Shell形式执行, 则会进行常规的Shell处理。在幕后, bash称/ bin/sh -c。 Shell命令的一般形式如下所示:

< Instruction> < Command>

要获得更清晰的图片, 请查看以下命令。
RUN apt-get -y install firefox CMD echo "srcmini" ENTRYPOINT echo "srcmini"

以上两个命令都输出” srcmini” 。执行命令的Shell形式通常用于运行命令。
  可执行形式:
【Docker命令RUN、CMD和ENTRYPOINT之间的区别】命令的可执行形式通常用于CMD和入口点命令。可执行命令的一般形式如下所示:
< Instruction> ["executable", "parameter no. 1", "parameter no. 2", ...]

使用命令的可执行形式可以直接执行命令, 并且不会进行Shell处理。查看以下命令:
ENTRYPOINT ["/bin/echo", "srcmini"] CMD ["/bin/echo", "srcmini"]

现在, 让我们尝试了解运行, CMD和入口点命令深入。
1.运行命令:
当你使用运行在你的命令docker文件, 它总是在以前的图像之上创建一个新的中间图像层。因此, 始终建议将所有运行命令一起。
运行 可执行形式的命令为:
RUN ["apt-get", "install", "firefox"]

Shell形式的RUN命令是:
RUN apt-get -y install firefox

2.CMD命令
一种CMD命令用于设置运行Docker容器后将执行的默认命令。如果你在Docker run命令中提供命令, 则CMD自变量被忽略dockerfile。在多个的情况下CMD命令, 只有最后一个被执行。
CMD ["python3", "app.py"]

如果你使用的是入口点在你的docker文件, 你可以使用添加其他参数CMD命令的以下形式。
CMD ["parameter 1", "parameter 2"]

请注意CMD如果在Docker run命令中提供参数, 则会忽略这些命令。
sudo docker run -it ubuntu bash

如果你同时使用上述命令, 则使用了CMD在你的命令docker文件, 它将被忽略, 仅打开bash。
例如, 如果docker文件包含:
Docker命令RUN、CMD和ENTRYPOINT之间的区别

文章图片
输入文件
如果我们将其他参数与docker run命令(例如” bash” )一起使用, 它将简单地打开bash并且不回显任何内容。
Docker命令RUN、CMD和ENTRYPOINT之间的区别

文章图片
输出如下
3.入口点命令
An入口点命令, 不像CMD, 不会忽略你在Docker run命令中指定的其他参数。
考虑下面的示例:
ENTRYPOINT ["echo", "srcmini "] CMD ["Docker Tutorials"]

例如, 如果docker文件is
Docker命令RUN、CMD和ENTRYPOINT之间的区别

文章图片
输入
在没有任何其他参数的情况下, 运行Docker容器时上述命令的输出为–
srcmini Docker Tutorials

Docker命令RUN、CMD和ENTRYPOINT之间的区别

文章图片
输出如下
如果你指定其他参数, 则CMD参数被忽略。
总而言之, 在本文中, 我们讨论了用于执行的shell和可执行文件形式docker文件说明。然后, 我们讨论了运行, CMD和入口点命令每个示例。

    推荐阅读