一.简介
生产环境部署应用,一般都是将一个产品的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