Dockerfile自定义制作镜像,其中10个指令的作用分析

docker容器中

镜像重要技能。

docker commit只能制作比较简单的镜像,

要制作比较完善的镜像,

自定义程度比较高的,

就需要用到dockerfile

dockerfile可以回溯历史

动态生成镜像。

FROM是基础镜像

CMD是容器创建时候默认的启动命令

CMD是一个数组固定格式

每个参数数组里面元素

/bin/ls   ==>  CMD ["/bin/ls"]
/bin/ls -l -a  ==>  CMD  ["/bin/ls","-l","-a"]
#   ${ENTRYPOINT}  是命令
#   ${@-${CMD}}   是参数
#   ${@} 是所有的参数选项之和
#   $1是第一个参数 
#   $2 是第二个参数
#   ...
#   $n 是第n个参数
#   $@ 是所有的参数之和
#   ${@-} 代表前面的变量没有设置
 ~]# echo  ${AA} ~]# echo  ${AA-abc}
abc
#   减号"-"后面代表,前面没有设置的时候,用这个参数
 ~]# AA=123
 ~]# echo  ${AA-abc}
123
#   如果AA设置了,就用设置的值
 ~]# unset AA
 ~]# echo  ${AA-abc}
abc
#   如果把AA设置的值删了,就用减号后面的值了
#   所以
#   ${@-${CMD}的意思就是,如果设置参数了,就用参数,如果没有设置,就用CMD
#   这个CMD就是默认的启动参数,如果没有设置,就用CMD写的命令来启动
#   ENTRYPOINT是,如果设置了,那么CMD就变成选项了。
#   ENTRYPOINT一旦设置了就必须执行
~]# cat  img1 
#!/bin/bash
CMD="/bin/ls -l"
ENTRYPOINT="echo"
${ENTRYPOINT} ${@-${CMD}}
~]# ./img1
/bin/ls -l
 ~]# ./img1  id
id
#  ENTRYPOINT设置echo命令后面CMD变成参数输出屏幕
#  所以ENTRYPOINT设置必须执行
~]# cat myimg/Dockerfile 
FROM  mylinux:latest
ENTRYPOINT ["echo"]
CMD ["/bin/ls", "-l"]
# FROM ENTRYPOINT CMD这三个指令dockerfile里面核心指令

文件扩展名为

.tar

.tar.gz

.tar.bz2

.tar.xz

.tar.tgz

这些类型文件

ADD指令这些文件解压

COPY指令不会解压这些文件

镜像时候所有文件都要放在镜像那个目录里面也就是Dockerfile所在目录

指令

说明

FROM

指定基础镜像

ENTRYPOINT

默认容器启动命令

CMD

有ENTRYPOINT时,CMD是启动参数;没有ENTRYPOINT时,CMD是启动命令;

可以容易被docker run 命令覆盖参数,比如:docker run myimage echo "Good!"

ADD

文件拷贝容器自动解压容器联网下载文件比如 ADD http://www.abc.com/abc.tar /tmp/

COPY

文件拷贝容器解压容器联网不能下载

RUN

容器内执行命令可以多条比如RUN touch file1RUN yum -y install nginx

USER

在容器内切换用户相当于sudo -u user

ENV

设置环境变量某些指令需要环境变量才能正确执行比如

ENV PATH=${PATH}:/usr/local/nginx/sbin   # 指令寻址变量拼接nginx可执行文件

ENV ETCDCTL_API=3

WORKDIR

指定工作目录,有些任务需要,比如ansible、编译./configure

EXPOSE

对外声明容器将要使用端口号和协议,方便健康检测程序进行检测

WORKDIR的用法,比如
RUN touch  f1
WORKDIR /tmp
RUN touch f2     # 在/tmp目录创建f2文件
#通过Dockerfile里面WORKDIR,也可以知悉软件比如源码编译安装nginx WORKDIR /usr/local/nginx

ENTRYPOINT和CMD的单独用法,和结合用法:

  • 只使用 CMD

    • CMD 指定的命令将作为容器启动时的命令。
    • 如果用户没有通过 docker run 指定其他命令,那么 CMD 指定的命令将被执行。
  • 只使用 ENTRYPOINT

    • ENTRYPOINT 指定的命令将作为容器启动时的主程序。
    • 如果用户没有通过 docker run 指定其他命令,那么 ENTRYPOINT 指定的命令将被执行。
    • 当你想定义一个不可轻易覆盖的主程序时,使用 ENTRYPOINT
    • 例如,一个数据库容器可能总是需要运行数据库服务,不允许用户轻易改变这一点。
    • ENTRYPOINT 不容易被覆盖,除非使用 --entrypoint 显式指定。
  • 结合使用 ENTRYPOINT 和 CMD

    • CMD 指定的内容将成为 ENTRYPOINT 指定命令的参数。
    • 如果用户通过 docker run 指定其他命令,这些命令将覆盖 CMD 指定的参数。
# apache镜像,用Dockerfile制作示例:
httpd]# cat Dockerfile 
FROM mylinux:latest
RUN  dnf -y  install  httpd php  && dnf clean all
RUN  sed  -ri -e 's,^Load,#&,'  -e  's,^#(.*mod_mpm_prefork.so)$,\1,'  /etc/httpd/conf.modules.d/00-mpm.conf
ADD  myweb.tar.gz  /var/www/html/
ENV  LANG=C
WORKDIR  /var/www/html
EXPOSE 80/tcp
CMD ["/usr/sbin/httpd", "-DFOREGROUND"]docker build  -t  httpd:latest  httpd/

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

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

相关文章

安全热点问题

安全热点问题 1.DDOS2.补丁管理3.堡垒机管理4.加密机管理 1.DDOS 分布式拒绝服务攻击,是指黑客通过控制由多个肉鸡或服务器组成的僵尸网络,向目标发送大量看似合法的请求,从而占用大量网络资源使网络瘫痪,阻止用户对网络资源的正…

Android webview拦截H5的接口请求并返回处理好的数据

Android webview拦截H5的接口请求并返回处理好的数据 Android 可以通过 WebView 的 shouldInterceptRequest 方法拦截到 H5 中的网络请求。这是一个 WebViewClient 中的回调方法,允许开发者在 WebView 发起网络请求时对其进行处理和修改。 具体使用方法如下&#…

TMStarget学习——T1 Segmentation数据处理及解bug

最新学习季公俊老师的神器 TMStarget 的第一个模块基于结构像的靶区计算T1 segmentation。下面上步骤: (1)在github 上下载 TMStarget https://github.com/jigongjun/Neuroimaging-and-Neuromodulation (2)按照要求下载依赖工具软件AFQ、vistasoft、SPM12 &#…

OpenAI o1团队突破性论文:『过程推理』中数学推理能力大幅提升,从正确中学习的新方法

原创 超 近年来,大型语言模型(LLMs)在复杂的多步推理任务中取得了令人瞩目的进展。这些模型能够生成逐步的思维链,解决从小学数学到高等微积分的各种问题。然而,即使是最先进的模型也常常陷入逻辑陷阱,产生看似合理但实际错误的推…

只装了WPS,DOC文档无法打开

只装了WPS,DOC文档无法打开 打开WPS --> 全局设置 --> 设置 --> 文件格式关联 --> 与office 2007兼容 也可以选择office 2003 或 office 2010 兼容 dox文件的默认打开方式也变为WPS

1.3 计算机网络的分类

欢迎大家订阅【计算机网络】学习专栏,开启你的计算机网络学习之旅! 文章目录 前言一、按分布范围分类二、按传输技术分类三、按拓扑结构分类四、按使用者分类五、按传输介质分类 前言 计算机网络根据不同的标准可以被分为多种类型,本章从分布…

iostat 命令:系统状态监控

一、命令简介 ​iostat ​命令用于报告系统中 CPU、磁盘、tty 设备和 CPU 利用率统计信息。 ‍ 需安装 sysstat ​软件包,该软件包提供了一组工具,包括 iostat​、sar​、mpstat ​等,用于系统性能监控和报告。 ‍ 二、命令参数 iostat…

STM32 MPU加速效果测试

测试代码&#xff1a; static volatile uint32_t cnt;cnt 0;uint64_t time time_spent({while (cnt < 1000000){cnt;}});log_info("test time spent: %llu us\r\n", time); 结果&#xff1a; //未开启Cache fmc_ram test: uint32_t spent time: 955963 us uin…

STM32之串口通信

什么是串口 串行通信接口&#xff1a;指按位发送和接收的接口&#xff0c;如RS232/422/485 RS232电平和COMS/TTL电平对比 RS232电平&#xff1a;逻辑1&#xff1a;-15V ~ -3V 逻辑0:3V ~ 15V CMOS电平: 逻辑1&#xff1a;3.3V 逻辑0&#xff1a;0V &#xff08;STM32使用&am…

服务注册中心对比及使用场景分析

目录 引言服务注册中心简介注册中心对比 1. Consul 1.1 介绍1.2 特性1.3 使用场景1.4 AP vs CP 2. Nacos 2.1 介绍2.2 特性2.3 使用场景2.4 AP vs CP 3. ZooKeeper 3.1 介绍3.2 特性3.3 使用场景3.4 AP vs CP 对比表格选择建议总结 引言 随着微服务架构的普及&#xff0c;服…

QT----基于QML的计时器

赶上了实习的末班车,现在在做QML开发,第一天的学习成果,一个计时器.逻辑挺简单的,纯QML实现,代码在仓库QT-Timer 学习使用c的listmodel 学习使用了如何用c的listmodel来存储数据. 新建一个TImeListModel类继承自QAbstractListModel class TimeListModel : public QAbstrac…

前端大屏自适应方案

一般后台管理页面&#xff0c;需要自适应的也就是大屏这一个&#xff0c;其他的尺寸我感觉用第三方框架继承好的就挺合适的&#xff0c;当然自适应方案也可以同步到所有页面&#xff0c;但我感觉除了 to c 的项目&#xff0c;不太需要所有页面自适应&#xff0c;毕竟都是查看和…

STM32CUBEIDE FreeRTOS操作教程(五):mutex互斥信号量

STM32CUBEIDE FreeRTOS操作教程&#xff08;五&#xff09;&#xff1a;mutex互斥信号量 STM32CUBE开发环境集成了STM32 HAL库进行FreeRTOS配置和开发的组件&#xff0c;不需要用户自己进行FreeRTOS的移植。这里介绍最简化的用户操作类应用教程。以STM32F401RCT6开发板为例&am…

通过http地址下载文件

1.HttpWebResponse方法 public void GetPostContent(string url, string localSavePath) {try{ServicePointManager.SecurityProtocol SecurityProtocolType.Tls12;HttpWebRequest myRequest (HttpWebRequest)WebRequest.Create(url);myRequest.Method "GET";myR…

蓝牙技术|详谈蓝牙信道探测技术,可实现厘米级精准定位

2024年9月5日&#xff0c;蓝牙技术联盟发布蓝牙6.0核心规范。相比此前各版本&#xff0c;蓝牙核心规范6.0版的主要创新和新功能包括&#xff1a;支持蓝牙信道探测、同步适配层增强、LL扩展功能和 帧空间更新。 蓝牙信道探测 市场上已经有不少高精度定位技术了&#xff0c;像 …

ToF传感器更新

我们最近改进了 ToF 解码管道&#xff08;固件&#xff09;和 ToF 工厂校准&#xff0c;该校准已应用于我们最新的带有 ToF 相机的OAK-D-SR-PoE 1. 点云 这是直接来自摄像机的原始点云&#xff08;没有应用任何后处理过滤器&#xff09;。 2. ToF 精度 &#xff08;ToF 深度误差…

界面控件Telerik UI for WinForms 2024 Q3概览 - 支持合并单元格等

Telerik UI for WinForms拥有适用Windows Forms的110多个令人惊叹的UI控件。所有的UI for WinForms控件都具有完整的主题支持&#xff0c;可以轻松地帮助开发人员在桌面和平板电脑应用程序提供一致美观的下一代用户体验。 本文将介绍界面组件Telerik UI for WinForms在今年第一…

PostgreSQL 模式

PostgreSQL 模式 介绍 PostgreSQL 是一种功能强大的开源对象关系数据库管理系统&#xff08;ORDBMS&#xff09;&#xff0c;它以其可靠性、健壮性和支持高级功能而闻名。在 PostgreSQL 中&#xff0c;模式&#xff08;schema&#xff09;是一个重要的概念&#xff0c;它用于…

3d可视化图片:通过原图和深度图实现

1、depthy 在线体验demo: https://depthy.stamina.pl/#/ 也可以docker安装上面服务: docker run --rm -t -i -p 9000:9000 ndahlquist/depthy http://localhost:90001)首先传原图 2)再传对应深度图 3)效果 </ifra

Linux ubuntu debian系统安装UFW防火墙图形化工具GUFW

GUFW是UFW的图形化前端&#xff0c;可以通过以下命令安装&#xff1a; sudo apt install gufw安装成功后&#xff0c;可以通过应用程序菜单启动GUFW&#xff0c;在图形界面中&#xff0c;可以方便地添加、修改和删除规则&#xff0c;查看状态和日志。