本文摘自PHP中文网,作者coldplay.xixi,侵删。
docker下entrypoint和cmd的区别是:1、CMD指令运行一个可执行的文件并提供参数,可以为ENTRYPOINT指定参数;2、ENTRYPOINT指令本身也可以包含参数,变动的参数不会被覆盖。
docker下entrypoint和cmd的区别是:
1、CMD指令:
CMD在容器运行的时候提供一些命令及参数,用法如下:
CMD ["executable","param1","param2"] (exec form, this is the preferred form)
CMD ["param1","param2"] (as default parameters to ENTRYPOINT)
CMD command param1 param2 (shell form)
第一种用法:运行一个可执行的文件并提供参数。
第二种用法:为ENTRYPOINT指定参数。
第三种用法(shell form):是以”/bin/sh -c”的方法执行的命令。
如你指定:
1 |
|
build后运行(假设镜像名为ec):
1 |
|
就会输出:
1 |
|
是不是感觉很像开机启动项,你可以暂时这样理解。
注意点:
docker run
命令如果指定了参数会把CMD里的参数覆盖: (这里说明一下,如:docker run -it ubuntu /bin/bash 命令的参数是指/bin/bash 而非 -it ,-it
只是docker 的参数,而不是容器的参数,以下所说参数均如此。)
同样是上面的ec镜像启动:
1 |
|
就不会输出:
1 |
|
因为CMD命令被”/bin/bash”覆盖了。
2、ENTRYPOINT指令
字面意思是进入点,而它的功能也恰如其意。它可以让你的容器功能表现得像一个可执行程序一样。
容器功能表现得像一个可执行程序一样,这是什么意思呢?
直接给个例子好说话:
例子一:
使用下面的ENTRYPOINT构造镜像:
1 |
|
那么docker build出来的镜像以后的容器功能就像一个/bin/echo程序:
比如我build出来的镜像名称叫imageecho,那么我可以这样用它:
相关阅读 >>
更多相关阅读请进入《Docker》频道 >>