Docker中有个非常重要的概念叫做——镜像(Image)。Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
镜像的定制实际上就是定制每一层所添加的配置、文件。如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,那么之前提及的无法重复的问题、镜像构建透明性的问题、体积的问题就都会解决。这个脚本就是 Dockerfile。
Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。
dockerfile的优点:
相对于手动制作的docker镜像,使用dockerfile构建的镜像有以下优点:
1:dockerfile只有几kb,便于传输
2:使用dockerfile构建出来的镜像,在运行容器的时候,不用指定容器的初始命令
3:支持更多的自定义操作
Dockerfile 一般分为四部分:基础镜像信息、维护者信息(可以没有)、镜像操作指令和容器启动时执行指令,’#’ 为 Dockerfile 中的注释。
要使用多个Dockerfile 创建镜像,可以在不同目录编写Dockerfile,然后在Dockerfile 所在的目录下构建新的镜像。
注意:Dockerfile 中所包含的需要的内容;如COPY的文件、目录等,都需要在Dockerfile 同级目录下存在。
dockerfile的指令说明:

1、FROM指令
代码片段
Plain Text · 13 lines|
| • FROM 指令必须是 Dockerfile 中非注释行的第一个指令,即一个 Dockerfile 从FROM语句; |
| • FROM 指令用于为镜像文件构建过程指定基础镜像,后续的指令运行于此基础镜像所提供的运行环境; |
| • 实践中,基准镜像可以是任何可用镜像文件,默认情况下,docker build会在docker主机上查找指定的镜像文件,在其不存在时,则会自动从 Docker 的公共库 pull 镜像下来。如果找不到指定的镜像文件,docker build 会返回一个错误信息; |
| • FROM可以在一个 Dockerfile 中出现多次,如果有需求在一个 Dockerfile 中创建多个镜像。 |
| • 如果FROM语句没有指定镜像标签,则默认使用latest标签。 |
| 指令格式: |
| FROM <repository>[:<tag>] 或 |
| FROM <repository>@<digest> |
| 注: |
| • <repository>:指定作为base image的名称; |
| • <tag>:base image的标签,省略时默认latest; |
| • <digest>:是镜像的哈希码;使用哈希码会更安全一点; |
案例:
代码片段
Plain Text · 3 lines|
| # Description: centos nginx image |
| FROM centos:7 |
| #来自centos版本为7的基础镜像 |
2、 MAINTAINER指令(可以省略)
代码片段
Plain Text · 5 lines|
| 用于让dockerfile制作者提供本人的详细信息 |
| • dockerfile 并不限制MAINTAINER 指令可在出现的位置,但推荐将其放置于FROM指令之后 |
| 指令格式: |
| MAINTAINER <authtor's detail> |
案例:
代码片段
Plain Text · 4 lines|
| # Description: test image |
| FROM centos:7 |
| MAINTAINER "kingseal <[email protected]>" |
| #镜像维护者的信息 |
3、COPY指令
案例: