指令的一般格式为INSTRUCTION arguments,指令包含FROMMAINTAINERRUN等。

FROM

格式为FROM <image>FROM <image>:<tag>

第一条指令必须为FROM指令。而且,假设在同一个Dockerfile中创建多个镜像时。能够使用多个FROM指令(每一个镜像一次)。

MAINTAINER

格式为MAINTAINER <name>,指定维护者信息。

RUN

格式为RUN <command>RUN ["executable", "param1", "param2"]

前者将在shell终端中执行命令,即/bin/sh -c;后者则使用exec执行。指定使用其他终端能够通过另外一种方式实现,比如RUN ["/bin/bash", "-c", "echo hello"]

每条RUN指令将在当前镜像基础上运行指定命令,并提交为新的镜像。当命令较长时能够使用\来换行。

CMD

支持三种格式

  • CMD ["executable","param1","param2"]使用exec运行,推荐方式。
  • CMD command param1 param2/bin/sh中运行。提供给须要交互的应用;
  • CMD ["param1","param2"]提供给ENTRYPOINT的默认參数;

指定启动容器时运行的命令,每一个Dockerfile仅仅能有一条CMD命令。假设指定了多条命令,仅仅有最后一条会被运行。

假设用户启动容器时候指定了执行的命令。则会覆盖掉CMD指定的命令。

EXPOSE

格式为EXPOSE <port> [<port>...]

告诉Docker服务端容器暴露的port号,供互联系统使用。

ENV

格式为ENV <key> <value>。 指定一个环境变量,会被兴许RUN指令使用,并在容器执行时保持。

比如

ENV PG_MAJOR 9.3
ENV PG_VERSION 9.3.4
RUN curl -SL http://example.com/postgres-$PG_VERSION.tar.xz | tar -xJC /usr/src/postgress && …
ENV PATH /usr/local/postgres-$PG_MAJOR/bin:$PATH

ADD

格式为ADD <src> <dest>

该命令将复制指定的<src>到容器中的<dest>

当中<src>能够是Dockerfile所在文件夹的一个相对路径;也能够是一个URL;还能够是一个tar文件(自己主动解压为文件夹)。

则。

COPY

格式为COPY <src> <dest>

复制本地主机的<src>(为Dockerfile所在文件夹的相对路径)到容器中的<dest>

当使用本地文件夹为源文件夹时。推荐使用COPY

ENTRYPOINT

两种格式:

  • ENTRYPOINT ["executable", "param1", "param2"]
  • ENTRYPOINT command param1 param2(shell中运行)。

配置容器启动后运行的命令。而且不可被docker run提供的參数覆盖。

每一个Dockerfile中仅仅能有一个ENTRYPOINT。当指定多个时。仅仅有最后一个起效。

VOLUME

格式为VOLUME ["/data"]

创建一个能够从本地主机或其它容器挂载的挂载点,一般用来存放数据库和须要保持的数据等。

USER

格式为USER daemon

指定执行容器时的username或UID,兴许的RUN也会使用指定用户。

当服务不须要管理员权限时,能够通过该命令指定执行用户。而且能够在之前创建所须要的用户,比如:RUN groupadd -r postgres && useradd -r -g postgres postgres

要暂时获取管理员权限能够使用gosu,而不推荐sudo

WORKDIR

格式为WORKDIR /path/to/workdir

为兴许的RUNCMDENTRYPOINT指令配置工作文件夹。

能够使用多个WORKDIR指令,兴许命令假设參数是相对路径,则会基于之前命令指定的路径。比如

WORKDIR /a
WORKDIR b
WORKDIR c
RUN pwd

则终于路径为/a/b/c

ONBUILD

格式为ONBUILD [INSTRUCTION]

配置当所创建的镜像作为其他新创建镜像的基础镜像时。所运行的操作指令。

比如,Dockerfile使用例如以下的内容创建了镜像image-A

[...]
ONBUILD ADD . /app/src
ONBUILD RUN /usr/local/bin/python-build --dir /app/src
[...]

假设基于A创建新的镜像时。新的Dockerfile中使用FROM image-A指定基础镜像时,会自己主动运行ONBUILD指令内容,等价于在后面加入了两条指令。

FROM image-A

#Automatically run the following
ADD . /app/src
RUN /usr/local/bin/python-build --dir /app/src

使用ONBUILD指令的镜像,推荐在标签中注明,比如ruby:1.9-onbuild

Dockerfile指令总结的更多相关文章

  1. docker学习笔记17:Dockerfile 指令 ONBUILD介绍

    ONBUILD指令可以为镜像添加触发器.其参数是任意一个Dockerfile 指令. 当我们在一个Dockerfile文件中加上ONBUILD指令,该指令对利用该Dockerfile构建镜像(比如为A ...

  2. docker之Dockerfile指令介绍

    Docker通过对于在Dockerfile中的一系列指令的顺序解析实现自动的image的构建 通过使用build命令,根据Dockerfiel的描述来构建镜像 通过源代码路径的方式 通过标准输入流的方 ...

  3. docker Dockerfile指令ADD和COPY的区别,添加目录方法

    docker Dockerfile指令ADD和COPY的区别,添加目录方法 ADD指令的功能是将主机构建环境(上下文)目录中的文件和目录.以及一个URL标记的文件 拷贝到镜像中.其格式是: ADD 源 ...

  4. Dockerfile指令学习 (转)

    原文地址:http://blog.csdn.net/we_shell/article/details/38445979 Dockfile是一种被Docker程序解释的脚本,Dockerfile由一条一 ...

  5. Docker学习笔记三 Dockerfile 指令 定制镜像

    本文地址:https://www.cnblogs.com/veinyin/p/10412079.html  镜像是分层存储的,每一层都是独立存在的,修改当前层并不会修改其依赖的上一层,删除某一层也只是 ...

  6. Dockerfile 指令汇总及解析

        原文地址:http://www.maoyupeng.com/dockerfile-command-introduction.html 什么是Dockerfile Dockerfile是由一系列 ...

  7. Docker基本命令与使用 —— Dockerfile指令与构建(三)

    一.Dockerfile指令上 1.指令格式 # Comment 注释, 以#开头 INSTRUCTION argument 以大写的指令+参数 #First Dockerfile 注释 FROM u ...

  8. Docker学习(三): Dockerfile指令介绍

    特别声明: 博文主要是学习过程中的知识整理,以便之后的查阅回顾.部分内容来源于网络(如有摘录未标注请指出).内容如有差错,也欢迎指正! =============系列文章============= 1 ...

  9. Dockerfile指令:

    Dockerfile指令: 第一行注释,指令是大写字母开头, FROM指令: FROM<image>,后面跟镜像名, FROM<image>:<tag>,后面跟镜像 ...

  10. Dockerfile指令的使用

    关于Dockerfile Dockerfile实际上就是一系列创建Docker镜像的脚本, 虽然可以通过命令行来执行, 但是那样繁琐而且容易出错. Dockerfile指令 FROM 他的意思是在创建 ...

随机推荐

  1. 此windows副本不是正版解决方法

    老爸的win7今天黑屏 右下角出现 Windows7 内部版本7601 此windows副本不是正版 网上零散地找到了解决办法 写博汇总一下 我的情况是 电脑属性中的windows激活显示: 状态不可 ...

  2. Romantic(裸扩展欧几里德)

    Romantic Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  3. GDAL1.9.1 IN VS2008 C#中的编译及使用

    下载gdal1.9.1到官网:http://www.gdal.org/ GDAL库的简洁.高效深受开发人员的喜爱,很多开源的GIS软件甚至是商业GIS软件都使用了这个库.GDAL使用C++,在Visu ...

  4. C++ Primer 学习笔记_75_模板与泛型编程 --模板定义

    模板与泛型编程 --模板定义 引言: 所谓泛型程序就是以独立于不论什么特定类型的方式编写代码.使用泛型程序时,我们须要提供详细程序实例所操作的类型或值. 模板是泛型编程的基础.使用模板时能够无须了解模 ...

  5. Android的重力传感器(3轴加速度传感器)简单实例

    重力感应主要是依靠手机的加速度传感器(accelerometer)来实现 在Android的开发中一共有八种传感器但是不一定每一款真机都支持这些传感器.因为很多功能用户根本不care的所以可能开发商会 ...

  6. 如何在同一系统中启动多个 TOMCAT

    <Server port="8005" shutdown="SHUTDOWN"> 接受server关闭指令的port号.我们叫关闭指令port. & ...

  7. 指尖上的电商---(2)Solr全文搜索引擎的准备工作

    Solr是一个基于Lucene的全文搜索引擎.提供了更丰富的搜索语言.更灵活的配置.更高的查询效率. 一句话.与Lucene相比.有过之而无不及.这一节里, 主要谈论两个知识点:Jdk的安装和Tomc ...

  8. Extending your SharePoint 2007 site with Microsoft ASP.NET AJAX 3.5

    After ASP.NET 3.5 has been installed you need to modify the web.config file of your MOSS web site wi ...

  9. URL中含有+号,出现错误“请求筛选模块被配置为拒绝包含双重转义序列的请求”的解决方法

    搜索关键词中含空格,提交后被自动转成了“+”号,报如下错误: HTTP 错误 404.11 - Not Found 请求筛选模块被配置为拒绝包含双重转义序列的请求. 解决方法: 在web.config ...

  10. 关于java项目导入,所碰到的版本问题

    怎么修改myeclipse 项目中用的jdk版本 工具/原料 MyEclipse java项目 方法/步骤  首先打开MyEclipse,如下图所示  打开之后,找到我们的java项目  然后右键-- ...