FROM

功能为指定基础镜像,并且必须是第一条指令。 如果不以任何镜像为基础,那么可写为:FROM scratch。
接下来所写的指令将作为镜像的第一层开始。
格式:

FROM <image>
FROM <image>:<tag>
FROM <image>:<digest>

默认值为latest

MAINTAINER

指定作者
格式:

MAINTAINER <name>

ENV

为容器设定环境变量

ENV <key> <value>  设置一个
ENV <key>=<value> 设置多个

ADD

复制,把文件复制到镜像中(Dockfile所在目录为根目录),类似于scp

ADD <src>... <dest>
ADD ["<src>",... "<dest>"]

路径的填写可以是容器内的绝对路径,也可以是相对于工作目录的相对路径
可以是一个本地文件或者是一个本地压缩文件,还可以是一个url
如果把写成一个url,那么ADD就类似于wget命令
写法:

ADD ares t1/
ADD ares /t1
ADD http://example.com/ares /

若src是个目录,则会把目录下所有文件复制到容器,不会复制目录

COPY

复制命令

COPY <src>... <dest>
COPY ["<src>",... "<dest>"]

COPY的只能是本地文件,其他用法与ADD一致

VOLUME

挂载功能,将本地目录或者其他容器内得目录挂在到这个容器中,一般挂载数据文件

VOLUME ["/var/log/"]
VOLUME /var/log
VOLUME /var/log /data

任何向 /data 中写入的信息都不会记录进容器存储层,从而保证了容器存储层的无状态化,容器运行时可通过-v覆盖配置

USER

设置启动容器的用户,可以是用户名或UID

USER daemo
USER UID

如果设置了容器以daemon用户去运行,那么RUN, CMD 和 ENTRYPOINT 都会以这个用户去运行

WORKDIR

WORKDIR 指令可以来指定工作目录(或者称为当前目录),以后各层的当前目录就被改为指定的目录,如该目录不存在, WORKDIR 会自动建立目录。

WORKDIR <工作目录路径>

EXPOSE

声明端口,暴漏容器运行时的监听端口给外部

EXPOSE <端口1> [<端口2>...]

运行时并不会因为这个声明应用就会开启这个端口的服务.在 Dockerfile 中写入这样的声明有两个好处,一个是帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射;另一个用处则是在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口。

RUN

运行指定的命令

RUN <command>
RUN ["executable", "param1", "param2"]

第一种后边直接跟shell命令
在linux操作系统上默认 /bin/sh -c
在windows操作系统上默认 cmd /S /C
第二种是类似于函数调用。
RUN书写时的换行符是\,多行命令不要写多个RUN,使用&&连接

CMD

容器启动时要运行的命令

CMD ["executable","param1","param2"]
CMD ["param1","param2"]
CMD command param1 param2

只可以使用双引号!

CMD echo $HOME实际会被翻译成CMD [ "sh", "-c", "echo $HOME" ]

Docker 不是虚拟机,容器中的应用都应该以前台执行!

CMD service nginx start命令应该写为CMD ["nginx", "-g", "daemon off;"]

RUN是构件容器时就运行的命令以及提交运行结果;
CMD是容器启动时执行的命令,在构件时并不运行,构件时紧紧指定了这个命令到底是个什么样子;
可写多个,只有最后一个生效

ENTRYPOINT

功能是启动时的默认命令,不可被 docker run 提供的参数覆盖

ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2

如果我们在Dockerfile种同时写了ENTRYPOINT和CMD,并且CMD指令不是一个完整的可执行命令,那么CMD指定的内容将会作为ENTRYPOINT的参数
示例:

CMD ["-f","/var/log/message"]
ENTRYPOINT ["tail"]
会在启动的时候执行tail -f /var/log/message

ARG

构建参数

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

ARG命令定义了一个变量,在docker build创建镜像的时候,使用 –build-arg =来指定参数

ONBUILD

ONBUILD <其它指令>

ONBUILD 是一个特殊的指令,它后面跟的是其它指令,比如 RUN , COPY 等,而这些指令,在当前镜像构建时并不会被执行。只有当以当前镜像为基础镜像,去构建下一级镜像的时候才会被执行。

STOPSIGNAL

当容器推出时给系统发送什么样的指令

STOPSIGNAL signal

HEALTHCHECK

容器健康状况检查命令,告诉 Docker 应该如何进行判断容器的状态是否正常

HEALTHCHECK [OPTIONS] CMD command :设置检查容器健康状况的命令
HEALTHCHECK NONE :如果基础镜像有健康检查指令,使用这行可以屏蔽掉其健康检查指令

[OPTIONS]的选项支持以下三中选项:
--interval=DURATION 两次检查默认的时间间隔,默认为30秒
--timeout=DURATION 健康检查命令运行超时时长,默认30秒
--retries=N 当连续失败指定次数后,则容器被认为是不健康的,状态unhealthy,默认次数是3
HEALTHCHECK 只可以出现一次,如果写了多个,只有最后一个生效。
CMD后边的命令的返回值决定了本次健康检查是否成功,具体的返回值如下:
0: success - 表示容器是健康的
1: unhealthy - 表示容器已经不能工作了
2: reserved - 保留值
示例:

HEALTHCHECK --interval=5m --timeout=3s \
CMD curl -f http://localhost/ || exit 1

健康检查命令是:curl -f http://localhost/ || exit 1
两次检查的间隔时间是5秒
命令超时时间为3秒

Dockfile基本语法的更多相关文章

  1. 03-docker入门-创建 docker 镜像

    方法1:从运行的容器创建方法2:编写 DockFile 文件创建 方法1: 打包镜像 docker commit -m "Test a change" 610 ubuntu:tes ...

  2. kubernetes篇 容器用户权限控制

    问题起源 问题起源于一个开发BUG:正常运行一段时间的POD,突然有一天运行报错了,错误是没有操作目录的权限,查其原因,原来是镜像被更新了,镜像添加了操作用户,而被操作的目录(NFS目录)并不具备普通 ...

  3. docker学习(3)--Dockfile详解

    转载请注明出处:http://www.cnblogs.com/lighten/p/6900556.html 1.基本说明 Dockfile是一个用于编写docker镜像生成过程的文件,其有特定的语法. ...

  4. Dockerfile语法梳理

    Dockerfile语法 我们先来看一下上篇的 Dockerfile #获取base image FROM adoptopenjdk/openjdk8:latest #类似于执行 linux指令 RU ...

  5. Docker 之 Dockerfile 常用语法与实战

    1. 概述 老话说的好:超越别人,不如超越自我,每天比昨天的自己更强就好. 言归正传,之前聊了 Docker 的相关知识,今天来聊聊如何编辑 Dockerfile 脚本,来创建我们自己的镜像. 2. ...

  6. 我的MYSQL学习心得(一) 简单语法

    我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  7. Swift与C#的基础语法比较

    背景: 这两天不小心看了一下Swift的基础语法,感觉既然看了,还是写一下笔记,留个痕迹~ 总体而言,感觉Swift是一种前后端多种语言混合的产物~~~ 做为一名.NET阵营人士,少少多多总喜欢通过对 ...

  8. 探索C#之6.0语法糖剖析

    阅读目录: 自动属性默认初始化 自动只读属性默认初始化 表达式为主体的函数 表达式为主体的属性(赋值) 静态类导入 Null条件运算符 字符串格式化 索引初始化 异常过滤器when catch和fin ...

  9. [C#] 回眸 C# 的前世今生 - 见证 C# 6.0 的新语法特性

    回眸 C# 的前世今生 - 见证 C# 6.0 的新语法特性 序 目前最新的版本是 C# 7.0,VS 的最新版本为 Visual Studio 2017 RC,两者都尚未进入正式阶段.C# 6.0 ...

随机推荐

  1. count(1)、count(*)与count(列名)的执行区别

    执行效果: 1.  count(1) and count(*) 当表的数据量大些时,对表作分析之后,使用count(1)还要比使用count(*)用时多了! 从执行计划来看,count(1)和coun ...

  2. 【分布式系列】session跨域及单点登录解决方案

    Cookie机制 Cookie技术是客户端的解决方案,Cookie就是由服务器发给客户端的特殊信息,而这些信息以文本文件的方式存放在客户端,然后客户端每次向服务器发送请求的时候都会带上这些特殊的信息. ...

  3. 阿里天池的新任务(简单)(KMP统计子串出现的次数)

    阿里“天池”竞赛平台近日推出了一个新的挑战任务:对于给定的一串 DNA 碱基序列 tt,判断它在另一个根据规则生成的 DNA 碱基序列 ss 中出现了多少次. 输出格式 输出一个整数,为 tt 在 s ...

  4. 使用 intro.js 库

    使用 render() { const reducer = this.props.testReducer; return ( <React.Fragment> <button dat ...

  5. python扫描端口脚本

    # -*- coding:utf8 -*- # # Python: 2.7.8 # Platform: Windows # Authro: wucl # Program: 端口扫描 # History ...

  6. Vue.filter 过滤器

    [过滤器] import Vue from '../../../node_modules/vue/dist/vue'; // 后台数据与前端展示数据需要换算,与后台交互的请求的参数是不需要.假如说前端 ...

  7. qt opencv编译错误 /usr/local/lib/libopencv_imgcodecs.so.3.1:-1: error: error adding symbols: DSO missing from command line

    转载自:http://tbfungeek.github.io/2016/03/05/Opencv-%E5%AE%89%E8%A3%85%E8%BF%87%E7%A8%8B%E4%B8%AD%E5%87 ...

  8. 10.9-uC/OS-III任务管理

    1.OSTaskCreate () 要使用 uC/OS 的任务必须先声明任务控制块和创建任务,调用 OSTaskCreate () 函数可以创建一个任务. 2.OSTaskSuspend () OST ...

  9. bugfree3.0.1-邮件配置

    系统内新建BUG或Case,或者BUG状态有修改时,这些操作都可以伴随邮件通知,提醒指派和抄送给对象及时关注. 配置方法 1.进入C:\xampp\htdocs\bugfree\protected\c ...

  10. js之prototype 原型对象

    原型对象prototype可以这么理解,是该类的实例对象的模板,每个实例对象都是先复制一份该类的prototype,通过这个可以让类的实例拥有相同的功能   String.prototype.say= ...