持久化docker的镜像或容器的方法
Docker的镜像和容器可以有两种方式来导出
docker save #ID or #Name
docker export #ID or #Name
1.docker save和docker export的区别
对于docker save方法,会保存该镜像的所有历史记录
对于docker export 方法,不会保留历史记录,即没有commit历史
docker save保存的是镜像(image),docker export保存的是容器(container);
docker load用来载入镜像包,docker import用来载入容器包,但两者都会恢复为镜像;
docker load不能对载入的镜像重命名,而docker import可以为镜像指定新名称。
2.推荐使用:
导出tar包>>> docker export -o name.tar container_name|ID
导入tar包>>> docker import name.tar image_name:tag
或者:
容器直接导成镜像>>> docker commit 容器名或id repository:tag
3.import命令 - image
从tar包导入为镜像。
docker import [options] file|URL|- [REPOSITORY[:TAG]]
示例
docker import nginx-test.tar nginx:imp
或
cat nginx-test.tar | docker import - nginx:imp
4.save命令 - image
从镜像保存导出为tar包。
docker save [options] images [images...]
示例
docker save -o nginx.tar nginx:latest
或
docker save > nginx.tar nginx:latest
其中 -o 和 > 表示输出到文件,nginx.tar为目标文件,nginx:latest是源镜像名(name:tag)
save命令导出多个镜像到一个tar包
docker save $(docker images | grep -v REPOSITORY | awk 'BEGIN{OFS=":";ORS=" "}{print $1,$2}') -o kube.tar
5.load命令
导入镜像包,包含原数据
docker load [options]
示例
docker load -i nginx.tar
或
docker load < nginx.tar
其中-i和<表示从文件输入。会成功导入镜像及相关元数据,包括tag信息
6.export命令
导出容器为镜像。
docker export [options] container
示例
docker export -o nginx-test.tar nginx-test
#导出为tar
docker export #ID or #Name > /home/export.tar
其中-o表示输出到文件,nginx-test.tar为目标文件,nginx-test是源容器名(name)
7.commit
如果容器导出的镜像没有其他cp
需求的话,有种更快的从容器变为镜像的操作,可以说,一步到位,省去导出成镜像tar包,导入镜像tar包的过程:
docker commit container_name|container_ID repository:tag
帮助文件:
root@ubuntu:~# docker commit --help
Usage: docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
Create a new image from a container's changes
Options:
-a, --author string Author (e.g., "John Hannibal Smith <hannibal@a-team.com>")
-c, --change list Apply Dockerfile instruction to the created image
-m, --message string Commit message
-p, --pause Pause container during commit (default true)