如何把一个容器从开发环境取出来,到其他机器上跑起来?docker hub是一个很好的选择,把镜像提交上去,到另外的机器上拉取下来,很方便。
但是,没有网络怎么办,本文告诉你如何操作。
方式一
docker save 和 docker load
导出镜像
docker save -o <target> <images_name:image_tag>
或者
docker save -o <target> <container_name>
例如
docker save -o redis.tar http://docker.io/redis:3.2.3-alpine
docker save 命令会导出镜像或者容器所使用的镜像。
导入镜像
docker load -i <target>
例如
docker load -i redis.tar
镜像导入时,会保存镜像的每一层信息不会丢失,通过docker history命令即可查看。
方式二
docker export 和 docker import
导出镜像
docker export -o <target> <container_name>
例如
docker export -o redis_export.tar redis_container
导入镜像
docker import <target> <image_name:image_tag>
例如
docker import redis_export.tar http://docker.io/redis:9999
这种方式导出导入的镜像,镜像的每一层的文件系统已经被合并,相关信息已经丢失。
总结
docker save和docker export的区别:
- docker save保存的是镜像(image),docker export保存的是容器(container);
- docker load用来载入镜像包,docker import用来载入容器包,但两者都会恢复为镜像;
- docker load不能对载入的镜像重命名,而docker import可以为镜像指定新名称;
- docker save和 docker load过程能够保留镜像分层的文件系统,docker export和docker import则没有保存。