本文主要是介绍Dockerfile CMD ENTRYPOINT 命令区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
区别
学习dockerfile可以参考你必须知道Dockerfile
RUN
命令执行命令并创建新的镜像层,通常用于安装软件包
CMD
命令设置容器启动后默认执行的命令及其参数
但CMD设置的命令能够被docker run
命令后面的命令行参数替换
ENTRYPOINT
配置容器启动时的执行命令(不会被忽略,一定会被执行,即使运行 docker run
时指定了其他命令)
再具体聊一聊
FROM centos
MAINTAINER allocator
RUN yum install -y nginx
RUN echo 'hello world' > /usr/share/nginx/html/index.html
EXPOSE 80
ENTRYPOINT ["/usr/sbin/nginx"]
可以这样理解
-
如果没有
ENTRYPOINT
,CMD
要写完整的内容命令[command,arg1,arg2]
,docker run 后面会覆盖掉 cmd -
如果有
ENTRYPOINT
,CMD
可以只写[arg1,arg2]
,那么ENTRYPOINT
写[command]
-
还可以这样
ENTRYPOINT
写[command,arg1]
CMD
可以只写[arg2]
# 启动镜像,arg3 会代替CMD的内容
docker run -it <image-id> arg3
# 如果我们run后面加了其他命令和参数,这个命令可能会被当成参数,执行command other-command arg3,可能会报错
docker run -it <image-id> other-command arg3
ENTRYPOINT的两种写法
# ENTRYPOINT的两种写法:docker exec的形式
ENTRYPOINT [“executable”,”param1”,”param2"]
任何docker run设置的命令参数或者CMD指令的命令,都将作为ENTRYPOINT 指令的命令参数,追加到ENTRYPOINT指令之后。shell的形式
ENTRYPOINT command param1 param2
这种格式禁止追加任何参数,即CMD指令或docker run后面的参数都将被忽略。采用shell格式,在容器中执行时,自动调用shell。
这篇关于Dockerfile CMD ENTRYPOINT 命令区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!