Dockerfile文件中CMD指令与ENTRYPOINT指令的区别

简介: 本文是博主学习docker 制作镜像指令的记录,希望对大家有所帮助

区别介绍

CMD [“要运行的程序”,“参数1”,“参数2”] : 指定启动容器时要运行的命令或脚本。可以有多个CMD指令,但只有最后一个生效。CMD会被docker run指令后的参数替换
ENTRYPOINT [“要运行的程序”,“参数1”,“参数2”] : 和CMD一样,指定启动容器时要运行的命令或脚本。ENTRYPOINT不会被docker run指令后的参数替换,而是在其后追加参数

实例说明CMD和ENTRYPOINT的区别

CMD实例

Dockerfile文件

FROM centos
MAINTAINER ber & ber@email.com
CMD ["ls"]
AI 代码解读

构建镜像

这里因为Dockerfile文件已经存在,我另存了一个Dockerfile1文件,构建时需要-f指定一下使用的Dockerfile文件

docker build -f Dockerfile1 -t mycentos:1 .
AI 代码解读

运行新镜像mycentos:1

docker run -it mycentos:1
AI 代码解读

可以看到最后的CMD指令在docker run时成功运行了。
在这里插入图片描述
再试着加-l参数运行,我想要实现ls -l的效果。能否成功呢?接着往下看实验

docker run -it mycentos:1 -i
AI 代码解读

很明显,失败了。在这里插入图片描述

原因

CMD会被docker run指令后的参数替换。
在输入加参数-l指令后

docker run -it mycentos:1 -l
AI 代码解读

CMD ls 指令 就被替换成 CMD -l,这个指令明显是错的,当然不能执行,于是就报错提示指令不存在。

ENTRYPOINT实例

Dockerfile文件

FROM centos
MAINTAINER ber & ber@email.com
ENTRYPOINT ["ls"]
AI 代码解读

构建镜像

这里也是因为Dockerfile文件已经存在,我另存了一个Dockerfile2文件,构建时需要-f指定一下使用的Dockerfile文件

docker build -f Dockerfile2 -t mycentos:2 .
AI 代码解读

运行新镜像mycentos:2

docker run -it mycentos:2
AI 代码解读

可以看到最后的ENTRYPOINT指令在docker run时成功运行了。
在这里插入图片描述
再试着加-l参数运行,我想要实现ls -l的效果。这次能否成功呢?接着往下看实验

docker run -it mycentos:2 -l
AI 代码解读

ls -l查看当前文件夹下详细的文件信息,这里已经实现了我想要的。
在这里插入图片描述
当使用ENTRYPOINT指令时,docker run后加的参数-l作用到mycentos:2镜像上会以ls -l指令执行。
这也就是CMD指令和ENTRYPOINT指令的主要区别。

目录
打赏
0
0
0
0
205
分享
相关文章
Terraform Explorer 正式发布
阿里云推出可视化的Terraform调用工具——Terraform Explorer,简化云资源管理,提供可视化操作界面,免安装、免编写代码、免状态管理,助力开发者高效部署和管理基础设施。
Spark cache()与unpersist()使用位置
Spark在执行过程中是懒加载模式,RDD转换仅仅是构建DAG描述而不执行,只有遇到action算子才会真正的运行
105 9
|
10月前
阿里云镜像公共仓库使用
这篇文章介绍了如何使用阿里云镜像公共仓库,包括登录管理界面、创建命名空间、推送和拉取镜像的详细步骤。
3455 4
阿里云镜像公共仓库使用
Hbase学习三:Hbase常用命令总结
Hbase学习三:Hbase常用命令总结
1667 0
大数据存储技术(3)—— HBase分布式数据库
大数据存储技术(3)—— HBase分布式数据库
4345 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问