Dockerfile运行指令

news2025/1/4 16:42:06

1.RUN

在build构建时执行命令。

举例:安装vim

Shell命令格式

RUN yum install -y vim

Exec命令格式

RUN ["yum","install","-y","vim"]

2.CMD

用于设置容器启动时默认执行的命令或参数。

如果Dockerfile中有多个CMD,只有最后一个CMD会被执行。

如果容器启动时附加执行,则CMD被忽略。

推荐使用Exec格式执行命令,例如:CMD ["ps","-ef"]

3.ENTRYPOINT

ENTRYPOINT(入口点)用于在容器启动时执行命令。

Dockerfile中只有最后一个ENTRYPOINT会被执行。

推荐使用Exec格式执行命令,例如:ENTRYPOINT ["ps"]

三个执行命令的区别示意图:

使用案例

下面用用例子来说明命令的用法,新建Dockerfile文件,文件中内容为:

FROM centos
RUN echo "image building!!"
CMD ["echo","container starting...."]

将Dockerfile文件放入到/usr/local目录中,然后命令窗口切换到/usr/local路径下,执行创建镜像的命令:

docker build -t shell .

创建名为shell的镜像

 从执行结果可以看出,CMD命令对应的container starting....没有被输出。

运行镜像,创建容器:

docker run shell

此时CMD命令被执行。

接着把Dockerfile文件中的内容进行修改,写两个CMD命令

FROM centos
RUN echo "image building!!"
CMD ["echo","container starting...."]
CMD ["echo","容器正在启动...."]

重新构建镜像

docker build -t shell .

运行镜像,生成容器

docker run shell

输出的CMD命令,只有最后一个。

CMD可以被命令行的内容覆盖,也就是说命令行的优先级更高。

下面看看ENTRYPOINT的用法,把Dockerfile文件中的CMD改为ENTRYPOINT。

FROM centos
RUN echo "image building!!"
ENTRYPOINT ["echo","我是ENTRYPOINT输出信息1"]
ENTRYPOINT ["echo","我是ENTRYPOINT输出信息2"]

重新构建镜像

docker build -t shell .

运行镜像,生成容器

docker run shell

从上面信息可以看到,ENTRYPOINT同CMD一样,多个ENTRYPOINT时,只有最后一个命令会被执行,前面的不会执行。

这么看好像ENTRYPOINT同CMD一样,没有区别,两个都是在容器创建时被执行,且都是只有最后一个被执行。

这只是它们的相同点,它们的应用场景其实不同。ENTRYPOINT用来编写固定的命令,CMD用来写默认命令。比如现在要执行 ps -ef命令,查看所有进程的详细信息。

Dockerfile文件中的内容进行如下:

FROM centos
RUN echo "image building!!"
ENTRYPOINT ["ps"]
CMD ["-ef"]

重新构建镜像

docker build -t shell .

运行镜像,生成容器

docker run shell

可以看到 ps -ef命令被执行,也就是说CMD的特点是用来作为默认值。

CMD还允许被动态修改,比如把 -ef 改为 -aux

也就是说在运行命令时,如果不添加参数,那就用CMD的值,如果添加了参数,那么CMD的值将被动态修改为新的值。

在大多数情况下,ENTRYPOINT后面跟的是固定命令,CMD后面写的是可以灵活变化的参数。

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

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

相关文章

无穿戴动作捕捉系统技术解密及多元化运用

在当今科技飞速发展的时代,动作捕捉技术不断革新,无穿戴动作捕捉系统崭露头角。与传统粘贴标记点的动作捕捉技术相比,无标记点动作捕捉技术具有显著优势。它能够在确保高精度捕捉的前提下,以非接触的方式极大地提升被捕捉对象的表…

计算机网络 (10)网络层

前言 计算机网络中的网络层(Network Layer)是OSI(开放系统互连)模型中的第三层,也是TCP/IP模型中的第二层,它位于数据链路层和传输层之间。网络层的主要任务是负责数据包从源主机到目的主机的路径选择和数据…

基于Mosquito源码理解MQTT5.0的属性概念

MQTT 5.0协议相比之前的版本(如MQTT 3.1.1)增加了很多属性,这些属性分布于报文的可变头部(Variable Header)和有效载荷(Payload)中。这些属性大大增强了协议的可扩展性和灵活性,使其能够更好地适应现代物联网应用的复杂需求。 属性的定义在源码包mosquitto-2.0.18/inc…

rk3568之mpp开发笔记记录之摄像头实时码流获取的神秘面纱

前言: 大家好,在上一篇文章里面,我给大家解读了怎么获取imx415-sensor的实时码流的细节,今天开始会解析里面到底是怎么实现的? 提前透露一点,整个摄像头驱动框架和上层调用,都会涉及到v4l2的开发…

Mac电脑python多版本环境安装与切换

我当前是python3.9.6环境,需要使用3.9.8环境,通过brew安装3.9.8版本,然后通过pyenv切换环境 步骤 1: 安装 pyenv brew install pyenv brew install pyenv-virtualenv 步骤 2: 安装 Python 3.9.8(使用 pyenv 安装指定版本的 Pyth…

小程序配置文件 —— 14 全局配置 - tabbar配置

全局配置 - tabBar配置 tabBar 字段:定义小程序顶部、底部 tab 栏,用以实现页面之间的快速切换;可以通过 tabBar 配置项指定 tab 栏的表现,以及 tab 切换时显示的对应页面; 在上面图中,标注了一些 tabBar …

Jupyter在运行上出现错误:ModuleNotFoundError: No module named ‘wordcloud‘

问题分析:显示Jupyter未安装这个模板 解决办法:在单元格内输入:!pip install wordcloud

github提交不上去,网络超时问题解决

问题出现的原因: DNS服务器数据不同步,github的服务器发送迁移,在本地缓存的ip地址现在无效了。 解决方案: 1)点击这里,查询github.com最新的ip地址 2.0)编辑linux系统地址缓存文件&#x…

Windows Subsystem for Linux (WSL)

目录 定义与功能 版本与特点 应用场景 启用 WSL 功能 更新WSL及其内核 下载Linux发行版本 WSL(Windows Subsystem for Linux)是微软在Windows 10和Windows 11中引入的一项功能,使用户能够在Windows上原生运行Linux的命令行工具和应用程…

图像处理-Ch5-图像复原与重建

Ch5 图像复原 文章目录 Ch5 图像复原图像退化与复原(Image Degradation and Restoration)噪声模型(Noise Models)i.i.d.空间随机噪声(Generating Spatial Random Noise with a Specified Distribution)周期噪声(Periodic Noise)估计噪声参数(Estimating Noise Parameters) 在仅…

Mac 环境 VVenC 编译与编码命令行工具使用教程

VVenC VVenC 是一个开源的高效视频编码器,专门用于支持 H.266/VVC (Versatile Video Coding) 标准的编码。H.266/VVC 是继 HEVC (H.265) 之后的新一代视频编码标准,主要目的是提供比 HEVC 更高的压缩效率,同时保持或提高视频质量。H.266/VVC…

HTML——41有序列表

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>有序列表</title></head><body><!--有序列表&#xff1a;--><!--1.列表中各个元素在逻辑上有先后顺序&#xff0c;但不存在一定的级别关系-->…

详细教程:SQL2008数据库备份与还原全流程!

数据的安全性至关重要&#xff0c;无论是操作系统、重要文件、磁盘存储&#xff0c;还是企业数据库&#xff0c;备份都是保障其安全和完整性的关键手段。拥有备份意味着即使发生误删、系统崩溃或病毒攻击等问题&#xff0c;也能迅速通过恢复功能解决&#xff0c;避免数据丢失带…

IDEA工具使用介绍、IDEA常用设置以及如何集成Git版本控制工具

文章目录 一、IDEA二、建立第一个 Java 程序三、IDEA 常用设置四、IDEA 集成版本控制工具&#xff08;Git、GitHub&#xff09;4.1 IDEA 拉 GitHub/Git 项目4.2 IDEA 上传 项目到 Git4.3 更新提交命令 一、IDEA 1、什么是IDEA&#xff1f; IDEA&#xff0c;全称为 IntelliJ ID…

STM32 I2C通信协议

单片机学习&#xff01; 文章目录 目录 文章目录 前言 一、I2C通信 1.1 I2C总线 1.2 I2C通信线 1.3 同步半双工且数据应答 1.4 一主多从 二、硬件电路 2.1 I2C电路模型 2.2 I2C接线要求 2.3 I2C上拉电阻作用 三、I2C时序基本单元 3.1 起始终止条件 3.1.1 起始条件 3.1.2 终止条…

在线免费批量生成 Word 文档工具

为了方便的批量生成 Word 文档&#xff0c;写了个在线 Word 文档批量生成工具&#xff0c;可以根据 Excel 数据和 Word 模板批量生成大量个性化的 Word 文档。适用于需要批量生成格式统一但内容不同的文档场景。比如&#xff1a; 批量生成证书、奖状批量生成合同、协议批量生成…

再见了我的2024

目录 户外运动 阅读及影视剧欣赏 提升专业技能 外婆走了 消费分析 小妹家的二宝 2024 summary 2025年几个小目标 2024生活记录 2024年最后一天&#xff0c;就这样过去了。 总是来不及好好地告个别&#xff0c;就像我们的年老的亲人一样&#xff0c;见一面&#xff0c;少…

Java工程师实现视频文件上传minio文件系统存储及网页实现分批加载视频播放

Java工程师实现minio存储大型视频文件网页实现分批加载视频播放 一、需求说明 老板给我出个题目&#xff0c;让我把的电影文件上传到minio文件系统&#xff0c;再通过WEB端分配加载视频播放&#xff0c;类似于我们普通的电影网站。小编把Java代码共享出来。是真正的能拿过来直…

Three.js教程004:坐标辅助器与轨道控制器

文章目录 坐标辅助器与轨道控制器实现效果添加坐标辅助器添加轨道控制器完整代码完整代码下载坐标辅助器与轨道控制器 实现效果 添加坐标辅助器 创建坐标辅助器: const axesHelper = new Three.AxesHelper(5);添加到场景中: scene.

【优选算法 分治】深入理解分治算法:分治算法入门小专题详解

快速排序算法 (1) 快速排序法 (2) 快排前后指针 (3) 快排挖坑法 颜色分类 题目解析 算法原理 算法原理和移动零非常相似 简述移动零的算法原理 cur 在从前往后扫描的过程中&#xff0c;如果扫描的数符合 f 性质&#xff0c;就把这个数放到 dest 之…