dockerfile有什么用,DockeFIile知识点总结和发布自己的镜像
dockerfile有什么用,DockeFIile知识点总结和发布自己的镜像详细介绍
本文目录一览: 详解Docker——你需要知道的Docker进阶知识五
Dockerfile 是一个文本文件,其中包含了构建 Docker 镜像需要执行的命令序列。使用 docker build 命令从 Dockerfile 中读取指令来构建镜像。
构建镜像时,该过程的第一件事是将 Dockerfile 文件所在目录下的所有内容发送给 Docker 守护进程。所以大多数情况下,最好创建一个新的目录,在其中保存 Dockerfile ,以及构建镜像所需的其它文件。Dockerfile 文件所在目录也被称为构建上下文(context)。
使用 FROM 指令指定一个基础镜像,后续指令将在此镜像基础上运行:
在 Dockerfile 中可以指定一个用户,后续的 RUN , CMD 以及 ENTRYPOINT 指令都会使用该用户身份去执行,该用户必须已存在。
除了指定用户之外,还可以使用 WORKDIR 指定当前工作目录(CWD), RUN , CMD , COPY , ADD 指令将在指定的工作目录中执行。
RUN 指令用于执行命令,该指令有两种形式:
例如我们执行更新命令:
CMD 的使用方式跟 RUN 类似,不过在一个 Dockerfile 文件中只能有一个 CMD 指令,如果有多个,则只有最后一个会生效。该指令指定了启动容器时要执行的命令,例如:
可以在 docker run 时指定命令来覆盖默认的 CMD 命令,比如 docker run image echo"hello shiyanlou" 。
CMD 指令还有一种特殊用法。在 Dockerfile 中,如果使用 ENTRYPOINT 指令指定了入口命令,则 CMD 指令的内容会作为 ENTRYPOINT 指令的参数:
ENTRYPOINT 指令会覆盖 CMD 指令作为容器运行时的默认指令,并且该指令不会被 docker run 时指定的指令覆盖,如下示例:
上述文件构建出来的镜像,使用 docker run image 等同于 docker run image ls-a-l 。使用 docker run image-i-s 等同于 docker run image ls-a-i-s 。即 CMD 指令的值会被当作 ENTRYPOINT 指令的参数附加到 ENTRYPOINT 指令的后面,只有 CMD 指令可以被覆盖。
COPY 和 ADD 都用于将构建上下文中的文件,目录等复制到镜像中。使用方式如下:
`` 可以指定多个,但是其路径不能超出构建上下文范围,即必须在 Dockerfile 同级或子目录中。
不需要预先存在,不存在时会自动创建,如果使用相对路径,则 为相对于工作目录的路径。
COPY 和 ADD 的不同之处在于,ADD 可以添加远程文件,并且 `` 可以是 gzip 或 tar 等格式的压缩文件,添加时会自动进行解压。
ENV 指令用于设置环境变量:
VOLUME 指令指定要创建的挂载路径,在容器运行时,将为每个挂载路径创建一个匿名卷并挂载上去:
上述指令将会在容器运行时,创建两个匿名卷,并分别挂载到容器中的 /data1 和 /data2 路径。
学习了上面这些常见的 Dockerfile 指令之后,可以使用这些指令来构建一个镜像。如下所示,构建一个提供 ssh 服务的镜像:
构建镜像
查看镜像
启动容器
查看已经启动的容器
测试远程登录
Compose 是运行由多个容器组成的 Docker 应用的工具,使用 Compose 可以一次启动一组有关联的服务,每个服务由来自同一镜像的单个或多个容器组成。
在复杂应用中,应用一般由多个服务(service)组成,例如一个网站后台通常包含 Web 服务、数据库服务、缓存服务、消息队列服务等。
使用 Compose 的步骤如下:
目前有三种版本的 Compose 文件格式:
下载 docker-compose-Linux-x86_64
下载成功后,为了方便使用,可以将其添加到 PATH 路径下
执行完成后,就能够在终端下直接使用 docker-compose 命令了:
接下来我们将创建一个 Web 应用,该应用包含两个容器:
项目目录结构如下:
首先编辑 app/web/web.py 文件,写入下面的内容:
上述代码创建了一个简单的 Web 应用。该应用会连接 redis 服务,在访问 / 页面时,自动将变量 number 加 1。
编辑 app/web/requirements.txt 文件,输入如下内容:
requirements.txt 文件存放了 Web 应用依赖的第三方库包的名称和版本信息。
编辑 app/web/Dockerfile 文件,添加如下内容
上述 Dockerfile 定义了 Web 应用镜像,该镜像基于 python:2.7 基础镜像,在其基础上安装了应用依赖的库包,并通过 CMD 指令指定了应用的启动命令。
编辑 app/docker-compose.yml 文件:
该 docker-compose.yml 文件定义了两个服务,分别为 web 和 redis 服务,并且配置了 web 服务的端口映射和挂载目录。 depends_on 定义了依赖关系,被依赖的服会先启动。
进入 app 目录,执行 docker-compose up 命令来启动应用:
启动成功后,就可以打开网址 127.0.0.1:8001 来访问 Web 应用了。
另外一些命令:
理解了镜像和容器,你就掌握了Docker的80%
Namespaces: 做隔离pid、net、ipc、mnt、uts
Control groups: 做资源限制
Union file systems: Container和image的分层
Build from Dockerfile
Docker提供一个配置文件Dockerfile,就好比之前博主使用Vagrant工具时的Vagrantfile文件一样,通过Dockerfile文件就可以去定义一个docker image镜像,build这个dockerfile文件就可以构建出一个image镜像
Pull from Registry
类似github 仓库,可以git clone拉取仓库的文件,也可以将文件push到仓库中,那么docker pull则是在docker hub上去拉取你要的镜像
三、Container(容器)
说明:上一步在容器中安装了vim并退出了容器,那么在已退出的容器中可以看到该容器,现在则需要将这个容器commit成一个镜像,这个镜像是基于centos8基础镜像的,但是跟centos8基础基础镜像不一样的是它安装了vim
以上创建image的方式不提倡使用,因为如果发布该image,用户拿到该image是不知道该image是如何构建的,并且这种方式构建image很有可能把不安全的东西放到image里面发布出去,即该image肯定是不安全的
通过dockerfile构建镜像和commit容器生成的镜像差不多,但建议使用dockerfile构建image,这样的话只需要分享dockerfile这个文件给别人就可以了,别人通过你分享的dockerfile文件就能构建出跟你一样的image
最后我也整理了一些软件测试学习资料,对于学软件测试的小伙伴来说应该会很有帮助,为了更好地整理每个模块
需要的私信我关键字【555】免费获取哦 注意关键字是:555
全套软件测试自动化测试教学视频
300G教程资料下载【视频教程+PPT+项目源码】
全套软件测试自动化测试大厂面经
docker commit和docker file的区别
制作镜像的方式主要有两种:
通过docker commit 制作镜像
通过docker build 制作镜像
这两种方式都是通过改进已有的镜像来达到自己的目的。制作基础镜像,会在另外一篇文章“从零开始制作基础镜像”中介绍。
docker commit
docker commit 是往版本控制系统里提交一次变更。使用这种方式制作镜像,本质上是运行一个基础镜像,然后在基础镜像上进行软件安装和修改。最后再将改动提交到版本系统中。
选择基础镜像
基础镜像的选择要结合自己的需求。可以选择已有的应用镜像来改造,也可以选择Ubuntu,Debian,OpenSuse这类基础系统镜像
我们以ubuntu为例子来说明
步骤1:运行ubuntu 镜像
docker run -i -t ubuntu /bin/bash
步骤2:安装软件并修改软件配置, 比如:安装apache2
apt-get -yqq update
apt-get -y install apache2
安装完成后,对apache2进行配置和修改
步骤3:退出docker并保存镜像
使用“exit”命令退出容器
运行docker comit 命令, 进行保存
docker commit 61412230ae46 own-apache2
docker commit 命令参数说明
命令格式
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
OPTIONS:
-a, --author= 提交的镜像作者
-c, --change=[] Apply Dockerfile instruction to the created image, 没用过
-m, --message= 提交时的说明文字
-p, --pause=true 在commit时,将container 暂停
CONTAINER:
可以使用container 的名字或者ID
REPOSITORY
指定镜像仓库,上述例子中,指定的是本地存储
可以指定远程镜像仓库,如docker hub。也可自建仓库来存放image
TAG:
镜像TAG
docker build
使用docker build创建镜像需要编写Dockerfile.
步骤:
编写自己的Dcokerfile
运行docker build 命令打包镜像
仍然以apache打包为例子。以下是Dockerfile的例子
FROM ubuntu:latest
MAINTAINER sky
#Add 163 mirror for apt
ADD sources.list /etc/apt/sources.listADD .bashrc /root/.bashrcENV DEBIAN_FRONTEND noninteractive# PackagesRUN rm -rf /var/lib/apt/listsRUN apt-get update -q --fix-missingRUN apt-get -y upgrade#ubuntu wwwRUN apt-get install -y apache2 curl libapache2-mod-php5 php5-curl php5-gd php5-mysql rsync mysql-client -qqRUN apt-get autocleanRUN rm -rf /var/lib/apt/lists/*# Setup environmnt for apache's init scriptENV APACHE_CONFDIR /etc/apache2ENV APACHE_ENVVARS $APACHE_CONFDIR/envvarsENV APACHE_RUN_USER www-dataENV APACHE_RUN_GROUP www-dataENV APACHE_RUN_DIR /var/run/apache2ENV APACHE_PID_FILE $APACHE_RUN_DIR/apache2.pidENV APACHE_LOCK_DIR /var/lock/apache2ENV APACHE_LOG_DIR /var/log/apache2ENV LANG CRUN mkdir -p $APACHE_RUN_DIR $APACHE_LOCK_DIR $APACHE_LOG_DIRRUN find "$APACHE_CONFDIR" -type f -exec sed -ri ' \ s!^(\s*CustomLog)\s+\S+!\1 /proc/self/fd/1!g; \ s!^(\s*ErrorLog)\s+\S+!\1 /proc/self/fd/2!g; \' '{}' ';'EXPOSE 80CMD ["apache2", "-DFOREGROUND"]
编辑完成后,在与Dockerfile同一目录下运行docker build 命令
docker build -t apache-img .
如果没有命令出错,docker build会持续运行直到镜像创建完成
而创建的过程本质上是运行一个镜像,然后在镜像中按序执行在Dockerfile中的命令,直到执行结束。
如果中间有命令执行失败,镜像创建会停止。这时就需要看log,并修改Dockerfile,然后再次执行docker build
注:两种镜像创建方式的对比:
docker commit
docker build
难度相对容易,适合新手和对Linux不熟悉的用户相对难,要求有一定的linux和脚本基础知识
文档化
文档化在通过其他文件来实现
Dockerfile本身就是比较好的文档,可读和可理解性比较强。也可配合其他文档带来详细说明
升级,维护
后续升级和维护麻烦,需要再次运行镜像并对内部软件进行升级或者安装新软件增加特性
后续升级和维护会相对简单,可以直接在dockerfile中更改并增加新特性
具体选择哪种方式来制作镜像需要结合实际情况来选择
Dockerfile 关键字详解
FROM
FROM用来指定基础包。在上面的例子中,基础包用的是ubuntu。
MAINTAINER
镜像作者信息,或者维护人员信息
ADD
将文件拷贝到Container内文件系统对应的路径
格式 ADD
所有拷贝到Container中的文件和文件夹权限为0755,uid和gid为0
如果需要修改owner用户或者权限,需要使用RUN进行修改
ADD文件,文件路径要在docker build
中指定的
下
RUN
创建镜像时执行
ENV
用来设置环境变量
EXPOSE
Container内部服务开启的端口
主机上如果要使用,还需要在启动Container时,做host-container的商品映射
使用EXPOSE后,一些自动化布署工具可以直接读取这个信息,自动进行端口映射
EXPOSE可以有多条,指定多个端口
WORKDIR
切换工作目录,可进行多次切换(相当于cd命令)
切换目录对RUN,CMD,ENTRYPOINT有效
USER
执行container的用户,如未指定,则默认使用root用户
ENTRYPOINT
Container启动时执行的命令,一个Dockerfile中只能有一条ENTRYPOINT
ENTRYPOINT没有CMD的可替换特性
CMD
Container 启动时执行的命令,一个Dockerfile 中只能有一条CMD命令,如果有多条则只执行最后一条CMD
如果有多条命令希望在启动后执行,可以考虑使用shell 脚本
与ENTRYPOINT的区别
CMD的主要用途是为可执行的container提供默认命令
CMD在运行时是可替换的,比如
在ubuntu中,CMD指定的是/bin/bash。默认情况下运行ubuntu,container中的/bin/bash会被执行
如果使用docker run指定运行命令,那CMD会被替换掉
如:docker run ubuntu /bin/echo "this is a echo". 这时,container 启动后会执行echo 而不是/bin/bash了
ENTRYPOINT是不会替换的,如果在ubuntu镜像中加入ENTRYPOINT,那ENTRYPOINT在启动后会先被执行
CMD可以为ENTRYPOINT来提供参数
例子:
FROM ubuntu:14.10
ENTRYPOINT ["top", "-b"]
CMD ["-c"]
VOLUME
语法:VOLUME [PATH]
VOLUME指令用来设置一个挂载点,可以用来让其他容器挂载以实现数据共享或对容器数据的备份、恢复或迁移
可以将本地文件夹或者其他Container的文件夹挂载到Container中
在dockerfile文件中fromcentos:lates
Dockerfile是一个Docker镜像的描述文件。在dockerfile文件中fromcentos:lates是Dockerfile是一个Docker镜像的描述文件。
Dockerfile中ENTRYPOINT 和 CMD的区别
在Docker的系统学习教程中我们了解到使用Dockerfile构建Docker镜像为一个规范的方式,根据Dockerfile可以了解镜像中安装的组件的详细内容。Dockerfile一般由四部分组成:第一,构建的基础镜像;第二,镜像构建者的信息;第三,构建镜像过程中镜像层添加指令;第四,由该镜像启动容器时执行的程序。本篇文章中涉及到的ENTRYPOINT
和CMD
属于Dockerfile中的最后一部分,这两个Dockerfile指令是用来告知Docker后台程序启动镜像时需要执行的程序,两者有细微的差别。下面将从两者的异同以及两者联合使用的高级技巧方面对两个指令进行详解。
DockeFIile知识点总结和发布自己的镜像
1. dockerfile 的基本定义
2. dockerfile 的基本结构
3. dockerfile 的常用指令
FROM :指定基础镜像,必须是第一个命令
MAINTAINER :维护者信息
RUN :构建镜像时执行的命令
ADD :将本地文件添加到容器中
COPY 功能和 ADD 类似,区别如下
CMD :构建容器这后使用
ENTRYPOINT :配置容器,与CMD类似
LABEL :用于为镜像添加元数据
ENV :设置环境变量
EXPOSE :指定与外界交互的端口
VOLUME :用于指定持久化目录
WORKDIR :工作目录,类似于 CD 命令
USER :指定运行容器时的用户名或UID,后面的RUN也会使用指定用户,当服务不需要管理员权限时,可以通过该命令指定运行用户
ARG :用于指定传递给构建运行时的变量
ONBUILD :用于设置镜像触发器
编写dockerfile文件
通过dockerfile构建镜像
查看镜像构建的过程,可以使用 docker history 镜像id 来查看
创建完命名空间后,打开镜像仓库,创建镜像仓库,选择本地仓库
根据官方给的文档开始提交就可以,这里就不截图了
Docker 有什么优势?
1.统一的管理服务;2.持续交付上的应用;3.弹性计算;想要了解更多,我推荐你去看看时速云,他们是一家全栈云原生技术服务提供商,提供云原生应用及数据平台产品,其中涵盖容器云PaaS、DevOps、微服务治理、服务网格、API网关等。大家可以去体验一下。 如果我的回答能够对您有帮助的话,求给大大的赞。
1、更高效的利用系统资源
docker对系统资源的利用率更高,无论是应用执行速度,内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,相比虚拟机技术,一个相同配置的主机往往可以运行更多数量的应用。
2、更快速的启动时间
传统的虚拟机技术启动应用服务往往需要数分钟,而docker容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级,甚至毫秒级的启动时间,大大的节约了开发测试,部署的时间。
3、一致的运行环境
开发过程中常见的一个问题是环境一致问题,由于开发环境,测试环境,生产环境不一致,导致有些bug并未在开发过程中发现。而docker的镜像提供了除内核外完整的运行时环境,确保环境一致性,从而不会在出现“这段代码在我机器上没问题”这类问题。
4、持续支付和部署
对开发和运维人员来说,最希望就是一次创建和部署,可以在任意的地方运行。(定制应用镜像来实现集成、持续支付、部署。开发人员可以通过dockerfile来进行镜像构建,并结合持续集成系统进行集成测试,而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合持续部署系统进行自动部署)。而且使用dockerfile使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队理解应用运行所需条件,帮助更好的生产环境中部署该镜像。
5、更轻松的迁移
由于docker确保了执行环境的一致性,使得应用的迁移更加的容易。docker可以在很多平台上运行,无论是物理机、虚拟机、公有云、私有云、甚至是笔记本、其运行结果是一致的。因此用户可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。
6、更轻松的维护和拓展
docker使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得十分简单。此外,docker团队同各个开源项目团队一起维护了一大批高质量的官网镜像,既可以直接在生产环境使用,又可以作为基础进一步定制,大大的降低了应用服务的镜像制作成本。
dockerfile不配置基础镜像
当想让一个容器做两件事情,或者使一个Docker镜像包含来自两个不同镜像的依赖库时,就需要知道每个镜像的Dockerfile。本文介绍了如何通过dockerhistory命令来对Docker镜像进行反向工程,得到它们的Dockerfile,并组织到一个Dockerfile里然后build,从而实现想做的事情。
常言道,“不要重复发明轮子!”
在使用Docker时,构建自己的镜像之前,最好在DockerHub寻找一些可以直接使用的镜像做练习。把软件架构分布到一系列容器中,每一个容器只做一件事情,这样的效果非常好。构建分布式应用的最好的基石是使用来自DockerHub的官方镜像,因为可以信任它们的质量。
在某些情况下,可能想让一个容器做两件不同的事情。而在另外一些情况下,可能想让一个Docker镜像包含来自两个不同镜像的依赖库。如果有每个镜像的Dockerfile,这是非常简单的。将它们组织到一个Dockerfile里然后build就行。
然而,大多数时间都在使用DockerHub上准备好的镜像,不会有它们的源Dockerfile。我花时间找一个可以合并(或flatten)两个不同Docker镜像的工具,当然没有它们的Dockerfile。也就是说在找一个能做下面这件事的东西:
image1--
--->merged_image_12
/
image2--
此前在GitHub上有两个相关的讨论(1、2),尽管它们都被关闭了。
这可能吗?
那么,是否存在工具能够像这样做吗:dockermergeimage2image2merged_image?
没有!
你甚至不可以用下面的方式来构建Dockerfile:
FROMimage1
FROMimage2
简而言之,在一个Dockerfile里不能有多个基础镜像。
但是我需要这个功能!
唯一的解决办法是取得这些镜像的Dockerfile,然后把它们组织到一个文件中,再进行构建。那么,我能在DockerHub上获得一个镜像的Dockerfile吗?幸运的是可以。它不能离线获取(译注:原文是online,但显然online时对于来自GitHub的自动构建镜像是可以直接获取的),但是你可以使用dockerhistory命令,通过反向工程获取。
怎么来使用?
在你的机器上使用dockerpull从DockerHub下载镜像。
dockerpullimage1
dockerpullimage2
然后使用dockerhistory来取得构建这两个容器时运行的命令。
dockerhistory--no-trunc=trueimage>image1-dockerfile
dockerhistory--no-trunc=trueimage2>image2-dockerfile
接下来打开这两个文件,你可以看到每个镜像的命令堆栈。这是因为Docker镜像通过层(阅读更多)的方式来构建。即你在Dockerfile中键入的每一个命令所构建的新镜像,都是在之前的命令产生的镜像之上。所以你可以对镜像进行逆向工程。
限制
不能对镜像进行反向工程的唯一场景,是镜像的维护者在他的Dockerfile中使用了ADD或COPY命令。你会看到这样一行:
ADDfile:1ac56373f7983caf22
或ADDdir:cf6fe659e9d21535844
这是因为不知道维护者在他自己的机器上,包括镜像里使用了什么本地文件。
Docker(2)——构建镜像命令解析
Dockerfile 中包括 FROM 、 MAINTAINER 、 RUN 、 CMD 、 EXPOSE 、 ENV 、 ADD 、 COPY 、 ENTRYPOINT 、 VOLUME 、 USER 、 WORKDIR 、 ONBUILD 、 LABEL 等14个指令。
1.FROM 格式: FROM image 或 FROM image:tag 含义:Dockerfile中第一条指令必须是FROM指令,且在同一个Dockerfile中创建多个镜像时,可以使用多个FROM指令。
docker17.05版本开始,dockerfile中允许使用多个FROM指令,主要是解决编译环境和运行环境分开的问题。 https://www.cnblogs.com/leoyang63/articles/13733967.html
2.MAINTAINER 格式: MAINTAINER user_name user_email 含义:指定维护者信息,作者以及作者的邮箱地址
3.RUN 支持两种格式: RUN command RUN ["EXECUTABLE","PARAM1","PARAM2".....] 含义:前者在shell终端中运行命令, /bin/sh -c command ,例如: /bin/sh -c "echo hello" ;后者使用 exec 执行,指定其他运行终端使用 RUN["/bin/bash","-c","echo hello"] 。每条RUN指令将当前的镜像基础上执行指令,并提交为新的镜像,命令较长的时候可以使用 \ 来换行。
4.CMD 支持三种格式: CMD ["executable","param1","param2"] ,使用exec执行,这是推荐的方式。 CMD command param1 param2 , 在 /bin/sh 中执行。 CMD ["param1","param2"] ,提供给 ENTERYPOINT 的默认参数。
含义: CMD 用于指定容器启动时执行的命令,每个 Dockerfile 只能有一个 CMD 命令,多个 CMD 命令只执行最后一个。若容器启动时指定了运行的命令,则会覆盖掉 CMD 中指定的命令。
5.EXPOSE 格式: EXPOSE port [port2,port3,...] 含义:例如 EXPOSE 80 这条指令告诉Docker服务器暴露80端口,供容器外部连接使用。在启动容器的使用使用-P,Docker会自动分配一个端口和转发指定的端口,使用-p可以具体指定使用哪个本地的端口来映射对外开放的端口。
6.ENV 格式: EVN key value 含义:用于指定环境变量,这些环境变量,后续可以被 RUN 指令使用,容器运行起来之后,也可以在容器中获取这些环境变量,例如: ENV word hello RUN echo $word
7.ADD 格式: ADD src dest 含义:该命令将复制指定本地目录中的文件到容器中的 dest 中, src 可以是是一个绝对路径,也可以是一个 URL 或一个 tar 文件, tar 文件会自动解压为目录。
8.COPY 格式为: COPY src desc 含义:复制本地主机src目录或文件到容器的desc目录,desc不存在时会自动创建。
9.ENTRYPOINT 支持两种格式: ENTRYPOINT ["executable","param1","param2"] ENTRYPOINT command param1,param2
含义:后者会在shell中执行。用于配置容器启动后执行的命令,这些命令不能被 docker run 提供的参数覆盖。和 CMD 一样,每个Dockerfile中只能有一个 ENTRYPOINT ,当有多个时最后一个生效。
10.VOLUME 格式: VOLUME ["/data"] 含义:作用是创建在本地主机或其他容器可以挂载的数据卷,用来存放数据。
11.USER 格式: USER username 含义:指定容器运行时的用户名或UID,后续的RUN也会使用指定的用户。要临时使用管理员权限可以使用sudo。在USER命令之前可以使用RUN命令创建需要的用户。 例如: RUN groupadd -r docker && useradd -r -g docker docker
12.WORKDIR 格式: WORKDIR /path 含义:为后续的 RUN CMD ENTRYPOINT 指定配置工作目录,可以使用多个 WORKDIR 指令,若后续指令用得是相对路径,则会基于之前的命令指定路径。
13.ONBUILD 格式: ONBUILD [INSTRUCTION] 含义:该配置指定当所创建的镜像作为其他新建镜像的基础镜像时所执行的指令,例如下面的Dockerfile创建了镜像A: ONBUILD ADD . /app ONBUILD RUN python app.py
基于镜像A创建新的镜像时,新的Dockerfile中使用 from A 指定基镜像时,会自动执行 ONBBUILD 指令内容,等价于在新的要构建镜像的Dockerfile中增加了两条指令: FROM A ADD ./app RUN python app.py
14.LABEL 格式: LABEL