简述Docker中CMD和ENTRYPOINT区别 ?
Docker中的CMD和ENTRYPOINT指令用于定义容器启动时要运行的命令及其参数。然而,它们在用法和功能上有一些区别。
CMD指令用于在容器运行时提供一些命令及参数。它有三种用法:
- 运行一个可执行的文件并提供参数:CMD [“executable”,”param1″,”param2″]
- 为ENTRYPOINT指定参数:CMD [“param1″,”param2”]
- 以“/bin/sh -c”的方法执行的命令:CMD command param1 param2
其中,第一种用法是最常用的,可以直接指定可执行文件的路径及其参数。CMD指令的命令及参数在容器启动时被执行,执行完毕后容器也就结束了。
ENTRYPOINT指令用于定义容器启动时要运行的命令及其参数,类似于CMD指令。但是,ENTRYPOINT的参数不会被docker run的命令行参数所覆盖,而是作为参数传给ENTRYPOINT指定的程序。这意味着ENTRYPOINT可以使得容器表现得像一个可执行程序一样,可以通过传递不同的参数来运行不同的功能。
此外,如果Dockerfile中存在多个CMD或ENTRYPOINT指令,只有最后一个生效。这是因为每个指令都会覆盖前一个指令的命令及参数。因此,在使用这些指令时需要注意它们的顺序和覆盖关系。
总结起来,CMD和ENTRYPOINT指令都可以用于定义容器启动时要运行的命令及其参数,但它们的用法和功能有所不同。CMD更适用于简单的命令及参数,而ENTRYPOINT则可以使得容器表现得像一个可执行程序一样,并通过传递参数来运行不同的功能。