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 指令详解
795 0
|
数据安全/隐私保护 Docker 容器
Dockerfile(15) - ARG 指令详解
Dockerfile(15) - ARG 指令详解
1185 0
|
2天前
|
JSON Java Shell
Dockerfile中RUN、CMD、ENTRYPOINT、SHELL命令的区别
理解这些指令的差异和应用场景,有助于构建高效、灵活且易于管理的Docker镜像。在实际应用中,根据需要选择合适的指令,可以有效地控制镜像构建和容器运行的行为。
7 0
|
5月前
|
JSON 物联网 Shell
Dockerfile指令详解
Dockerfile指令详解
91 0
|
Docker 容器
48-Dockerfile-CMD/ENTRYPOINT指令
48-Dockerfile-CMD/ENTRYPOINT指令
Dockerfile(3) - WORKDIR 指令详解
Dockerfile(3) - WORKDIR 指令详解
1000 0
|
缓存 Linux Go
Dockerfile(10) - ADD 指令详解
Dockerfile(10) - ADD 指令详解
2132 0
Dockerfile(1) - FROM 指令详解
Dockerfile(1) - FROM 指令详解
585 0
|
存储 应用服务中间件 调度
Dockerfile(12) - HEALTHCHECK 指令详解
Dockerfile(12) - HEALTHCHECK 指令详解
387 0
Dockerfile(12) - HEALTHCHECK 指令详解
|
应用服务中间件 Shell nginx
Dockerfile(7) - ENV 指令详解
Dockerfile(7) - ENV 指令详解
2032 0
Dockerfile(7) - ENV 指令详解