镜像的实质就是一个轻量级
可独立执行
的软件包
内部包含 软件代码+运行时+库+环境变量+配置文件等等
1、docker镜像加载原理
1、UnionFS联合文件系统
UnionFS是一种分层
轻量级
高性能
的文件系统
对文件系统的每一次修改看作是一个层,然后每层每层的叠加为最新的文件,类似于git对文件版本的管理
可以将不同目录挂载到同一个虚拟文件系统下
docker中使用的就是UnionFS,体现在每次的下载时,一层一层的下载,如果已有则直接跳过,提高效率
docker中镜像可以通过分层来进行继承,基于基础镜像可以制作各种具体的应用镜像
2、分层原理
docker最低层是 bootFS
。bootFS
包含boot加载器和内核
docker最底二层是rootFS
。rootFS
包含linux系统的标准目录和文件,是各种操作系统的发行版,例如Ubuntu
Centos
等
具体安装镜像的时候,也是采用这样的分层的原理。比如要安装redis,需要先安装系统比如是Centos,那么下次再安装es的时候就可以直接跳过安装Centos这一步,直接进行下一层的安装,提升了下载安装的效率
可以通过命令docker inspect 容器id
查看Layers
,可以显示出容器被分为了多少层
docker镜像都是只读的,当用docker run
命令执行之后,新做的操作会被增加到原来的镜像层上面
所以就分为了两层镜像层
和容器层
,镜像层
就是原来pull下来的,容器层
就是run后的新的所有的操作
2、镜像的提交
通过命令docker commit
提交容器成为一个新的副本,类似于git提交文件
docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[TAG]
以下以`tomcat`为例
1、先对原来tomcat进行修改
下载并运行tomcat
`docker pull tomcat`
`docker run -d -p 8080:8080 tomcat`
对tomcat进行修改
`cp -r ../webapps.dist/* ../webapps`
2、commit 修改后的tomcat到本地,然后使用`docker images`查看本地提交的image
`docker commit -a="author" -m="commit webapps" a97a1e7a6a94 tomcat-author:1.0`
`docker images`
>REPOSITORY TAG IMAGE ID CREATED SIZE
>tomcat-author 1.0 1ef4423d8b56 4 seconds ago 673MB