一.简介

生产环境部署应用,一般都是将一个产品的image做成一个tar包,然后实施人员部署时只需要docker load导出就可以了。无论是为了备份images还是实施部署,都很方便。

二.方法

1.打包使用docker save命令

打包一个,如将mysql:latest打包成mysql.tar包

docker save -o mysql.tar mysql:latest

打包多个,如j将mysql:latest  nginx:latest  php:latest打包成lnmp.tar

docker save -o  lnmp.tar  mysql:latest  nginx:latest  php:latest

打包所有,如将所有Images打包

docker load -o all.tar  $(docker images -q)

2.导出使用docker load -i  

将tar包里面的镜像导出来

docker load -i mysql.tar
docker load -i lnmp.tar
docker load -i all.tar

另外,当磁盘空间较小,可以这样操作,all.tar是打包后的包

gunzip -c all.tar | docker load

三.可能遇到的问题

问题:

docker load还原后,没有标签tag,REPOSITORY和TAG都是<none>,保留了IMAGE ID

原因:

可能得原因是docker run创建容器的同时拉取docker pull镜像,run后没有tag的动作(docker build tag 或docker tag)。

如这样docker run后,容器直接运行了

#自定义创建数据库容器
docker run -itd \
--name lnmp_mysql \
--net lnmp \
-p 3306:3306 \
--mount src=mysql-vol,dst=/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:latest \
--character-set-server=utf8 \
--collation-server=utf8_general_ci

解决:

docker save前执行一个tag动作,然后再docker save完成后,docker load -i后就有标签了。

docker tag mysql镜像id mysql:latest
docker save -o mysql.tar mysql:latest
docker image rm -f mysql:latest
docker load -i mysql.tar

未通过docker-compose管理时流程是:容器到镜像:Dockerfile -->  docker build  ->  docker run