一、镜像导出 save
1.查看镜像
docker images
2.导出镜像
docker save -o test.tar image_name
或
docker save image_name > /test.tar
二、容器导出 export
1.导出容器
命令格式为:
docker export [-o|--output[=""]] CONTATINER
或:
docker export 容器id/name >文件名.tar
例如:
docker export -o test.img test
test.img : 这里可以导出tar文件 , 也可以导出二进制镜像文件img
test : 需要导出的容器名, 通过docker ps查看
1.import
格式:
docker import [-c|--change[=[]]] [-m|--message[=MESSAGE]] file|URL|-[REPOSITORY[:YAG]]
例如:
docker import test.img test
test : 为镜像名
2.load
格式:
docker load --input /test.tar
区别:
-
docker save保存的是镜像(image),docker export保存的是容器(container);
-
docker load用来载入镜像包,docker import用来载入容器包,但两者都会恢复为镜像;
-
docker load不能对载入的镜像重命名,而docker import可以为镜像指定新名称。
四、部署镜像
1.启动镜像
docker run -d --name container_test --privileged -it test:latest /usr/sbin/init
2.进入镜像
docker exec -it container_test /bin/bash
五.报错
1.执行命令:docker load --input test.tar
2.报错如下
open /var/lib/docker/tmp/docker-import-500852078/repositories: no such file or dir
3.原因:
通过dcker save 导出的镜像就是一个分层的文件系统。Docker镜像实际上就是由这样的一层层文件进行叠加起来的,上层的文件会覆盖下层的同名文件。如果将docker save导出中的各层文件合并到一起,基本就是docker export导入的
的内容。由于docker save
里面的各层文件会存在很多重复的文件,所以通过save导出的文件比export导出的文件大100多M。
docker load必须要载入的是一个分层文件系统,而test.tar如果是由docker export 导出的,那么test.tar
不具有这样的结构,因此无法载入。
而docker import仅仅是将tar包里面的文件复制进来,所以不管tar包里面的文件结构是怎样的,都可以载入进来,所以能够载入test.tar
4.解决:
cat test.tar | sudo docker import - test/ubuntu:v1.0
5.注意:docker load 只能导入镜像文件(也就是通过save导出的文件)