Dockerfile: CMD与ENTRYPOINT区别

news2024/9/28 5:28:36

CMD和ENTRYPOINT的作用


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

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

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

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的主要目的是为正在执行的容器提供默认值。这些默认值可以包括可执行问卷,也可以省略可执行问卷,在这种情况下必须指定给一条ENTRYPOINT指令。

ENTRYPOINT语法

ENTRYPOINT 有两种形式:

exec形式,这是首选形式:

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

ENTRYPOINT command param1 param2

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

CMD与ENTRYPOINT的区别

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

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

案例


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

测试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

这个时候就执行成功了。验证了 docker run时输入的命令会替换掉CMD的命令

测试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```
这个时候追加一个命令-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。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1387076.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

D课堂 | 为什么网站搭建好了却无法访问?(上)

在上一期D课堂中,D妹教大家如何用最简单的方法快速搭建一个网站,相信很多小伙伴已经跃跃欲试,尝试去搭建自己的网站。(点击这里可以快速复习) 然而,有不少人明明每个步骤都跟着做了,但最后在浏览…

企业销售获客难?分享一个精准筛查企业客户的技巧

作为企业销售经理,曾经一直让我们很头疼的问题之一就是获客困难。回想起以往,我们需要通过各种手段,手动查找电话名单、网络搜索到各种渠道,费尽心思的去筛查才能找到潜在客户。获客流程长还耗费很多的精力,拿到手的客…

【test】wsl2和win互ping

参考: https://zhuanlan.zhihu.com/p/365058237 https://blog.csdn.net/Cypher_X/article/details/123011200

RTKlib操作手册--使用样例数据演示

简介 RTKLIB(Real-Time Kinematic Library)是一款开源的实时差分全球导航卫星系统(GNSS)软件库。它旨在提供高精度的位置解算,特别是在实时应用中,如精密农业、测绘、无人机导航等领域。 RTKLIB支持多种G…

复杂经济时期下的企业财务规划战略

多重危机、通货膨胀、外汇波动和市场变化的交汇给经济世界带来了前所未有的挑战,这使得企业对预测精准度和及时性的需求大大增加。平衡营收增长与成本输出的稳定性、在不断变化的市场行为中抓住商机提高盈利能力是现阶段财务专业人士必须掌握的技能。情景规划与财务…

Ubuntu下,Flutter安装及在VScode中的配置

1、安装flutter 在自己指定的目录下,新建文件夹,并将源码git clone到本地 $ mkdir flutter $ cd flutter$ git clone -b master https://github.com/flutter/flutter.git2、给flutter添加环境变量 #编辑配置文件 $ vi ~/.bashrc #在末尾加入以下内容&…

分布式系统中的CAP原理

分布式系统中的CAP原理 本文已收录至我的个人网站:程序员波特,主要记录Java相关技术系列教程,共享电子书、Java学习路线、视频教程、简历模板和面试题等学习资源,让想要学习的你,不再迷茫。 简介 在分布式系统中&…

rtklib读取原始数据是一次读取了一个文件的全部数据

一般来说,rtklib读取观测值文件(o文件)和导航文件(n文件)进行解算。 读取文件的时候,并非一次读取一个历元,而是将一个文件所有历元的数据都读取完毕以后,再进行解算。 这看起来是…

Go 如何处理死锁以提供哪些工具来检测或防死锁?

并发是 Go 的核心特性,它使程序能够同时处理多个任务。它是现代编程的一个强大组件,如果使用正确,可以产生高效、高性能的应用程序。然而,并发性也带来了顺序编程中不存在的某些类型错误的可能性,其中最臭名昭著的是死…

一般大家怎么部署java项目,要不要部署在docker里?

关于是否应该将Java项目部署在Docker中的思考 传统方式:直接在服务器上运行jar包,依赖于服务器的环境配置,可能会遇到环境不一致的问题。 Docker方式:通过容器化,你的应用和所有依赖都封装在一个Docker镜像中。部署时…

Portal认证

目录 一、Portal认证概述 1、802.1X和Portal对比 2、Portal认证流程 (1)、portal认证基本流程 二、MAC认证 1、MAC认证需求 2、MAC认证概述 3、MAC旁路认证 一、Portal认证概述 1、802.1X和Portal对比 802.1X认证要求认证终端安装专门的软件 8…

高效工作法:占位图片生成工具助力项目快速迭代

在现代设计和开发项目中,图片资源的重要性不言而喻。然而,项目中经常会遇到寻找合适图片、调整图片尺寸和格式等问题,这些问题不仅耗时耗力,还可能影响到项目的进度和质量。此时,占位图片生成工具应运而生,…

检索增强生成RAG

文章目录 RAG解释混合检索重排序Rerank为什么需要RerankHNSW带来的随机性问题 当前大模型处理长输入的水平依然不够大模型如何处理长输入?重要信息位置为什么会影响大模型的效果LangChain的解决方案-检索后重新排序文档 召回模式N选1召回模式多路召回模式 摘要 在RA…

黑马苍穹外卖学习Day6

HttpClient 介绍 HttpClient 是 Apache 提供的一个开源的 Java HTTP 客户端库,用于发送 HTTP 请求和处理 HTTP 响应。它提供了一种更简便的方式来执行 HTTP 请求,并支持多种协议,如 HTTP、HTTPS、FTP 等。 使用 HttpClient 可以方便地与远程…

Linux网络服务部署yum仓库

目录 一、网络文件 1.1.存储类型 1.2.FTP 文件传输协议 1.3.传输模式 二、内网搭建yum仓库 一、网络文件 1.1.存储类型 直连式存储:Direct-Attached Storage,简称DAS 存储区域网络:Storage Area Network,简称SAN&#xff0…

多级缓存架构(五)缓存同步

文章目录 一、Canal服务1. mysql添加canal用户2. mysql配置文件3. canal配置文件 二、引入依赖三、监听Canal消息四、运行五、测试 通过本文章,可以完成多级缓存架构中的缓存同步。 一、Canal服务 1. mysql添加canal用户 连接在上一次multiCache项目中运行的mys…

从传统训练到预训练和微调的训练策略

目录 前言1 使用基础模型训练手段的传统训练策略1.1 随机初始化为模型提供初始点1.2 目标函数设定是优化性能的关键 2 BERT微调策略: 适应具体任务的精妙调整2.1 利用不同的representation和分类器进行微调2.2 通过fine-tuning适应具体任务 3 T5预训练策略: 统一任务形式以提高…

Mindspore 公开课 - GPT

GPT Task 在模型 finetune 中,需要根据不同的下游任务来处理输入,主要的下游任务可分为以下四类: 分类(Classification):给定一个输入文本,将其分为若干类别中的一类,如情感分类、…

手写一个starter来理解SpringBoot的自动装配

自动装配以及简单的解析源码 自动装配是指SpringBoot在启动的时候会自动的将系统中所需要的依赖注入进Spring容器中 我们可以点开SpringBootApplication这个注解来一探究竟 点开这个注解可以发现这些 我们点开SpringBootConfiguration这个注解 可以发现实际上SpringBootApp…

【Python学习】Python学习20- 面向对象(1)

目录 【Python学习】Python学习20- 面向对象(1) 前言面向对象技术简介类的创建实例:创建实例对象访问属性 Python内置类属性完整代码输出 参考 文章所属专区 Python学习 前言 本章节主要说明Python的面向对象的处理。Python从设计之初就已经…