Dockerfile 语法梳理及介绍

news2024/12/23 23:13:46

1. FROM

FROM参数:从什么基础镜像构建新的镜像。

举例 : FROM centos, FROM ubuntu, FROM hello-world

使用 centos 镜像作为基础镜像。

注意:尽量使用官方的镜像作为基础镜像, 为了安全起见

2. LABEL

LABEL参数:从上到下依次为,作者、版本、描述


LABEL maintainer = "abc@163.com"

LABEL version = "1.1.1"

LABEL description="this is description"

3. RUN

RUN命令:构建镜像所需要执行的指令并创建新的Image Layer

RUN yum update && yum install -y vim \ python-env # 反斜线换行

RUN apt-get update && apt-get install -y perl \ pwgen --no-install-recommends && rm -rf \ /var/lib/apt/lists/* # 注意清理cache

RUN /bin/bash -c 'source $HOME/.bashrc;echo $HOME'

# 注意事项

为了美观,复杂的RUN请用反斜线换行!避免无用分层,合并多条命令为一行!

4. WORKDIR

WORKDIR参数:指定目录后续操作在指定的目录进行

WORKDIR /root 

WORKDIR /test # 如果没有会自动创建目录

WORKDIR demo

RUN pwd  # 输出结果应该是 /test/demo


# 注意事项

在dockerfile中尽量使用WORKDIR,不要使用RUN cd,尽量使用绝对目录

5. ADD and COPY

ADD和COPY:相同点都是将本地文件添加到镜像中

ADD:它可以将压缩文件进行解压


ADD hello /

ADD test.tar.gz / # 添加到根目录并解压

WORKDIR /root

ADD hello test/ # /将hello文件添加到 /root/test/hello

WORKDIR /root

COPY hello test/


# 注意

大部分情况下,COPY优先于ADD! 

ADD除了COPY还有额外的功能(解压)!

添加远程文件/目录请使用curl或者wget

6. ENV

ENV参数:设置环境变量


# 引用常量

RUN apt-get install  -y mysql-server="${MYSQL_VERSION}" \ &&  rm -rf /var/lib/apt/lists/*  

# 注意

ENV 尽量去使用,增加可维护性

7. CMD 和 ENTRYPOINT

CMD参数:设置容器启动后默认执行的命令和参数


两种格式:

1. shell格式

RUN apt-get install -y vim

CMD echo "hello docker"

ENTRYPOINT echo "hello docker"  

使用shell方式创建镜像

使用shell模式下执行命令和linux执行shell命令一样,直接识别$name变量进行替换

2. exec格式

RUN ["apt-get","install", "-y", "vim"]

CMD ["/bin/echo", "hello docker""]

ENTRYPOINT ["/bin/echo", "hello docker"]

exec模式下,只是单纯的当作字符串进行输出,如果想要shell的效果,可以将参数进行修改

ENTRYPOINT ["/bin/bash", "-c",  "echo hello docker"], 此修改方式为在bash中执行,第三个参数为执行命令。

# 注意事项

容器启动时默认执行命令

如果docker run指定了其他命令,CMD命令被忽略

如果定义了多个CMD,只有最后一个会执行

 

ENTRYPOINT参数:让容器以应用程序或者服务的形式运行

不会被忽略,一定会执行

CMD命令会被覆盖


使用ENTRYPOINT执行命令不会被覆盖,会执行

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

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

相关文章

交流汽车充电桩也有大功率的,为什么市场还是想做直流的?

新能源汽车交流充电桩和直流充电桩的区别是什么? 交流汽车充电桩也有大功率的,为什么市场还是想做直流的? 交流充电桩和直流充电桩最本质的区别是充电时车载设备的参与程度。 交流充电桩就好比是一双筷子,它把食物送到嘴里&#…

Windows 编译CEF源码详细记录

背景 默认的CEF不支持音视频功能&#xff0c;需要下载源码将ffmpeg开关打开&#xff0c;再进行编译。 Linux编译参考&#xff1a; 《Linux CEF源码下载编译详细记录》 创建目录结构 code/automate/automate-git.py <-- CEF build scriptchromium_git/cef/ …

Vue数组变更方法和替换方法

一、可以引起UI界面变化 Vue 将被侦听的数组的变更方法进行了包裹&#xff0c;所以它们也将会触发视图更新。这些被包裹过的方法包括&#xff1a; push()pop()shift()unshift()splice()sort()reverse() 以上七个数组都会改变原数组&#xff0c;下面来分别讲解它们的区别&…

《C和指针》(6)指针

1、内存和地址 计算机的内存是由数以亿万计的位&#xff08;bit&#xff09;组成&#xff0c;每一个位可以容纳值0、1值。由于一个位所能表示的值的范围太有限&#xff0c;所以单独的位用处不大。通常许多为合成一组作为一个单位&#xff0c;这样就可以存储范围较大的值。下图…

【AI】Python调用讯飞星火大模型接口,轻松实现文本生成

随着chatGPT的出现&#xff0c;通用大模型已经成为了研究的热点&#xff0c;由于众所周知的原因&#xff0c;亚太地区调用经常会被禁&#xff0c;在国内&#xff0c;讯飞星火大模型是一个非常优秀的中文预训练模型。本文将介绍如何使用Python调用讯飞星火大模型接口&#xff0c…

flask-----初始项目架构

1.初始的项目目录 -apps 包 ------存放app -user文件夹 -------就是一个app -models.py --------存放表模型 -views.py -------存放主代码 -ext包 -init.py -------实例化db对象 -manage.py -----运行项目的入口 -setting.py -----配置文件 2.各文件内容 manage…

剑指offer39.数组中出现次数超过一半的数字

这个题非常简单&#xff0c;解法有很多种&#xff0c;我用的是HashMap记录每个元素出现的次数&#xff0c;只要次数大于数组长度的一半就返回。下面是我的代码&#xff1a; class Solution {public int majorityElement(int[] nums) {int len nums.length/2;HashMap<Integ…

【C++】异常的使用和细节

传统C语言错误异常的方式 C语言一般使用assert来处理错误&#xff0c;assert确实很不错&#xff0c;可以把错误的行数都提示出来&#xff0c;但是&#xff0c;assert有一个致命的缺点&#xff0c;就是触发assert之后就会终止程序&#xff0c;还有一点就是在release环境下&#…

如何通过Pytest的插件,轻松切换自动化测试的环境地址?

前言 前面小编介绍了如何通过Pytest的插件来实现自动化测试的环境的切换&#xff0c;当时使用的方法是通过钩子函数进行获取命令行参数值&#xff0c;然后通过提前配置好的参数进行切换测试环境地址。加我VX&#xff1a;atstudy-js 回复“测试”&#xff0c;进入 自动化测试学…

【CDH集群】无法发出查询:Host Monitor未运行

无法发出查询:Host Monitor未运行 【CDH集群】无法发出查询:Host Monitor未运行同事的解决方案解决方法&#xff1a;删除原uuid重启agent查看新uuid修改scm数据库中HOSTS表中的agent的uuid 【CDH集群】无法发出查询:Host Monitor未运行 起初是impala报错&#xff0c;连接不上&…

武器换弹系统这节课出现的bug,角色不能正确掏枪了,只有换完弹夹以后才能正常掏枪了

UE4系列文章目录 文章目录 UE4系列文章目录前言一、蓝图实现二、错误原因三、修改后的效果 前言 在学习武器换弹系统这节课出现的bug&#xff0c;角色不能正确掏枪了&#xff0c;只有换完弹夹以后才能正常掏枪了&#xff0c;就是添加了换弹之后才影响了持枪功能&#xff0c;在…

Maven的入门级——介绍,安装,导入项目,全网最最详细教程!!,包含可能会包的错误的已经指出来了

目录 一.Maven的基本介绍 二. Maven的使用过程 使用步骤&#xff1a; 三.Maven的安装 3.1 下载 3.2 配置环境步骤 3.3配置settings.xml文件 四.入门案列 4.1 配置Eclipse环境 4.2 介绍Maven项目的结构 4.3 运行测试项目 一.Maven的基本介绍 我们可以知道在程序员做项目的时…

ngrok内网穿透可以实现资源共享吗?快解析更加简洁

随着互联网的高速发展&#xff0c;越来越多的人开始意识到内网穿透技术的重要性。在这一技术中&#xff0c;ngrok已经成为了一个备受关注的工具。然而&#xff0c;很多人对于ngrok是否可以进行资源共享存在疑问。本文将从新的角度出发&#xff0c;深入探讨这个问题。 了解什么…

SAP使用函数NUMBER_GET_NEXT创建流水号

1. 系统中设定流水号&#xff1b;使用T-Code&#xff1a;SNRO来创建一个流 输入Object&#xff1a;ZLC_001&#xff0c;然后单击创建。 然后输入Shorttext, Long text, Number length domain在写程序的时候应该会另外创建&#xff0c;这里测试就使用料号的Domain MATNR来做,其他…

Mahout教程_编程入门自学教程_菜鸟教程-免费教程分享

教程简介 Mahout 是 Apache Software Foundation&#xff08;ASF&#xff09; 旗下的一个开源项目&#xff0c;提供一些可扩展的机器学习领域经典算法的实现&#xff0c;旨在帮助开发人员更加方便快捷地创建智能应用程序。Mahout包含许多实现&#xff0c;包括聚类、分类、推荐…

利用PHP的特性做免杀Webshell

0x01 前言 最近很多家厂商都陆续开放了自己的Webshell检测引擎&#xff0c;并且公开接口&#xff0c;邀请众安全研究员参加尝试bypass检测引擎&#xff0c;并且给予奖励&#xff0c;我也参加了几场类似的活动&#xff0c;有 ASRC 的 伏魔计划 &#xff0c;也有 TSRC 的 猎刃计…

8月盛夏相约|上海国际智能家居展SSHT 精彩亮点抢先看

上海国际智能家居展览会&#xff08;SSHT&#xff09; 2023年8月29至31日 上海新国际博览中心举行 SSHT 作为国内专业智能家居展会&#xff0c;定位为“智能家居技术的行业平台”&#xff0c;以“技术整合”及“跨界合作”为主轴&#xff0c;旨在呈现不同层面的智能家居技术如…

计算机基础知识一

1、计算机系统组成 1.1 硬件 CPU&#xff1a;中央处理器、计算机核心部件、负责计算任务 内存&#xff1a;记忆功能、存储二进制数&#xff0c;内存是一个字节一个地址。 内存大小换算&#xff1a; 8 bits 1 Byte 1024 Bytes Bytes 1 KB &#xff0c; 1024 KB KB 1 …

妙盈面试(部分)

算法题1&#xff0c;二分查找即可&#xff1a; git rebase算法题2&#xff0c;求二叉树两结点的最小公共祖先 搞笑的是&#xff0c;第2道算法题我刚开始做&#xff0c;黑屏了两秒钟&#xff0c;当时其实腾讯会议软件已经崩溃了&#xff0c;但是我没注意到而是继续做题。等到做…

openGauss学习笔记-36 openGauss 高级数据管理-TRUNCATE TABLE语句

文章目录 openGauss学习笔记-36 openGauss 高级数据管理-TRUNCATE TABLE语句36.1 语法格式36.2 参数说明36.3 示例 openGauss学习笔记-36 openGauss 高级数据管理-TRUNCATE TABLE语句 清理表数据&#xff0c;TRUNCATE TABLE用于删除表的数据&#xff0c;但不删除表结构。也可以…