创建镜像的方法有三种:基于已有镜像的容器创建、基于本地模板导入、基于Dockerfile创建,本博文讲解前两种。

基于已有镜像的容器创建

该方法是使用docker commit命令,其命令格式为:

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

主要参数选项包括:

-a ,–author=”” 作者信息

-m,–message=”” 提交信息

-p,–pause=true 提交是暂停容器运行

比如,先创建一个运行bash的ubuntu容器:

docker run –it ubuntu /bin/bash

root@d8990fec2141:/# touch test

root@d8990fec2141:/# exit

然后根据创建的这个容器来提交一个新的镜像,提交时需要用到容器ID。

docker commit –m “test” –a “zmc” d8990fec2141 testimage

如果成功的话,就会返回新镜像的长ID号,然后可以查看看在本地已有的镜像:

docker images

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE

testimage latest baea98d5a437 About a minute ago 188.3 MB

……

第三行就是刚刚创建的镜像。

PS:利用此容器创建的镜像Id与此容器的镜像id不同,可知它们不是同一镜像。

基于本地模板导入

也可以从操作系统模板文件导入一个镜像,比如使用OpenVZ提供的模板创建,OPENVZ下载模板在:http://openvz.org/Download/template/precreated。

我尝试使用了Ubuntu14.04的模板:

wget http://download.openvz.org/template/precreated/ubuntu-14.04-x86_64-minimal.tar.gz

下载完之后就可以导入了:

sudo cat ubuntu–14.04–x86_64–minimal.tar.gz | docker import – ubuntu:14.04

其实只是两个命令,不过很显而易见,就不加解释了。成功的话,就会返回根据模板建立的镜像的长ID

sudo cat ubuntu–14.04–x86_64–minimal.tar.gz | docker import – ubuntu:14.04

ab80404d13d580965b9919b640169ccb585ea7884e6aa9de1ec043075c65fe35

然后就可以查看本地的镜像:

docker images

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE

ubuntu 14.04 ab80404d13d5 56 seconds ago 215.4 MB

testimage latest baea98d5a437 29 minutes ago 188.3 MB

….

其实可以看出,虽然模板才75M,但创建的镜像并不小。

镜像的存出和载入

可以利用docker save和docker命令来存出和载入镜像。

存出镜像

如果想要把镜像存出到本地文件,可以使用docker save命令,例如,存出本地的刚才创建的testimage:lastest为镜像文件testimage.tar文件:

docker images

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE

testimage latest baea98d5a437 25 minutes ago 188.3 MB

ubuntu latest fa81ed084842 3 days ago 188.3 MB

….

docker save –o /data/testimage.tar testimage:latest

上面的第6行就是存出代码,这时在/data下就有一个testimage.tar文件,这时我们把本地镜像rmi掉,然后尝试载入。

载入镜像

删除镜像之后的状态:

ubuntu@VM–223–238–ubuntu:/data$ docker rmi baea98d5a437

Untagged: testimage:latest

Deleted: baea98d5a4371a6abf9efc8c53a54a6fc5befd167bf91ce9fd4a28a6d1b7dc5b

ubuntu@VM–223–238–ubuntu:/data$ docker images

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE

ubuntu 14.04 ab80404d13d5 5 minutes ago 215.4 MB

然后载入镜像:

docker load —input testimage.tar

docker images

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE

ubuntu 14.04 ab80404d13d5 6 minutes ago 215.4 MB

testimage latest baea98d5a437 35 minutes ago 188.3 MB

第一行就是载入镜像,还可以简化写成:

docker load —input testimage.tar

docker images

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE

ubuntu 14.04 ab80404d13d5 6 minutes ago 215.4 MB

testimage latest baea98d5a437 35 minutes ago 188.3 MB

载入操作将会导入镜像以及相关的元数据信息(包括标签等)。

镜像的上传

最后说点镜像的上传,镜像的管理方式非常像git,可以使用docker push命令上传自己本地镜像到仓库,默认上传到DockerHub官方仓库(需要登陆),命令格式:

docker push NAME[:TAG]

在上传之前一般会先为自己的镜像添加带自己名字(作者信息)的标签:

docker tag testimage:lastest zmc/testimage:lastest

docker pushzmc/testimage:lastest

有利于上传之后的区分。

我觉得无论是运维团队还是开发团队还是一个实验室,都有必要有一个自己的Docker仓库,可以存放符合自己需求的环境或系统镜像,可以实现快速部署。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

模板会有多层镜像_创建镜像的方法有三种:基于已有镜像的容器创建、基于本地模板导入、基于Dockerfile创建,本博文讲解前两种。基于已有镜像的容器创建该方法是使用docke...相关推荐

  1. 两种解除禁止右键、选中、复制的方法

    我在网上找的 两种解除禁止右键.选中.复制的方法 1.直接存到书签点击即可 javascript:(function(){var doc=document;var bd=doc.body;bd.ons ...

  2. 小白编程笔记——JavaScript中两种把表单内容传递给Controller的方法

    工作的时候看到有两种把页面上内容传递给Controller的方法,其中一种是传递对数据库的搜索条件,并且会根据搜索条件访问数据库,并将更新后的数据写在JqGrid表格里.另一种则是用于为数据库新增数据 ...

  3. arcgis导入excel数据_导入Excel数据到ArcGIS属性表的两种实用方法

    导入Excel数据到ArcGIS有两种方法,一种是用ArcMap的加载数据(黄色+号那个):另一种是用ArcCatalog直接转为shp文件,两种方法的原理是一样的. 第一种方法 1.Excel数据: ...

  4. python类中的属性分为类属性和实例属性两种_python中类和实例如何绑定属性与方法示例详解...

    前言 python类与实例的方法的调用中觉得云里雾里,思考之后将自己的想法记录下,一来加深自己理解,巩固自己记忆,而来帮助一些想要学习python的朋友理解这门抽象的语言,由于Python是动态语言, ...

  5. android 投屏 app 三星,两种支持三星Note10投屏到电脑的方法推荐

    北京时间8月8日,三星在美国纽约召开发布会,发布了三星下半年的旗舰手机Galaxy Note 10系列. 三星Note10系列此次采用了后置4摄设计,在最新的DxO拍照评分中,Note 10+获得了1 ...

  6. python中文聊天_Python下两种曲线救国实现AIML中文聊天机器人功能的方法

    alicebot.jpg AIML,全称Artificial Intelligence Markup Language,是一种XML模式,用做自然语言聊天机器人的规则库. 最简单的AIML规则如下: ...

  7. 区别于传统低效标注,两种基于自然语言解释的数据增强方法

    本文内容整理自 PaperWeekly 和 biendata 在 B 站组织的直播回顾,点击文末阅读原文即可跳转至 B 站收看本次分享完整视频录像,如需嘉宾课件,请在 PaperWeekly 公众号回 ...

  8. Mysql 两种情况下更新字段中部分数据的方法

    Mysql更新字段中部分数据的两种情况在下文给予详细的解决方法,感兴趣的朋友可以参考下哈 Mysql更新字段中部分数据第一种情况: 代码如下: update tab set A = concat(su ...

  9. 横向比较图像标注中的两种基于近邻思想的方法 TagProp和SGSSL

    利用近邻传递标签的思想进行图像标注在近几年的图像标注工作中取得了很好的效果,甚至有点难以超越的感觉了.其中最具有代表性的是09年ICCV上的 <TagProp:Discriminative Me ...

最新文章

  1. linux内核链表以及list_entry--linux内核数据结构(一)
  2. Java发送邮件的简单实现
  3. java 常用接口的实现--compareable
  4. php图片传入及改名代码,WordPress添加媒体中文名图片上传改名(优化版)
  5. 【LeetCode从零单排】No14.LongestCommonPrefix
  6. 【数据库】数据模型基础概念(图文版)
  7. 【Java】深入理解Java线程
  8. 【BZOJ4300】绝世好题,位运算相关DP
  9. angular-devextreme treeview 学习笔记
  10. yolov5-6.0 出现Arial.ttf无法下载问题解决办法
  11. MAX to UE4 单位设置
  12. 如何快速分割多个视频,提取每个原音频单独保存
  13. 3 A VTT端接 稳压器 NCP51200MNTXG资料
  14. 【基础课程】计算机网络
  15. 梁漱溟:做学问的八个境界
  16. 静态代理,JDK动态代理,Cglib动态代理详解
  17. java用面向对象写吃货联盟,火星车(面向对象思想编程)
  18. STi7105用nand flash启动的问题
  19. 竞猜行情齐腰斩!变盘在即,ORS绝地求生
  20. Even Loop(事件循环机制)

热门文章

  1. Django中重定向页面的时候使用命名空间
  2. Anaconda创建环境、删除环境、激活环境、退出环境
  3. (转)Virtual PC 2007虚拟网络设置
  4. 《微软文档管理解决方案2007》之一:安装部署 - [SharePoint Server]
  5. Linux 使用ntpdate自动对时
  6. Android 通过代码改变控件的布局方式
  7. 20135202闫佳歆-第二章家庭作业-2.69
  8. 编程中定义的方法报异常问题
  9. 7个你不知道的WP7开发工具
  10. GridView使用一些记录