文章目录
- 一、镜像的分层结构
- 二、镜像的构建
- 1. 从容器构建镜像(简:容器镜像) --commit命令
- 1.1 commit 详述
- 1.2 构建方式
- 2. Dockerfile构建镜像
- 2.1 Dockerfile 参数
- 2.2 构建方式
一、镜像的分层结构
如上图所示:
- 共享宿主机的kernel
- base镜像提供的是最小的Liunx发行版
- 同一docker主机支持运行多种Liunx发行版
- 采用分层结构的最大好处是:共享资源
如上图所示:
- Copy-on-Write 可写容器层
- 容器层以下所有镜像层都只是可读的
- docker 从上往下依次查找文件,即最上最早生效
- 容器层保存镜像变化的部分,并不会对镜像本身进行任何修改
- 一个镜像最多127层
例:拉取镜像部分操作
二、镜像的构建
1. 从容器构建镜像(简:容器镜像) --commit命令
1.1 commit 详述
a. docker commit 构建新镜像三部曲
- 运行容器
- 修改容器
- 将容器保存为新的镜像
b. 缺点
- 效率低、可重复性若,容易出错
- 使用者无法对镜像进行审计,存在安全隐患
1.2 构建方式
2. Dockerfile构建镜像
2.1 Dockerfile 参数
参数:maintainer
参数:ADD
参数:ENV
参数:EXPOSE
查看端口
参数:VOLUME
参数:WORKDIR
参数:RUN
参数:CMD & ENTRYPOINT多个命令时仅仅执行最后一个!!!
输出变量
ENTRYPOINT
参数:Shell
2.2 构建方式
a. Dockerfile语法
- Dockerfile由一系列指令和参数组成。每条指令都必须为大写字母,并且后面要跟随一个参数
- Dockerfile中的指令会按照顺序从上到下执行,所以应该根据需要合理安排指令的顺序
- 每条指令都会创建一个新的镜像层并对镜像进行提交
b. Docker大体上按照如下流程执行Dockerfile中的指令
- Docker从基础镜像运行一个容器。
- 执行第一条指令,对容器进行修改。
- 执行类似docker commit的操作,提交一个新的镜像层。
- Docker再基于刚提交的镜像运行一个新的容器。
- 执行Dockerfile中的下一条命令,直到所有指令都执行完毕
示例一:可以清晰的知道构建镜像的具体步骤
示例二:可以观察到资源共享
示例三:观察到缓存特性