文章目录
引言:Dockerfile 是用来构建 Docker 镜像的构建文件, 是由一系列的命令和参数构成的脚本
通过指令的方式构建镜像
一. Dockerfile概念
- dockerfile是自定义镜像的一套规则
- dockerfie由多条指令构成,Dockerfile中的每一条指令都会对应于Docker镜像中的每一层
dockerfile的原理就是镜像分层。 - Dockerfile中的每个指令都会创建一个新的镜像层(是一个临时的容器,执行完后将不再存在,再往后进行重新的创建与操作)。
- 镜像层将被缓存和复用(后续的镜像层将基于前面的一层,每一层都会有下面几层的缓存)
- 当dockerfile的指令修改了,复制的文件变化了,或者构建镜像时指定的变量不同了(后续操作必然更改前面的镜像层),那么对应的镜像层缓存就会失效(自动销毁)。
- 某一层的镜像缓存失效之后,它之后的镜像层缓存都会失效(第一层不成功,那么第二层也不成功,相当于地基)。
- 容器的修改并不会影响镜像,如果在某一层中添加一个文件,在下一层中删除它,镜像中依然会包含该文件。
二. Docker镜像创建
创建镜像有三种方法:
- 基于已有镜像创建
- 基于本地模板创建
- 基于Dockerfile创建(重点)
2.1 基于现有镜像创建
首先启动一个镜像,在容器里做修改
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 87a94228f133 28 hours ago 133MB
centos 7 eeb6ee3f44bd 3 weeks ago 204MB
[root@docker ~]# docker create -it --name test1 centos:7 bash
ae03a782eb8fed80190bfee1c5e459c1e82e1406a55627553e93edc943645217
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ae03a782eb8f centos:7 "bash" 2 seconds ago Created test1
将修改后的容器提交为新的镜像,需要使用该容器的 ID 号创建新镜像
[root@docker ~]# docker commit -m "new" -a "centos" test1 centos:test1
##commit 常用选项:
-m:说明信息
-a:作者信息
-p:生成过程中停止容器的运行
sha256:3e6e91b628effd49a7fa8fea42205