一、是什么
Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本
构建由三个步骤
1、手动编写一个Dockerfile文件,必须符合Dockerfile规范
2、编写完之后,直接docker build,获得一个自定义的镜像
3、docker run
# 以官网的centos 6.8为例,简单了解一下Dockerfile文件
# scratch:所有镜像文件的祖先类,相当于Java中的Object
FROM scratch
# MAINTAINER:作者+邮箱
MAINTAINER The CentOS Project <[email protected]>
# 增加
ADD c68-docker.tar.xz /
# LABEL:标签相当于说明
LABEL name="CentOS Base Image" \
vendor="CentOS" \
license="GPLv2" \
build-date="2016-06-02"
# Default command
CMD ["/bin/bash"]
二、Dockerfile构建过程解析
基础
# 1、每条保留字指令字指令都必须大写字母且后面要跟随至少一个参数
# 比如 上面的 FROM scratch 和 MAINTAINER The CentOS Project <[email protected]> 等,FROM 和 MAINTAINER 指令字后面都必须跟随至少一个参数,不然会报错
# 2、指令按照从上到下,顺序执行
# 3、#表示注释
# 4、每条指令都会创建一个新的镜像层,并对镜像进行提交
Docker执行Dockerfile的大致流程
# 1、docker从基础镜像运行一个容器
# 2、执行一条指令并对容器做出修改
# 3、执行类似docker commit的操作提交一个新的镜像层
# 4、docker再基于刚提交的镜像运行一个新容器
# 5、执行dockerfile中的下一条指令直到所有指令都执行完成
从软件的角度看,Dockerfile、Docker镜像和Docker容器代表软件三个状态
Dockerfile是软件的代码
Docker镜像是经过测试的软件产品
Docker容器是软件运行时的状态
Dockerfile相当于开发,Docker镜像相当于出货标准,Docker容器相当于部署和运维。
# 1、Dockerfile,需要定义一个Dockerfile,Dockerfile定义了进程需要的一切东西。Dockerfile涉及的内容包括执行代码或者文件、环境、变量、依赖包、运行时环境、动态链接库、操作系统的发行版、服务进程和内核进程(当应用进程需要和内核进程打交道,这时需要考虑如何设计namespace的权限控制)等等
# 2、Docker镜像,在用Dockerfile定义一个文件之后,docker build时会产生一个docker镜像,运行镜像,才会提供服务
# 3、Docker容器,容器是直接提供服务的。