Dockerfile简介:
   镜像的定制实际上就是定制每一层所添加的配置、文件。如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,那么哪些无法重复的问题、镜像构建透明性的问题、体积的问题就都会解决。这个脚本就是 Dockerfile。Dockerfile 是一个文本文件,其内包含了一条条的指令,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。

Dockerfile编写注意项

  1、指令参数,指令的大小写不敏感
  2、第一个非注释行必须是FROM指令
  3、编写Dockerfile必须在一个目录下进行,这个目录称之为 工作目录(WORKSPACE)
  4、Dockerfile文件命令的首字母必须大写
  5、制作镜像所要用的文件必须放在工作目录或者工作目录的子目录之下,不能放在父目录
  6、可以通过隐藏文件 .dockeringnore 来指定不要放入到镜像中的文件,一行是一个文件,可以用通配符
  7、基于dockerfile做镜像,本质上还是基于一个现有的镜像做新镜像

dockerfile指令详解:

1、FROM
  作用:指定一个基础镜像。除注释外,是dockerfile第一条指令。
  格式:

FROM docker.io/image:tags (FROM 注册表/镜像名(仓库):标签(版本号))

  例子:

FROM docker.io/http:v1
FROM nginx:latest

2、LABEL
  作用:设定一些元数据(指明作者信息)
  格式:

LABEL author=ken (LABEL 信息)

  示例:

LABEL author=ken

3、ENV
  作用:设置环境变量
  格式:

ENV key=value key=value (ENV key=value)

  示例:

ENV workdir=/var/www/html

  注意:
  通过ENV所定义的变量是可以传递到容器之中,但是,在创建容器的时候,如果手动指定了变量的值,那么这个值会覆盖掉镜像中原有的值

 

4、WORKDIR
  作用:相当于执行cd命令(声明工作目录)
  格式:
    WORKDIR 工作目录
  示例:

WORKDIR /var/www/html
WORKDIR $workdir (ENV环境变量中)
WORKDIR /usr/local/apache2/

5、RUN
  作用:基于镜像构建容器时要执行的命令
  阶段:第一阶段,构建镜像时执行
  格式:
    RUN 命令 && 命令
  示例:

RUN yum -y install httpd && systemctl enable httpd

6.EXPOSE
  作用:声明暴露的端口
  格式:

EXPOSE PORT/[PROTOCOL]

  示例:

EXPOSE 80 8080 3306

  注意:
  如果需要外部访问,还需要启动容器时增加-p或者-P参数进行分配

7、COPY
  作用:复制dockerfile工作目录下的文件移动至镜像中
  格式:

复制单个:COPY <src> <dest>
复制多个:COPY [<src> <src> <src>… <dest>]

  示例:

COPY passwd /etc/

  注意:
    1、源文件路径用相对路径,目标一般用绝对路径
    2、也可以通配符
    3、源文件必须在工作目录或者工作目录的子目录中
    4、目标路径可以不存在,会自动创建
    5、如果源文件是一个目录,会自动递归复制目录下的文件到目标位置,但是目录自身不会复制
    6、如果复制多个文件,或者源文件中用了通配符,那么目标路径必须以 / 为结尾

8、ADD
  作用:也是复制和COPY类似
  格式:

ADD SRC DEST
ADD [“<src>” “<src>” “<src>” “<dest>”]

  例子:

ADD ken.tar.gz /etc/

  注意:
  ADD复制时会直接将tar包解压;也可以从网络下载文件到镜像,下载的tar无法解压。

9、VOLUME
  作用:声明挂载点
  格式:

VOLUME DEST (容器目录)

  例子:

VOLUME /var/www/html

10.ONBUILD
  作用:触发器 (当别人在使用你的镜像制作新的镜像的时候会触发一个动作)
  格式:

ONBUILD 动作
ONBUILD 其他指令

  例子:

ONBUILD COPY ken /app/
ONBUILD ADD https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/adwaita-qt-common-1.0-1.el7.x86_64.rpm /date

  注意:
  指定的命令在构建镜像时并不执行,用来实现当基于这个这个镜像做新镜像的时候要执行的命令

11.CMD
  作用:执行指令,PID为1的指令
  阶段:第二阶段,也就是将镜像构成成容器的时候执行
  格式:
    CMD 指令
    CMD <命令> 相当于执行的是/bin/sh -c 命令,也相当于执行exec来运行命
    CMD [“<命令>”, “<参数>”, “<参数>”]
    CMD [“<参数>”, “<参数>”] <<< 需要借助于ENTRYPOINT指令
  例子:

CMD nginx -g daemon off;
CMD ["nginx","-g","daemon off"]

  注意:
    可以在启动容器的时候用指定的命令替换掉镜像所要执行的命令,
    CMD指定容器启动是执行的命令,每个Dockerfile只能有一条CMD命令,
    如果指定了多条,只有最后一条会被执行,
    如果你在启动容器的时候也指定的命令,那么会覆盖Dockerfile构建的镜像里面的CMD命令。

12.ENTRYPOINT
  作用:执行指令,PID为1的指令
  格式:

ENTRYPOINT  指令
ENTRYPOINT [“执行命令”,”参数1″,”参数2″…]

  例子:

ENTRYPOINT nginx -g daemon off;
ENTRYPOINT ["nginx","-g","daemon off]

13. ARG
  作用:定义变量,这个变量是用在第一阶段(构建镜像——build)
  格式:
    ARG 变量名=变量值
  ARG示例:

ARG name=ken

  注意:
    Dockerfile中ENV 和 ARG的区别
    在指定docker build 过程中传参数,要用ARG
    在执行docker run的过程中传参数,要用ENV
    ARG构建参数和 ENV 的效果一样,都是设置环境变量。所不同的是, ARG 所设置的构建环境的
    环境变量,在将来容器运行时是不会存在这些环境变量的

14. USER
  作用:指定运行容器时的用户名和UID,后续的RUN指令也会使用这里指定的用户
  格式:

USER <UID>|<USERNAME>

  USER示例:

user ken

  注意;
  该用户必须存在于容器的用户空间中(容器的文件系统的中的/etc/passwd中)

15. HEALTHCHECK
  作用:docker daemon检查docker容器是否正常,如果异常会将该容器stop
    将容器stop的条件
    1)主进程停止了
    2)主进程工作在了后台
  格式:

HEALTHCHECK [options] CMD
options
–interval=#s|m 指定健康检查的时间间隔(例如:30s,30m)
–timeout=#s|m 指定等待响应的超时时间
–start-period=#s|m 指定容器启动多久以后才可以做监控检查
–retries=# 指定重试次数
返回值
0:success

  示例:

HEALTHCHECK --interval=5m --timeout=1s --retries=3 CMD curl http://10.220.5.138/ken.html || exit 1

16. SHELL
  作用:可以用来指定系统中默认的shell类型
  格式:

SHELL [“/bin/sh”, “-c”] (linux系统中)

  SHELL示例:

SHELL ["/bin/sh","-c"]

Dockerfile介绍及指令详情的更多相关文章

  1. Dockerfile介绍、Docker制作jdk镜像

    Dockerfile介绍.Docker制作jdk镜像 目标 1.Dockerfile简介 2.Docker制作jdk镜像 Dockerfile简介 dockerfile 是一个文本格式的配置文件, 用 ...

  2. Docker系列(21)- DockerFile介绍

    DockerFile介绍 dockerfile是用来构建docker镜像的文件!命令参数脚本! 构建步骤 编写一个dockerfile文件 docker build构建成为一个镜像 docker ru ...

  3. 8、Dockerfile介绍和最佳实践

    一.Dockerfile 概念 1.Dockerfile是什么 Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序.库.资源.配置等文件外,还包含了一些为运行时准备的一些配置参数(如 ...

  4. 项目——基于httpd镜像演示Dockerfile所有的指令

    基于httpd镜像演示Dockerfile所有的指令: 第一步:创建Dockerfile工作目录 [root@localhost harbor]# mkdir /test [root@localhos ...

  5. docker入门1: Dockerfile介绍

    Dockerfile是为快速构建docker image而设计的,当你使用dockerbuild 命令的时候,docker 会读取当前目录下的命名为Dockerfile(首字母大写)的纯文本文件并执行 ...

  6. centos7下安装docker(dockerfile常用的指令)

    FROM:指定ase镜像 MAINTAINER:设置镜像作者,可以是任意字符 COPY:将文件从build  context复制到镜像.支持两种形式:1.COPY src dest 2.COPY [“ ...

  7. docker 13 dockerfile的保留字指令

    Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本. 构建三步骤:1.编写dockerfile文件:2.docker build:3.docker run doc ...

  8. dockerfile 介绍

    Docker简介 Docker项目提供了构建在Linux内核功能之上,协同在一起的的高级工具.其目标是帮助开发和运维人员更容易地跨系统跨主机交付应用程序和他们的依赖.Docker通过Docker容器, ...

  9. Docker(3):Dockerfile介绍及简单示例

    Dockerfile 概念 Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像.它们简化了从头到尾的流程并极大的简化了部署工作.Dockerfile从FR ...

随机推荐

  1. Python高阶函数及函数柯里化

    1 Python高阶函数 接收函数为参数,或者把函数作为结果返回的函数为高阶函数. 1.1 自定义sort函数 要求:仿照内建函数sorted,自行实现一个sort函数.内建函数sorted函数是返回 ...

  2. Kibana 快速入门教程

    欢迎关注笔者的公众号: 小哈学Java, 专注于推送 Java 领域优质干货文章!! 个人网站: https://www.exception.site/kibana/kibana-tutorial 什 ...

  3. Windows 服务程序(二)

    服务控制管理器 (SCM, Service Control Manager),它在系统启动时自动启动,其主要作用是维护和管理一张服务信息表. OpenSCManager() 介绍:功能:建立了一个到服 ...

  4. 机器学习:不平衡信息有序平均加权最近邻算法IFROWANN

    一 背景介绍 不平衡信息,特点是少数信息更珍贵,多数信息没有代表性.所以一般的分类算法会被多数信息影响,而忽略少数信息的重要性. 解决策略: 1.数据级别 (1)上采样:增加稀有类成本数 (2)下采样 ...

  5. Spring Boot2 系列教程(十四)CORS 解决跨域问题

    今天和小伙伴们来聊一聊通过CORS解决跨域问题. 同源策略 很多人对跨域有一种误解,以为这是前端的事,和后端没关系,其实不是这样的,说到跨域,就不得不说说浏览器的同源策略. 同源策略是由 Netsca ...

  6. Linux power supply class(1)_软件架构及API汇整【转】

    1. 前言 power supply class为编写供电设备(power supply,后面简称PSY)的驱动提供了统一的框架,功能包括: 1)抽象PSY设备的共性,向用户空间提供统一的API. 2 ...

  7. Spring Boot项目中如何定制拦截器

    本文首发于个人网站:Spring Boot项目中如何定制拦截器 Servlet 过滤器属于Servlet API,和Spring关系不大.除了使用过滤器包装web请求,Spring MVC还提供Han ...

  8. Python小工具:利用ffmpy3库3秒钟将视频转换为音频

    作者 | pk 哥 来源公众号 | Python知识圈(ID:PythonCircle) 最近,有读者微信上私聊我,想让我写一篇视频批量转换成音频的文章,我答应了,周末宅家里把这个小工具做出来了. 这 ...

  9. WebShell代码分析溯源(一)

    WebShell代码分析溯源(一) 一.一句话变形马样本 <?php $_GET['POST']($_POST['GET']);?> 二.代码分析 1.调整代码格式 <?php $_ ...

  10. 5.分析snkrs的Android的DeviceID生产规则

    分析Android的DeviceID生产 前面已经把web端的分析了一些,要想实现其实容易也难,容易是规则很容易,难是时间生成控制很难,我之前大概花了一周时间分析和梳理,然后行为测试,之前我已经讲过c ...