指令的一般格式为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. POJ1062 昂贵的聘礼 【DFS】

    昂贵的聘礼 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 37475   Accepted: 10816 Descripti ...

  2. JavaScript编程风格--基本的格式化

    缩进层级     推荐4个空格字符作为一个缩进层级. 语句结尾     推荐不要省略分号. 行的长度     最好一行不超过80个字符. 换行     在运算符后换行,下一行增加两个层级的缩进.   ...

  3. BZOJ 1019: [SHOI2008]汉诺塔( dp )

    dp(x, y)表示第x根柱子上y个盘子移开后到哪根柱子以及花费步数..然后根据汉诺塔原理去转移... ------------------------------------------------ ...

  4. django1.6.x(python3.3)使用pymysql连接mysql

    1.安装 pymysql,地址:https://code.google.com/p/pymysql/ 2.安装django 然后执行 django-admin.py startproject mysi ...

  5. linux系统调用和库函数调用的区别(转)

    Linux下对文件操作有两种方式:系统调用(system call)和库函数调用(Library functions).可以参考<Linux程序设计>(英文原版为<Beginning ...

  6. ubuntu 10.04 下 samba 服务的配置

    1. 安装 $ sudo apt-get install samba $ sudo apt-get install samba-common $ sudo apt-get install samb . ...

  7. Qt5制作鼠标悬停显示Hint的ToolTip

    在日常生活中的使用的软件中,我们经常会遇到这样的情况. 我们在网页上,有些网页链接的文字(比如文章标题,知乎问题标题,百度的词条等)因为太长了,而显示不出来,但是鼠标悬停在上面的时候就可以显示出来.  ...

  8. struts2 convention-plugin

    导入这个插件,该插件的作用是替换掉struts.xml 原则是没有配置,全是约定 基本步骤 1.新建HomeAction,里面有个execute方法return success,请求home.acti ...

  9. B-树和B+树的应用:数据搜索和数据库索引

    B-树和B+树的应用:数据搜索和数据库索引  B-树 1 .B-树定义 B-树是一种平衡的多路查找树,它在文件系统中很有用. 定义:一棵m 阶的B-树,或者为空树,或为满足下列特性的m 叉树:⑴树中每 ...

  10. c++中的对象引用(object reference)与对象指针的区别

    ★ 相同点: 1. 都是地址的概念: 指针指向一块内存,它的内容是所指内存的地址:引用是某块内存的别名. ★ 区别: 1. 指针是一个实体,而引用仅是个别名: 2. 引用使用时无需解引用(*),指针需 ...