目录
一、Dockerfile概念
Docker是一个文本文件,文件中包含了一条条的指令(instruction),用于构建镜像。每一条指定构建一层镜像,因此每一条指令的内容,就是描述该层镜像应当如何构建
- dockerfile是自定义镜像的一套规则
- docker由多条指定构成,docker的每一条指令都会对应于docker镜像中的每一层
dockerfile的原理就是镜像分层。
① Dockerfile中的每个指令都会创建一个新的镜像层(是一个临时的容器,执行完后将不再存在,再往后进行重新的创建与操作)。
② 镜像层将被缓存和复用(后续的镜像层将基于前面的一层,每一层都会有下面几层的缓存)
③ 当dockerfile的指令修改了,复制的文件变化了,或者构建镜像时指定的变量不同了(后续操作必然更改前面的镜像层),那么对应的镜像层缓存就会失效(自动销毁)。
④ 某一层的镜像缓存失效之后,它之后的镜像层缓存都会失效(第一层不成功,那么第二层也不成功,相当于地基)。
⑤ 容器的修改并不会影响镜像,如果在某一层中添加一个文件,在下一层中删除它,镜像中依然会包含该文件。
二、Docker镜像的创建
创建镜像的三种办法
- 基于已有镜像的创建
- 基于本地模板创建
- 基于Dockerfile创建
2.1 基于已有的镜像创建
原理:将容器里面运行的程序及运行环境打包生成新的镜像
docker commit [选项] [容器id] 仓库名:标签
常用选项
选项 | 描述 |
---|---|
-m | 说明信息 |
-a | 作者信息 |
-p | 生成过程中停止容器的运行 |
2.2 基于本地模板创建
原理:通过导入操作系统模板文件生成新的镜像
wget http://download.openvz.org/template/precreated/debian-7.0-x86-minimal.tar.gz
#使用wget命令导入为本地镜像
docker import debian-7.0-x86-minimal.tar.gz -- debian:v1
或
cat debian-7.0-x86-minimal.tar.gz |docker import - debian:v1
#生成镜像
docker images
#查看镜像
docker run -itd debian:v1 bash
#创建并启动容器
2.3 基于dockerfile创建
- dockerfile是一组指令组成的文件
- dockerfile每行支持一条指令,每条指令可携带多个参数,一条指令可以用&&方式,去写多条指令
- dockerfile支持以"#"为开头的注释
dockerfile结构
- 基于镜像信息(linux发行版:比如centos、ubuntu、suse、debian、alpine、redhat)
- 维护者信息(docker search可查看)
- 镜像操作指令(tar yum make)
- 容器启动时执行指令(cmd [“/root/run/sh”]、entrypoint、都是系统启动时,第一个加载的程序/脚本/命令)
构建镜像的命令
可以在构建镜像时指定资源限制
在编写Docker时,需要遵守严格的格式
- 第一行必须使用FROM