回顾一下之前的内容,镜像的生成途径:

基于容器:

Dockfile文件:就是一个包含用户命令的文本文件,Dockerfile的命令不过区区20多个。

怎么通过dof 信息重新编译成res 文件 do-file_Dockerfile

Dockerfile Format

  • 注释信息: comment,以#开头;
  • 指令参数:instruction arguements;
  • 顺序执行:Dockerfile里面的文本指令,都是自上而下,依次执行;
  • 除了注释信息,第一行必须是FROM指令,他定义了当前制作的镜像是以哪个base image。

Dockerfile 工作模式

  • 工作目录:基于Dockerfile文件制作镜像,必须有专用的工作目录;
  • Dockerfile文件:在工作目录中Dockerfile文件名,首字母必须大写;
  • 其他文件:基于Dockerfile做镜像时,所需要的其他文件必须放在工作目录下面;
  • dockeringore: docker忽略的文件,在这个文件里面,一行一个,写进这个文件里面,docker在打包镜像时,会忽略,写的是文件路径;
  • 制作镜像:接下来就可用docker build来制作image。

小知识

  • ${Vars:-word}:表示Vars未设置或为空时,给这个变量赋word值;
  • ${Vars:+word}: 表示如果Vars设置了且不为空,给这个变量赋word值;

Dockerfile instructions

FROM

  • 为最重要的指令,且必须为Dockerfile文件非注释的第一行,用于为镜像构建过程中指定base image,后续所提供的指令都是基于该镜像所提供的环境执行的;
  • 实践中,docker build的时候会首先在docker本地查找该镜像,如果本地不存在,就从docker Hub上面找;
  • 语法: FROM [:tag]。 其中repository为base 镜像的名称;tag为base image的标签,可省略,默认为latest。

MAINTANIER(已被废弃,被LABEL替代)

  • 用于写镜像制作者的个人信息。

LABEL

  • 在最新的docker版本中,已经替换成LABEL,给这个镜像指定各种各样的元数据,语法格式为键值对,key=value,…;

COPY

  • 从当前镜像工作目录中的文件复制到容器中;
  • 语法格式:COPY src dest或 COPY [“src”,”dest”],一般源文件为相对路径在Dockerfile工作目录;目的文件为绝对路径,目标路径不存在时,会自动创建;
  • 准则:如果为一个目录,那么该目录下面的文件或递归子目录将会被复制过去,自身目录不会被复制过去;dest作为目录时候,必须以/结尾;
  • 复制文件:
  • 怎么通过dof 信息重新编译成res 文件 do-file_Dockerfile_02

  • Build Image
  • 怎么通过dof 信息重新编译成res 文件 do-file_文件复制_03

  • 复制目录:
    比如要把Dockerfile下面的一个目录复制到docker容器里面;
  • 怎么通过dof 信息重新编译成res 文件 do-file_文件复制_04

  • 修改Dockerfile文件:
  • 怎么通过dof 信息重新编译成res 文件 do-file_Dockerfile_05

  • Build image:
  • 怎么通过dof 信息重新编译成res 文件 do-file_文件复制_06

总结

上述为最简单的build image的过程,先简单感受下。在Dockerfile中一定要惜字如金,能合并在一条指令的尽量合并,因为,每一条指令都会在image上面增加一层,层数越多,对后面的维护越复杂,其他指令