对于有些环境需要离线安装的情况,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使用测试的更多相关文章

  1. docker save/load、export/import 区别

    区别: save的对象是image,产生的文件需要用load来生成image: export的对象是container,产生的文件需要用import来生成image. save Save one or ...

  2. docker save load export import的区别

    export export命令用于持久化容器(不是镜像).所以,我们就需要通过以下方法得到容器ID: sudo docker ps -a 接着执行导出: sudo docker export < ...

  3. Docker save & load

    docker save Estimated reading time: 1 minute Description Save one or more images to a tar archive (s ...

  4. 使用docker save load 的时候的一个小问题

    当你使用docker save image_id > aa.tar ; 然后再使用 docker load < aa.tar 时, 你会发现此时导入的镜像的repository和 tag ...

  5. docker 学习(六) export/import/load/save images

    export/import 是一对命令:   load/save是一对命令 一: export / import使用 1:  查看镜像:  docker ps -a 2:导出镜像:docker  ex ...

  6. Docker之save、load、export、import命令

    Docker的镜像和容器可以有两种方式导出 1.Docker save #ID or #Name 2.Docker save #ID or #Name docker save和docker expor ...

  7. [转] docker save与docker export的区别

    [From]http://cnodejs.org/topic/59a2304f7aeedce818249eeb 很久没有写博客了,坟头草都长了老高了.写博客要靠惯性,一旦停下来时间长了,就很难再坚持下 ...

  8. [转帖]Docker save and load镜像保存

    Docker save and load镜像保存 https://www.cnblogs.com/zhuochong/p/10064350.html docker save 和 load 以及 imp ...

  9. Docker(十三)-Docker save and load镜像保存

    持久化docker的镜像或容器的方法 Docker的镜像和容器可以有两种方式来导出 docker save #ID or #Name docker export #ID or #Name docker ...

随机推荐

  1. JavaScript特点有哪些

    JavaScript特点有哪些 JavaScript 文字脚本语言是一种动态的.弱类型的.基于原型的语言,具有内置的支持类型.它的解释器被称为javascript引擎,是浏览器的一部分,广泛用于客户端 ...

  2. 转载:PHP扩展函数库-文件系统、进程与网络

    PHP的扩展函数库十分庞大,官方的非官方的,在这里只记录一些目前比较常用的扩展,对于这一部分,也只是记录其中一些核心的函数,不是一个全面记录.对于详细的扩展函数说明,需要在使用中参考PHP的用户手册. ...

  3. vue 项目文件流数据格式转blob图片预览展示

    为了图片安全性,有时候上传图片后后台不会直接返回图片地址,会返回文件流的数据格式,这种格式需要处理下才能展示在页面上   // 使用axios请求上传接口 axios({ method: 'get', ...

  4. linux之getopts

    在编写shell脚本中,经常要处理一些输入参数,在使用过程中发现getopts更加方便,能够很好的处理用户输入的参数和参数值. getopts用于处理用户输入参数,举例说明使用方法: while ge ...

  5. API开发之接口安全(四)----sign的唯一性

    r如何解决sign的唯一性呢,在以往的经验中,我们都是通过标识来确定 如果有 那就用过如果没有那就是没用过 当然我们还需要将sign存储起来 这样我们才能更好的去判断他是否用过 存储的话 我们有几种方 ...

  6. JavaScript捕获和冒泡探讨

    <div id="div"> <input type="button" value="banana" id="b ...

  7. 2019牛客暑期多校训练营(第一场)E ABBA

    题意问你有多少个长度为2*(n+m)的字符串满足A和B数量相等 且可以分割为n个AB子序列和m个BA子序列 很容易得出前n个A肯定是可以给AB的 后面的m个A给BA 所以当一个字符串满足条件时要满足任 ...

  8. MySQL 5.6, 5.7, 8.0版本的新特性汇总大全

    转载:http://blog.itpub.net/15498/viewspace-2650661/ MySQL 5.6 1).支持GTID复制 2).支持无损复制 3).支持延迟复制 4).支持基于库 ...

  9. echarts自定义折线图横坐标时间间隔踩坑总结

    折线图需求:横坐标为时间,要求按一定间隔展示,鼠标移至折线上间隔时间内的数据也可展示 其实很简单的一个配置就可搞定,但在不熟悉echarts配置的情况下,就很懵逼 xAxis: { boundaryG ...

  10. Java8-Stream-No.09

    import java.util.Arrays; public class Streams9 { public static void main(String[] args) { Arrays.asL ...