回顾一下之前的内容,镜像的生成途径:
基于容器:
Dockfile文件:就是一个包含用户命令的文本文件,Dockerfile的命令不过区区20多个。
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作为目录时候,必须以/结尾;
- 复制文件:
- Build Image
- 复制目录:
比如要把Dockerfile下面的一个目录复制到docker容器里面; - 修改Dockerfile文件:
- Build image:
总结
上述为最简单的build image的过程,先简单感受下。在Dockerfile中一定要惜字如金,能合并在一条指令的尽量合并,因为,每一条指令都会在image上面增加一层,层数越多,对后面的维护越复杂,其他指令