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"]

构建镜像

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

docker build -f Dockerfile1 -t mycentos:1 .

运行新镜像mycentos:1

docker run -it mycentos:1

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

docker run -it mycentos:1 -i

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

原因

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

docker run -it mycentos:1 -l

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

ENTRYPOINT实例

Dockerfile文件

FROM centos
MAINTAINER ber & ber@email.com
ENTRYPOINT ["ls"]

构建镜像

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

docker build -f Dockerfile2 -t mycentos:2 .

运行新镜像mycentos:2

docker run -it mycentos:2

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

docker run -it mycentos:2 -l

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

目录
相关文章
|
NoSQL 关系型数据库 MySQL
Dockerfile(9) - ENTRYPOINT 指令详解
Dockerfile(9) - ENTRYPOINT 指令详解
683 0
|
数据安全/隐私保护 Docker 容器
Dockerfile(15) - ARG 指令详解
Dockerfile(15) - ARG 指令详解
769 0
|
1月前
|
关系型数据库 Java Android开发
CMD常用的指令
CMD是Windows操作系统的命令行操作工具,用户可以通过输入命令来完成系统或程序的操作。以下是一些常用的CMD指令
|
4月前
|
JSON 物联网 Shell
Dockerfile指令详解
Dockerfile指令详解
63 0
|
9月前
|
Docker 容器
48-Dockerfile-CMD/ENTRYPOINT指令
48-Dockerfile-CMD/ENTRYPOINT指令
Dockerfile(3) - WORKDIR 指令详解
Dockerfile(3) - WORKDIR 指令详解
805 0
|
缓存 网络协议 Shell
cmd指令
cmd指令
143 0
|
容器
Dockerfile(5) - CMD 指令详解
Dockerfile(5) - CMD 指令详解
777 0
|
Shell Linux 开发工具
Dockerfile(4) - RUN 指令详解
Dockerfile(4) - RUN 指令详解
368 0
Dockerfile(1) - FROM 指令详解
Dockerfile(1) - FROM 指令详解
514 0