docker save/load以及export/import使用测试
对于有些环境需要离线安装的情况,docker以及docker容器都需要能够支持离线安装,对于docker离线安装,比较简单,按照https://www.cnblogs.com/qq931399960/p/11120429.html下载docker依赖包即可。对于docker容器或者镜像的离线安装,下面以mysql 5.7.27版本为例进行下测试。
save/load
一、按照如下方式安装并启动mysql docker容器
https://www.cnblogs.com/qq931399960/p/11341875.html
二、修改mysql容器配置参数,比如将max_connections设置为2000
三、将当前mysql容器保存为一个新的镜像(镜像是只读的,我们不能够修改镜像。如果不保存当前镜像,而且直接save之前默认的镜像,则参数max_connections的值不会是2000)
格式:
docker commit containerID repository:tag
四、将新保存的镜像save到本地
格式
docker save imageID -o saveImageName.tar 或者
docker save imageID > saveImageName.tar
五、加载镜像,当前使用了一台虚拟机进行测试,为了效果明显,先停止并删除已经保存到本地IMAGE ID为58197de028a9的容器和镜像
加载镜像格式
docker load -i saveImageName.tar 或者
docker load < saveImageName.tar
我们发现,只导入了一层数据,这是由于docker镜像是分层的,我们系统中已经存在一个从docker.io/mysql库中获取到的mysql,并且我们当前导入的容器是在其基础上生成,docker使用公共的mysql容器的分层,只加载了不同的分层。如果我们将原有的mysql镜像都删除,则每层都会加载,由于我们做了修改,故会新加一层,及上图中大小12.29k的最后一个层。
可以发现,这里有12层,比之前默认下载的5.7.27版本多了一层。
六、解决镜像REPOSITORY和TAG为none问题
通过docker images可以发现IMAGE ID和SIZE都与之前一致,但REPOSTIORY和TAG显示为none
解决此问题,需要使用到docker tag命令
格式
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG] 或者
docker tag IMAGEID TARGET_IMAGE[:TAG]
七、验证
根据新导入的镜像,启动mysql容器
docker run --name mysqltest -p : -e MYSQL_ROOT_PASSWORD= -d mysql:5.7.
查看mysqlmax_connections配置是否为2000,为2000,则镜像导出导入正确
docker exec -it mysqltest mysql -uroot -p;
show variables like '%max_connections%';
export/import
停止已启动的mysql容器并删除,删除所有mysql镜像,重新安装mysql 5.7.27版本,并设置max_connections的值为2000
一、导出容器
格式
docker export CONTAINER ID|NAME -o container_name.tar
二、导入容器(可直接导入到当前服务器,或者下载并上传到其他服务器导入)
格式
docker import container_name.tar 或者
cat container_name.tar | docker import -repository:tag
前者导入的容器,repository和tag都为none,如果使用此方式,则需要使用tag命令修改下repository和tag,后者则对应的值分别为mysqlnew和5.7.27。导入的为容器,但导入到服务器后,变为了镜像。
三、启动新导入的镜像(mysqlnew)
按照常用方式启动(mysqltest容器名称,及3306端口已被占用)
docker run --name mysqltestnew -p : -e MYSQL_ROOT_PASSWORD= -d mysqlnew:5.7.
根据错误提示信息,大致可以看出来是由于命令缺失,造成启动失败,使用如下命令查看已启动的mysql所使用的command
docker ps --no-trunc
修改启动命令,并重新启动
docker run --name mysqltestnew -p : -e MYSQL_ROOT_PASSWORD= -d mysqlnew:5.7. docker-entrypoint.sh mysqld
启动正常,登录到mysql客户端,查看max_connections的值也为2000。
save/load和export/import区别
1、前者保存的为镜像,后者导出的为容器
2、前者导入的镜像后需要使用tag执行repository和tag,后者可以在导入的时候指定这两个参数
3、以mysql为例,前者启动时不需要添加docker-entrypoint.sh mysqld,后者则需要
4、前者导入的时候,只导入所需的层,并显示导入的进度及image id,分层导入结果很清晰,后者则只返回image id
5、前者导入的镜像大小不变,后者导入的镜像则丢失了一些历史和层数据,数据包比较小
可通过如下官方地址了解更多命令
https://docs.docker.com/engine/reference/commandline/
mysql容器启动时将数据挂载在宿主机
mysql默认数据保存地址为/var/lib/mysql,可以通过如下命令在容器启动时,将数据挂载在宿主机,这样重新生成新的镜像,save到本地后,不包含data数据(在测试一遍,另外虽然能差不多肯定如果没有挂载数据,则mysql容器中data会被save到本地,但是也需要测一下????)
docker run --name mysql_test -p : -e MYSQL_ROOT_PASSWORD= -v /docker/mysql/data:/var/lib/mysql -d mysql:5.7.
docker save/load以及export/import使用测试的更多相关文章
- docker save/load、export/import 区别
区别: save的对象是image,产生的文件需要用load来生成image: export的对象是container,产生的文件需要用import来生成image. save Save one or ...
- docker save load export import的区别
export export命令用于持久化容器(不是镜像).所以,我们就需要通过以下方法得到容器ID: sudo docker ps -a 接着执行导出: sudo docker export < ...
- Docker save & load
docker save Estimated reading time: 1 minute Description Save one or more images to a tar archive (s ...
- 使用docker save load 的时候的一个小问题
当你使用docker save image_id > aa.tar ; 然后再使用 docker load < aa.tar 时, 你会发现此时导入的镜像的repository和 tag ...
- docker 学习(六) export/import/load/save images
export/import 是一对命令: load/save是一对命令 一: export / import使用 1: 查看镜像: docker ps -a 2:导出镜像:docker ex ...
- Docker之save、load、export、import命令
Docker的镜像和容器可以有两种方式导出 1.Docker save #ID or #Name 2.Docker save #ID or #Name docker save和docker expor ...
- [转] docker save与docker export的区别
[From]http://cnodejs.org/topic/59a2304f7aeedce818249eeb 很久没有写博客了,坟头草都长了老高了.写博客要靠惯性,一旦停下来时间长了,就很难再坚持下 ...
- [转帖]Docker save and load镜像保存
Docker save and load镜像保存 https://www.cnblogs.com/zhuochong/p/10064350.html docker save 和 load 以及 imp ...
- Docker(十三)-Docker save and load镜像保存
持久化docker的镜像或容器的方法 Docker的镜像和容器可以有两种方式来导出 docker save #ID or #Name docker export #ID or #Name docker ...
随机推荐
- Stanford NLP 课程笔记之计算字符串距离
在自然语言处理任务中,有时候需要计算两个字符串之间的相似度,也可以称作是两者之间的距离,用最小编辑距离表示. 最小编辑距离用{Insertion,Deletion,Substitution}这三种操作 ...
- 图片样式加hover特效
之前有个尴尬的事情发生,我不知道如何将文字放在图片右边,我想了个麻烦且愚蠢的办法,后来才知道只需要将图片居左就可以达到效果.....不说了看下面 需要实现的效果: 很简单, <img src=& ...
- js-回文数
回文数 设n是一任意自然数.若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数. //回文数 let readline = require("readline-sync&quo ...
- 关于写SQL语句的技巧
一.SQL总结写法 SQL的写法无非就是几种,关联查询,子查询,分组函数,各种函数的使用 1.首先根据要做的需求,先分析一下,需要用到哪些查询,例如要用到关联查询,就先把用到的表列出来,比如a,b,c ...
- 简要了解web安全之sql注入
什么是sql注入? 通俗来讲就是通过 将可执行sql语句作为参数 传入查询sql 中,在sql编译过程中 执行了传入进来的恶意 sql,从而 得到 不应该查到或者不应该执行的sql语句,对网站安全,信 ...
- ThinkPHP模板继承和修改title
先说下模板继承: 假定:在View文件夹中 -> Public 公共模块 —>base/header/top/footer 4个html文件 这下面base文件使用include引入其他 ...
- 我理解的epoll(二)——ET、LT的实例分析
https://www.cnblogs.com/yuuyuu/p/5103744.html 这篇文章已经写的很清楚了,暂时不展开论述了. http://blog.csdn.net/weiyuefei/ ...
- python中的网络通信,socket、select、selectors、socketserver
楔子 网络通信用于获取一个算法在本地运行所需的数据,还可以共享信息实现分布式处理,另外可以用来管理云服务. python的标准库提供了一些模块来创建网络服务以及访问现有服务ipaddress模块提供了 ...
- CentOS 6.10 系统安装
本章内容: CentOS 6.10 的安装 一.安装光盘,选择 Install or upgrade an existing system 二.选择 skip 跳过光盘检查 三.选择 Next 四.选 ...
- map()函数浅析
MapReduce的设计灵感来自于函数式编程,这里不打算提MapReduce,就拿python中的map()函数来学习一下. 文档中的介绍在这里: map(function, iterable, .. ...