Dockerfile文件解析

什么是 Dockerfile?

Dockerfile是用于构建自定义 Docker 镜像的文本文件,是由一系列命令和参数构成的脚本。我们通过docker build命令把 Dockerfile 构建成镜像。

Dockerfile 文件的基本结构

Dockerfile一般分为:基础镜像、镜像元信息、镜像操作指令和容器启动时执行指令。

Dockerfile 文件说明

Docker 从上到下的顺序运行 Dockerfile 的指令。字符为 Dockerfile 中的注释。文件一般命名为 Dockerfile

Dockerfile 常用的指令

  • FROM 指令

FROM是指定基础镜像,定制的镜像都是基于 FROM 的镜像。

格式:	
	FROM <image>
	FROM <image>:<tag>
	FROM <image>@<digest>
其中 tag 或 digest 是可选的,如果不使用这两个值时,会使用 latest 版本的基础镜像。
示例:FROM node:12.14.1
  • MAINTAINER 指令

MAINTAINER用来声明维护者信息,但该命令已经过期,推荐使用 LABEL。

格式:
	MAINTAINER <name> 镜像维护者的姓名和邮箱地址
  • LABEL 指令

LABEL用于添加元数据到镜像,声明构造信息、作者、机构等。LABEL 是以键值对形式出现。

格式:
	LABEL <key>=<value> <key>=<value> ...
  • ENV

设置环境变量,在后续的指令中,就可以使用这个环境变量。

格式:
	ENV <key> <value>  #<key>后面的所有内容均视为<value>的一部分,因此一次只能设置一个变量。
	ENV <key>=<value> <key>=<value> ...  #可设置多个环境变量。
我们可以通过 ${key} 在其它指令中来引用变量, 也可以通过 docker run 中的 -e <ENV> 来动态赋值。
  • ARG 指令

构建参数,与 ENV 作用一至。不过作用域不一样。ARG设置的环境变量仅对 Dockerfile 内有效,也就是说只有docker build的过程中有效,构建好的镜像内不存在此环境变量。
ARG用于传递给构建运行时的变量。ARG 指令是定义参数名称,以及定义其默认值。该默认值可以在构建命令docker build中用--build-arg <参数名>=<value>来覆盖。

格式:
	ARG <参数名>[=<默认值>]

在1.13之前的版本,要求--build-arg中的参数名,必须在 Dockerfile 中用 ARG 定义过,否则会报错退出构建。从1.13开始这种严格的限制被放开,不再报错退出,而是显示警告信息,并继续构建。

  • WORKDIR 指令

WORKDIR指定工作目录。在创建容器后,终端默认登录进入的目录。

格式:
	WORKDIR <PATH>

通过 WORKDIR 设置工作目录,Dockerfile 中的其它指令 RUN、CMD、ENTRYPOINT、ADD、COPY等命令都会在该目录下执行。在使用docker run运行容器时,可以通过-w参数覆盖构建时所设置的工作目录。

  • ADD 指令

ADD用于将本地文件添加到镜像中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget

格式:
	ADD <源路径src> <目标路径dest>
  • COPY 指令

COPY的功能类似于ADD,但是不会自动解压文件,也不能访问网络资源。

  • RUN 指令

RUN用来执行构建镜像时的命令。

格式:
	shell 执行格式:RUN <命令行>
	exec 执行格式:RUN ["可执行文件", "参数1", "参数2"]

RUN指令创建的中间镜像会被缓存,并会在下次构建中使用。如果不想使用缓存镜像,可在docker build构建时指定--no-cache参数。

  • CMD 指令

CMD是在容器启动时才执行的命令。格式跟RUN类似。如果Dockerfile中存在多个 CMD 指令,仅最后一个生效。

  • ENTRYPOINT 指令

ENTRYPOINTCMD非常类似,不同的是通过docker run执行命令携带的参数不会覆盖ENTRYPOINT,而是传递给它。

  • EXPOSE 指令

EXPOSE是声明运行时容器提供服务端口号。

格式:
	EXPOSE [<port>...]
  • VOLUME 指令

VOLUME用于指定持久化目录。

VOLUME ["<路径1>", "<路径2>"...]

定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。

  • USER 指令

USER指定运行容器时的用户名或 UID。

USER <用户名>[:<用户组>]

如果使用USER指定用户,Dockerfile 中其它命令 RUNCMDENTRYPOINT都将使用该用户。你可以通过docker run运行容器时,可以通过-u参数来覆盖指定用户。

  • ONBUILD 指令

ONBUILD作用是当所构建的镜像被用做其它镜像的基础镜像,该镜像中的ONBUILD 命令就会触发。

ONBUILD <其它指令>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值