Dockerfile是一个普通的文本文件,里面包含了许多可以在命令行接口上执行的用来构建镜像的相关指令,我们通过 docker build 指令就可以读取Dockerfile文件中的指令并执行自动化镜像构建.Dockerfile是是用来构建Docker镜像文件的构建文件,是由一系列命令和参数构成的脚本.

一般情况下,Dockerfile文件可以分为四个部分:

  1. 基础镜像信息
  2. 维护者信息
  3. 镜像操作指令
  4. 容器启动时的执行命令

其基本结构如下:

graphic

  • Dockerfile的特点
    1. 每条保留字指令都为大写字母,且后面至少跟随一个参数
    2. 指令从上到下,按顺序执行
    3. #表示注释
    4. 每条指令都会创建一个新的镜像层,并对镜像进行提交

  • Docker执行Dockerfile的大致流程
    1. docker从基础镜像运行一个容器
    2. 执行一条指令并对容器做出修改
    3. 执行类似docker commit的操作提交一个新的镜像层
    4. docker再基于刚提交的镜像运行一个新容器
    5. 执行Dockerfile中的下一条指令直到所有指令都执行完成

  • Dockerfile,Docker镜像,Docker容器三者的关系
  • 从应用软件的角度来看,Dockerfile、Docker镜像与Docker容器分别代表软件的三个不同阶段,

    • Dockerfile是软件的原材料
    • Docker镜像是软件的交付品
    • Docker容器则可以认为是软件的运行态。

    Dockerfile面向开发,Docker镜像成为交付标准,Docker容器则涉及部署与运维,三者缺一不可,合力充当Docker体系的基石。

    graphic
    1. Dockerfile,需要定义一个Dockerfile,Dockerfile定义了进程需要的一切东西。Dockerfile涉及的内容包括执行代码或者是文件、环境变量、依赖包、运行时环境、动态链接库、操作系统的发行版、服务进程和内核进程(当应用进程需要和系统服务和内核进程打交道,这时需要考虑如何设计namespace的权限控制)等等;
    2. Docker镜像,在用Dockerfile定义一个文件之后,docker build时会产生一个Docker镜像,当运行 Docker镜像时,会真正开始提供服务;
    3. Docker容器,容器是直接提供服务的。

  • Dockerfile保留字指令
    • FROM : 基础镜像,当前新镜像是基于哪个镜像的
    • MAINTAINER : 镜像维护者信息
    • RUN : 容器构建时运行的命令
    • CMD : 指定一个容器启动时运行的命令,可以有多个,但是只有最后一个有效
    • EXPOSE : 当前容器对外暴露的端口
    • ENV : 用来构建镜像过程中环境变量
    • ADD : 将宿主机中的文件拷贝到镜像,并且自动处理URL和解压压缩包
    • COPY : 将宿主机中的文件拷贝到镜像
    • VOLUME : 容器数据卷,用于数据保存和持久化工作
    • ENTRYPOINT : 指定一个容器启动时运行的命令 ,不同于ADD,ENTRYPOINT是对命令的追加
    • WORKDIR : 创建一个容器后,终端登录进来后的默认目录
    • ONBUILD : 当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild会被触发,相当于触发器一样
    graphic
    最后修改日期:2020-07-13

    作者

    留言

    撰写回覆或留言

    发布留言必须填写的电子邮件地址不会公开。