回答

收藏

Dockerfile 中的 CMD 和 ENTRYPOINT 有什么区别?

技术问答 技术问答 342 人阅读 | 0 人回复 | 2023-09-11

在 Dockerfiles 有两个命令类似于我:CMD和ENTRYPOINT. 但我认为它们之间存在(微妙?)区别 - 否则,两个命令对同一件事毫无意义。
4 t; s' a" D) J8 j* |文件指出 CMD0 B- ]2 K. {/ T- G. \& q; T
CMD 的主要目的是为正在执行的容器提供默认值。/ [% x+ I& W6 E
对于ENTRYPOINT:; H- t2 w; u/ K% k8 m2 V- D
ENTRYPOINT 可以帮助您配置可以作为可执行文件运行的容器。
& I3 W& Q1 L3 C3 c! H# H
那么,这两个命令有什么区别呢?$ z- a+ r0 J, f$ o
                                                                # [  c7 T1 M0 j8 r& i
    解决方案:                                                               
; e8 O- N2 m5 b: q6 P. h                                                                Docker 有一个默认入口点,它有/bin/sh -c但没有默认命令。
) I" n+ [$ V# P# \5 ^% v当您像这样运行 docker 时: docker run -i -t ubuntu bash 入口点为默认值/bin/sh -c,图像是ubuntu,命令是bash。) ^& C7 i0 s2 B$ \& U
该命令通过入口点运行。也就是说,实际执行是/bin/sh -c bash. 这使得 Docker 可以RUN依靠 shell 快速实现分析器。
, j! p+ n; z. h) S; `2 C% B后来,人们要求自定义这一点,所以ENTRYPOINT并--entrypoint介绍。% V; j7 ^( C- U+ D+ w# \6 |2 c
ubuntu上述示例中的所有内容都是命令并传递给入口点。CMD就像你执行指令一样docker run -i -t ubuntu . 将是入口点的参数。
( f& X2 g6 e: E! @% G# }4 H如果您更改此命令,您也将得到相同的结果docker run -i -t ubuntu。由于ubuntu Dockerfile指定默认 CMD,您仍将在容器中启动 bash shell :CMD ["bash"]
5 Y) ]4 l7 O% y5 S6 H* n当一切都传递到入口点时,你可以从图像中得到很好的行为。@Jiri 示例很好,它展示了如何将图像用作二进制。["/bin/cat"]作为入口点,然后执行docker run img /etc/passwd,你会得到它,//etc/passwd是命令并传递给入口点,所以最终结果很简单/bin/cat /etc/passwd。
: \8 i3 P3 P: M, F* _另一个例子是任何 cli 作为入口点。例如,如果你有一个Redis图像,而不是操作docker run redisimg redis -H something -u toto get key,你可以简单地拥有它ENTRYPOINT ["redis","-H","something","-u","toto"],然后这样运行的结果是一样的docker run redisimg get key。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则