04-Docker 容器镜像持久化
export、import 容器持久化为文件
export 对当前的容器状态建立快照,并持久化为 tar 文件
官方文档:https://docs.docker.com/engine/reference/commandline/export/
1 |
|
注意:使用 export 会把之前分层的镜像合并成,变的只剩一层镜像
import 导入镜像
官方文档:https://docs.docker.com/engine/reference/commandline/import/
语法
1 |
|
示例
1 |
|
适用场景和注意事项
适用场景
主要用来制作基础镜像,比如从一个 ubuntu 镜像启动一个容器,然后安装一些软件和进行一些设置后,使用 docker export 保存为一个基础镜像。然后把这个镜像分发给其他人使用,作为基础的开发环境。(因为export 导出的镜像只会保留从镜像运行到 export 之间对文件系统的修改,所以只适合做基础镜像)
注意事项
- 会丢弃历史记录和元数据。
- 启动 export 与 import 命令导出导入的镜像必须加 /bin/bash 或者其他 /bin/sh,否则会报错。
- docker export 导出的镜像是不带历史记录的,如果原本的镜像有3层,export 之后只会有1层,这一层为从镜像运行到 export 之间对文件系统的修改。
- 可以使用
docker history ImageName/ImageID
查看镜像,只有一层。
save、load 镜像持久化为文件
save 对当前的镜像进行持久化,形成 tar 文件
官方文档:https://docs.docker.com/engine/reference/commandline/save/
1 |
|
使用 save 持久化镜像,镜像的层数不变
压缩的方式打包
1 |
|
load 加载 tar 文件为镜像
官方文档:https://docs.docker.com/engine/reference/commandline/load/
1 |
|
适用场景
生产环境没有外网,在本机将镜像打包成 tar。拷贝到生产环境,再通过 docker push到生产环境本地镜像仓库。
commit 把当前容器变为镜像
commit 官方文档:https://docs.docker.com/engine/reference/commandline/commit/
commit 把当前容器的内容新建一个层文件,覆盖在旧的镜像文件层之上
语法
1 |
|
适用场景
主要作用是将配置好的一些容器复用,再生成新的镜像。
注意事项
commit是一个综合性的命令,它主要做了:
- 将container当前的读写层保存下来,保存成一个新层
- 和镜像的历史层一起合并成一个新的镜像
- 如果原本的镜像有3层,commit之后就会有4层,最新的一层为从镜像运行到commit之间对文件系统的修改。
总结
commit+save 模式:保留了一个镜像的所有历史文件和元数据,它把容器的内容作为一个新的层覆盖在原有镜像之上,然后实现持久化。原有的镜像没有改变。
这样的好处是,当发现这个commit+save的镜像包有问题的时候,可以快速回滚到之前的镜像版本。
export 模式:打扫干净屋子再请客。把之前镜像的层级删干净,只保留最新的快照文件。
这种情况适用于不需要回滚,当前的状态即是最佳状态的时候。这样做的好处是,删除了没有用处的历史数据,同时保留了镜像具有的所有功能,关键是镜像文件还小的很。