【docker 】Dockerfile指令学习

学习文档地址

上篇文章:【docker 】基于Dockerfile创建镜像

Dockerfile指令文档地址

.dockerignore 文件

Dockerfile指令

常见的指令

Dockerfile 指令说明
FROM指定基础镜像,用于后续的指令构建。
MAINTAINER指定Dockerfile的作者/维护者。(已弃用,推荐使用LABEL指令)
LABEL添加镜像的元数据,使用键值对的形式。
RUN在构建过程中在镜像中执行命令。
CMD指定容器创建时的默认命令。(可以被覆盖)
ENTRYPOINT设置容器创建时的主要命令。(不可被覆盖)
EXPOSE声明容器运行时监听的特定网络端口。
ENV在容器内部设置环境变量。
ADD将文件、目录或远程URL复制到镜像中。
COPY将文件或目录复制到镜像中。
VOLUME为容器创建挂载点或声明卷。
WORKDIR设置后续指令的工作目录。
USER指定后续指令的用户上下文。
ARG定义在构建过程中传递给构建器的变量,可使用 "docker build" 命令设置。
ONBUILD当该镜像被用作另一个构建过程的基础时,添加触发器。
STOPSIGNAL设置发送给容器以退出的系统调用信号。
HEALTHCHECK定义周期性检查容器健康状态的命令。
SHELL覆盖Docker中默认的shell,用于RUNCMDENTRYPOINT指令。

注释

指令不区分大小写。然而,惯例是他们要大写,以便更容易地将他们与论点区分开来。

Docker按顺序运行Dockerfile中的指令。Dockerfile必须以FROM指令开头。这可能在解析器指令、注释和全局范围的ARG之后。FROM指令指定要从中构建的父映像。FROM前面只能有一个或多个ARG指令,这些指令声明Dockerfile中FROM行中使用的参数。

Docker 将以开头的行视为#注释,除非该行是有效的 解析器指令。行中其他任何位置的标记#都被视为参数。

为了向后兼容,注释 ( #) 和指令(例如RUN)之前的前导空格将被忽略,但不鼓励这样做。在这些情况下,不会保留前导空格,因此以下示例是等效的:

示例1:
        # 第一个DockerfileFROM nginxRUN echo "<h1>程序员食堂 的第一个Dockerfile </h1>" >> /usr/share/nginx/html/index.html

指令参数中的空格(例如下面的命令RUN)将被保留

示例2:
# 第一个Dockerfile
FROM nginxRUN echo "<h1>程序员食堂 的第一个Dockerfile </h1>" >> /usr/share/nginx/html/index.html

ENV  环境变量

环境变量官网地址

环境变量(用ENV声明)也可以在某些指令中用作由 Dockerfile. 还可以处理转义以将类似变量的语法按字面意思包含到语句中。

ENV指令将环境变量设置<key>为值 <value>。该值将存在于构建阶段中所有后续指令的环境中,并且 也可以在许多指令中内联替换。该值将被解释为其他环境变量,因此如果不转义引号字符将被删除。与命令行解析一样,引号和反斜杠可用于在值中包含空格。

示例1:
ENV MY_NAME="zhang san  feng"
ENV MY_HOME=wu\ dang\  shan
ENV MY_WORK=KungFuTeacher

ENV指令允许<key>=<value> ...一次设置多个变量,下面的示例将在最终图像中产生相同的最终结果:

示例2:
ENV MY_NAME="zhang san  feng"  MY_HOME=wu\ dang\  shan  MY_WORK="kung fu teacher"

FROM指令

定制的镜像都是基于 FROM 的镜像,这里的 nginx 就是定制需要的基础镜像。并且必须是第一条指令。

如果不以任何镜像为基础,那么写法为:FROM scratch。

语法
FROM [image]FROM [image]:[tag]FROM [image]:[digest]

<tag><digest> 是可选项,如果没有选择,那么默认值为latest

RUN指令

功能为运行指定的命令
RUN命令有两种格式,shell 格式exec 格式

shell 格式:
# [命令行命令] 等同于,在终端操作的 shell 命令。
#  RUN [命令行命令]RUN echo "<h1>程序员食堂 的第一个Dockerfile </h1>" >> /usr/share/nginx/html/index.html
exec 格式:
RUN ["可执行文件", "参数1", "参数2"]# nginx-run.sh 是一个执行nginx的脚本RUN ["./nginx-run.sh", "start"] 等价于 RUN ./nginx-run.sh start

MAINTAINER指令(不推荐)

MAINTAINER指令是维护者信息。

# MAINTAINER <name>MAINTAINER chengxuyuanshitang

COPY指令

COPY指令,从上下文目录中复制文件或者目录到容器里指定路径,可以是通配符表达式,其通配符规则要满足 Go 的 filepath.Match 规则。不会自动解压文件,也不能访问网络资源。

# 语法:
OPY [--chown=<user>:<group>] <源路径1>...  <目标路径>
COPY [--chown=<user>:<group>] ["<源路径1>",...  "<目标路径>"]#示例:#添加 "test" 到 `WORKDIR` /test/  
COPY test* /test/# 添加 "test" 到 /test/   
COPY test?.txt /test/

[--chown=<user>:<group>]:可选参数,用户改变复制到容器内文件的拥有者和属组。

ADD指令

官方推荐使用 COPY。

ADD指令将本地文件添加到容器中。

执行 【源文件】 为 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,会自动复制并解压到 【目标路径】。

在不解压的前提下,无法复制 tar 压缩文件。会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。具体是否使用,可以根据是否需要自动解压来决定。

可以访问网络资源,类似wget。

# 格式:
ADD <源文件>... <目标路径>
ADD ["<源文件>",... "<目标路径>"] 用于支持包含空格的路径#示例:# 添加所有以"test"开头的文件到/test/目录下
ADD test* /test/          # ? 替代一个单字符,添加所有以"test"开头结尾是一个字符的文件到/test/目录下,例如:"test1.txt"
ADD test?.txt /test/# 添加 "test" 到 `WORKDIR` /test/   
ADD test test/# 添加 "test" 到 /test/     
ADD test /test/    

CMD指令

构建容器后调用,也就是在容器启动时才进行调用。类似于 RUN 指令,用于运行程序。

CMD 在docker run 时运行。

为启动的容器指定默认要运行的程序,程序运行结束,容器也就结束。CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。

如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效

# 格式:
CMD <shell 命令> 
CMD ["<可执行文件或命令>","<param1>","<param2>",...] 
CMD ["<param1>","<param2>",...]  # 示例:
CMD echo "This is chengxuyuan test." 
CMD ["/usr/bin/ls","--help"]

ENTRYPOINT指令

类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。

如果运行 docker run 时使用了 --entrypoint 选项,将覆盖 ENTRYPOINT 指令指定的程序

如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效

# 格式:
ENTRYPOINT ["<executeable>","<param1>","<param2>",...]

构建上下文

docker build命令从Dockerfile和上下文docker buildx build构建 Docker 映像 。

构建上下文是您的构建可以访问的文件集。传递给构建命令的位置参数指定要用于构建的上下文。

命令:

docker build [OPTIONS] PATH | URL | -

可以传递以下任何输入作为构建的上下文:

  • 本地目录的相对或绝对路径
  • Git 存储库、tarball 或纯文本文件的远程 URL
  • docker build通过标准输入通过管道传输到命令的纯文本文件或 tarball

有关可在构建中使用的不同类型的文件系统上下文的更多信息,请参阅:

  • 本地文件
  • Git 存储库
  • 远程 tarball




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

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

相关文章

RK3568平台(网络篇) 有线网络基本概念及测试手法

一.什么是交换机&#xff1f; 交换机是一种用于电(光)信号转发的网络设备。它可以为接入交换机的任意两个网络节点提供独享的电信号通路。最常见的交换机是以太网交换机。交换机工作于OSI参考模型的第二层&#xff0c;即数据链路层。交换机拥有一条高带宽的背部总线和内部交换…

c++原子变量

原子变量 概述 ​ C11提供了一个原子类型std::atomic<T>&#xff0c;通过这个原子类型管理的内部变量就可以称之为原子变量&#xff0c;我们可以给原子类型指定bool、char、int、long、指针等类型作为模板参数&#xff08;不支持浮点类型和复合类型&#xff09;。 ​ …

51单片机应用从零开始(十一)·数组函数、指针函数

51单片机应用从零开始&#xff08;九&#xff09;数组-CSDN博客 51单片机应用从零开始&#xff08;十&#xff09;指针-CSDN博客 目录 1. 用数组作函数参数控制流水花样 2. 用指针作函数参数控制 P0 口 8 位 LED 流水点亮 1. 用数组作函数参数控制流水花样 要在51单片机中…

回溯算法第一篇(子集树问题【三种思路】、0-1背包问题、最小重量机器设计问题)

目录 1. 子集树问题 解法一 解法二 解法三 2. 0-1背包问题&#xff08;使用子集树解决&#xff09; 3. 最小重量机器设计问题 1. 子集树问题 子集力扣链接 题目描述&#xff1a;给你一个整数数组 nums &#xff0c;数组中的元素 互不相同 。返回该数组所有可能的子集&am…

NV040D语音芯片应用于取暖桌:智能语音提高用户体验

科技与生活的结合&#xff0c;是科技发展的展示。天气的降温&#xff0c;取暖桌越来越取得用户的心&#xff0c;时至今日传统的取暖桌已经没有办法满足用户的需求&#xff0c;智能语音取暖桌给用户的生活带来了不一样的体验。 NV040D语音芯片是一款性能稳定的芯片&#xff0c;拥…

XS9922B-国产cvi协议,满足国内车载视频传输领域国产化降本需求

XS9922B 是一款 4 通道模拟复合视频解码芯片&#xff0c;支持 HDCCTV 高清协议和 CVBS 标 清协议&#xff0c;视频制式支持 720P/1080P 高清制式和 960H/D1 标清制式。芯片将接收到的高清 模拟复合视频信号经过模数转化&#xff0c;视频解码以及 2D 图像处理之后&#xff0c;转…

Citespace、vosviewer、R语言的文献计量学可视化分析

文献计量学是指用数学和统计学的方法&#xff0c;定量地分析一切知识载体的交叉科学。它是集数学、统计学、文献学为一体&#xff0c;注重量化的综合性知识体系。特别是&#xff0c;信息可视化技术手段和方法的运用&#xff0c;可直观的展示主题的研究发展历程、研究现状、研究…

星座生肖运势配对+周公解梦流量主小程序源码系统 带完整的安装部署教程·

近年来&#xff0c;人们对于星座和生肖的配对以及周公解梦的需求越来越大。罗峰发现了一款集星座、生肖配对和周公解梦于一体的流量主小程序源码系统。该系统具有丰富的功能和易于部署的特点&#xff0c;旨在为广大用户提供更加便捷、高效的星座生肖配对和周公解梦服务。 以下…

差分法详解

前言 差分算法适用于一些需要对数组和序列进行增减、查询和更新操作的问题&#xff0c;可以提高计算效率和降低存储空间的需求。今天我将带大家学习如何使用差分法&#xff0c;会以例题来带大家使用差分法以增进理解。话不多说让我们开始吧&#xff01; 文章目录 一维差分尾声…

spring boot集成mybatis和springsecurity实现登录认证功能

参考了很多网上优秀的教程&#xff0c;结合自己的理解&#xff0c;实现了登录认证功能&#xff0c;不打算把理论搬过来&#xff0c;直接上代码可能入门更快&#xff0c;文中说明都是基于我自己的理解写的&#xff0c;可能存在表述或者解释不对的情况&#xff0c;如果需要理论支…

camunda流程引擎——Java集成Camunda(上)(笔记)

目录 一、以一个处理流程开始1.1 后端1.2 前端1.3 执行 二、Camunda的补充2.1 使用方式2.2 可视化平台的Cockpit2.3 流程相关数据2.4 表介绍2.5 前端集成Modeler 三、用Java集成Camunda3.1 集成配置3.2 自动部署3.2.1 修改process.xml位置3.2.2 多进程引擎配置与多租户 3.3 历史…

typedef的使用

在C语言中&#xff0c;有一个关键字叫做typedef&#xff0c;有些人对此感到很疑惑。不熟悉此知识的同学都会对编程失去细心&#xff0c;直接劝退&#xff08;因为之前我就是这样&#xff09;。、 因为好不容易认识了C语言中所有的关键字&#xff08;就是类型吧&#xff0c;像啥…

详细教程 - 从零开发 Vue 鸿蒙harmonyOS应用 第一节

关于使用Vue开发鸿蒙应用的教程,我这篇之前的博客还不够完整和详细。那么这次我会尝试写一个更加完整和逐步的指南,从环境准备,到目录结构,再到关键代码讲解,以及调试和发布等,希望可以让大家详实地掌握这个过程。 一、准备工作 下载安装 DevEco Studio 下载地址&#xff1a;…

逻辑回归的介绍和应用

逻辑回归的介绍 逻辑回归&#xff08;Logistic regression&#xff0c;简称LR&#xff09;虽然其中带有"回归"两个字&#xff0c;但逻辑回归其实是一个分类模型&#xff0c;并且广泛应用于各个领域之中。虽然现在深度学习相对于这些传统方法更为火热&#xff0c;但实…

基础算法(3):排序(3)插入排序

1.插入排序实现 插入排序的工作原理是&#xff1a;通过构建有序序列&#xff0c;对于未排序数据&#xff0c;在已经排序的序列从后向前扫描&#xff0c;找到位置并插入&#xff0c;类似于平时打扑克牌时&#xff0c;将牌从大到小排列&#xff0c;每次摸到一张牌就插入到正确的位…

12.4~12.14概率论复习与相应理解(学习、复习、备考概率论,这一篇就够了)

未分配的题目 概率计算&#xff08;一些转换公式与全概率公式&#xff09;与实际概率 &#xff0c;贝叶斯 一些转换公式 相关性质计算 常规&#xff0c;公式的COV与P 复习相关公式 计算出新表达式的均值&#xff0c;方差&#xff0c;再套正态分布的公式 COV的运算性质 如…

前后端项目,nginx部署前端项目后刷新浏览器报错404的问题

问题&#xff1a; Vue单页应用项目打包部署Nginx服务器后&#xff0c;刷新页面后&#xff0c;出现404。 原因&#xff1a; 加载单页应用后路由改变均由浏览器处理&#xff0c;而刷新时将会请求当前的链接&#xff0c;而Nginx无法找到对应的页面。 解决&#xff1a; 在Nginx配…

python爬虫学习-批量爬取图片

python爬虫学习-批量爬取图片 爬虫步骤爬取前十页图片到本地根据页码获取网络源码使用xpath解析网页解析网页并下载图片主函数如下 爬取的网站为站长素材&#xff08;仅做学习使用&#xff09; 爬取的目标网站为 https://sc.chinaz.com/tupian/qinglvtupian.html如果爬取多页&…

大数据讲课笔记1.2 Linux用户操作

文章目录 零、学习目标一、导入新课二、新课讲解&#xff08;一&#xff09;用户账号管理1、用户与用户组文件2、用户账号管理工作 &#xff08;二&#xff09;用户操作1、切换用户&#xff08;1&#xff09;语法格式&#xff08;2&#xff09;切换到普通用户&#xff08;3&…

NVH软件导入音频文件

我们经常会遇到一种情况是&#xff1a;车主上下班路上经常会听到一个异响&#xff0c;但车交到我们手上&#xff0c;我们怎么在外面去试车&#xff0c;都听不到这个异响&#xff0c;或者条件达不到重现不了这个异响。如果是这样&#xff0c;我们是不是有点崩溃&#xff1f;但&a…