侧边栏壁纸
博主头像
小周的知识站 博主等级

行动起来,活在当下

  • 累计撰写 80 篇文章
  • 累计创建 12 个标签
  • 累计收到 8 条评论

目 录CONTENT

文章目录

DockerFile中ENTRYPOINT和CMD的区别

Administrator
2024-08-10 / 0 评论 / 0 点赞 / 13 阅读 / 0 字

DockerFile中ENTRYPOINT和CMD的区别

1 CMD和ENTRYPOINT的作用

CMD和ENTRYPOINT这两个命令,我接触到的是用在了Dockerfile中用于构建容器。

CMD:The main purpose of a CMD is to provide defaults for an executing container. CMD的主要用途是为正在执行的容器提供默认值。也就是指定这个容器启动的时候要运行的命令。

ENTRYPOINT:也是指定这个容器启动的时候要运行的命令。

2 CMD语法

The CMD instruction has three forms:

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)

Dockerfile中只有一条CMD指定,如果列出多个,只有最后一个CMD才会生效。

CMD的主要目的是为正在执行的容器提供默认值。

3 ENTRYPOINT语法

ENTRYPOINT 有两种形式:

exec形式,这是首选形式:

ENTRYPOINT ["executable", "param1", "param2"]
外壳形式:

ENTRYPOINT command param1 param2

与CMD类似,在Dockerfile中只有一条ENTRYPOINT指定,如果列出多个,只有最后一个ENTRYPOINT生效。

4 CMD与ENTRYPOINT的区别

docker run后面的参数会将CMD指定的参数进行覆盖。

ENTRYPOINT与CMD的区别是不可以被docker run后的参数覆盖,会把docker run后面的参数传递给ENTRYPOINT指定的参数

5 案例

使用Dockerfile构建centos镜像,在Dockerfile中使用CMD和ENTRYPOINT。当docker run+参数的时候进行CMD和ENTRYPOINT的测试,CMD指定的参数是否会被覆盖,以及ENTRYPOINT指定的参数是否会追加docker run后面的参数

5.1 测试CMD

1、创建一个名为dockerfile-centos-test的文件,再编写dockerfile文件。

# 编写dockerfile文件
$ vim dockerfile-centos-test
FROM centos
CMD ["ls","-a"] #再容器运行的时候列出所有目录
# 构建镜像
$ docker build -f dockerfile-centos-test -t cmd-test:0.1 .
# 运行镜像
$ docker run cmd-test:0.1

列出了所有目录

2、这个时候我们再追加一条命令-l 变成ls -al

出现错误,在CMD的情况加-l 替换了CMD["ls","-l"],由于-l不是命令撒所以报错

3、我们再输入docker run cmd-test:0.1 ls

这个时候就执行成功了

5.2 测试ENTRYPOINT

和之前测试CMD一样

#创建一个文件docker-test-entrypoint
#编写dockerfile文件
$ vim docker-test-entrypoint
FROM centos
ENTRYPOINT ["ls","-a"]
#构建镜像
$ docker build -f docker-test-entrypoint -t entrypoint-test:0.1 .
#运行镜像
$ docker run entrypoint-test:0.1```
![在这里插入图片描述](https://img-blog.csdnimg.cn/47ffb813eac148048ca54d288e0dcdde.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA546L5Y2r4oCU4oCURGF2aWQ=,size_16,color_FFFFFF,t_70,g_se,x_16)
这个时候追加一个命令-l 成为ls-al

```powershell
# 想追加一个命令 -l 成为ls -al
$ docker run cmd-test:0.1 -l

总结一下:CMD的情况下 -l 替换了CMD的ls -a。而ENTRYPOINT的情况下-l 追加到了ls -a 的后面 变成了ls -al

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区