一、dockerfile概念
-
dockerfile是**自定义镜像**的一套规则
-
dockerfile由多条指令构成,Dockerfile中的每一条指令都会对应于Docker镜像中的每一层
1.1docker镜像的分层
dockerfile的原理就是镜像分层。
-
Dockerfile 中的**每个指令都会创建一个新的镜像层**(是一个临时的容器,执行完后将不再存在,再往后进行重新的创建与操作)
-
镜像层将被缓存和复用(后续的镜像层将基于前面的一层,每一层都会有下几层的缓存)
-
当 Dockerfile 的指令修改了,复制的文件变化了,或者构建镜像时指定的变量不同了(后续操作必然更改前面的镜像层),那么对应的镜像层缓存就会失效(就会自动销毁)
-
某一层的镜像缓存失效之后,它之后的镜像层缓存就都会失效(第一层不成功,那么第二层也就再成功,相当于地基)
-
容器的修改并不会影响镜像,如果在某一层中添加一个文件,在下一层中删除它,镜像中依然会包含该文件
二、Docker镜像的创建
2.1基于dockerfile创建
dockerfile是由**一组指令组**成的文件
dockerfile每行支持一条指令,每条指令可携带多个参数,一条指令可以用&&方式,去写多条指令。
dockerfile支持以“#”为开头的注释
2.1.1dockerfile 结构(四部分)
- 基础镜像信息(Linux发行版:centos ubantu suse debian alpine redhat)
- 维护者信息(docker search可查看)
- 镜像操作指令(tar yum make)
- 容器启动时执行指令(**cmd["/root/run.sh"] 、entrypoint**都是系统启动时,第一个加载的程序/脚本/命令)
2.1.2dockerfile操作指令
指令 | 含义 |
---|---|
FROM [镜像] | 指定新镜像所基于的镜像, |