Docker镜像的创建、存出、载入
创建镜像的方法有三种:基于已有镜像的容器创建、基于本地模板导入、基于Dockerfile创建,本博文讲解前两种。
基于已有镜像的容器创建
该方法是使用docker commit命令,其命令格式为:
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
主要参数选项包括:
- -a ,–author=”” 作者信息
- -m,–message=”” 提交信息
- -p,–pause=true 提交是暂停容器运行
比如,先创建一个运行bash的ubuntu容器:
docker run –it ubuntu /bin/bashroot@d8990fec2141:/# touch testroot@d8990fec2141:/# exit
然后根据创建的这个容器来提交一个新的镜像,提交时需要用到容器ID。
docker commit –m “test” –a “zmc” d8990fec2141 testimage
如果成功的话,就会返回新镜像的长ID号,然后可以查看看在本地已有的镜像:
docker imagesREPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZEtestimage latest baea98d5a437 About a minute ago 188.3 MB……
第三行就是刚刚创建的镜像。
PS:利用此容器创建的镜像Id与此容器的镜像id不同,可知它们不是同一镜像。
基于本地模板导入
也可以从操作系统模板文件导入一个镜像,比如使用OpenVZ提供的模板创建,OPENVZ下载模板在:http://openvz.org/Download/template/precreated。
我尝试使用了Ubuntu14.04的模板:
|
1
|
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.04ab80404d13d580965b9919b640169ccb585ea7884e6aa9de1ec043075c65fe35
然后就可以查看本地的镜像:
docker imagesREPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZEubuntu 14.04 ab80404d13d5 56 seconds ago 215.4 MBtestimage latest baea98d5a437 29 minutes ago 188.3 MB….
其实可以看出,虽然模板才75M,但创建的镜像并不小。
镜像的存出和载入
可以利用docker save和docker命令来存出和载入镜像。
存出镜像
如果想要把镜像存出到本地文件,可以使用docker save命令,例如,存出本地的刚才创建的testimage:lastest为镜像文件testimage.tar文件:
docker imagesREPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZEtestimage latest baea98d5a437 25 minutes ago 188.3 MBubuntu 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 baea98d5a437Untagged: testimage:latestDeleted: baea98d5a4371a6abf9efc8c53a54a6fc5befd167bf91ce9fd4a28a6d1b7dc5bubuntu@VM–223–238–ubuntu:/data$ docker imagesREPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZEubuntu 14.04 ab80404d13d5 5 minutes ago 215.4 MB
然后载入镜像:
docker load —input testimage.tardocker imagesREPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZEubuntu 14.04 ab80404d13d5 6 minutes ago 215.4 MBtestimage latest baea98d5a437 35 minutes ago 188.3 MB
第一行就是载入镜像,还可以简化写成:
docker load < testimage.tar
载入操作将会导入镜像以及相关的元数据信息(包括标签等)。
镜像的上传
最后说点镜像的上传,镜像的管理方式非常像git,可以使用docker push命令上传自己本地镜像到仓库,默认上传到DockerHub官方仓库(需要登陆),命令格式:
docker push NAME[:TAG]
在上传之前一般会先为自己的镜像添加带自己名字(作者信息)的标签:
docker tag testimage:lastest zmc/testimage:lastestdocker pushzmc/testimage:lastest
有利于上传之后的区分。
我觉得无论是运维团队还是开发团队还是一个实验室,都有必要有一个自己的Docker仓库,可以存放符合自己需求的环境或系统镜像,可以实现快速部署。
转自:梦续代码
Docker镜像的创建、存出、载入的更多相关文章
- Docker存出载入镜像
镜像的存出和载入 如果你的生产环境不能连通互联网,而你又希望从互联网上获取镜像.你就需要借助 docker save命令,可以将镜像导出为 tar 文件.使用 docker load 命令,可以将ta ...
- docker镜像的创建
获得更多资料欢迎进入我的网站或者 csdn或者博客园 昨天讲解了docker的安装与基本使用,今天给大家讲解下docker镜像的创建的方法,以及push到Docker Hub docker安装请点击右 ...
- docker镜像的创建commit及dockerfile
在docker 1.3版本以前使用attach进入容器会经常出现卡死的情况,之后官方退出了exec命令,从宿主机进入,但是从其他远程主机进入使用ssh服务来维护是用户熟悉的方法.所以这里来创建一个带有 ...
- docker镜像的创建方法docker file方式
什么是docker file文件? 简单来说,docker file文件就是一个命令文本集合,容来记录创建docker镜像的步骤 快速入门: 1.新建一个docker file文件dockerfile ...
- docker镜像的创建方法docker commit方式
Docker 提供了两种构建镜像的方法: docker commit 命令(交互式修改创建) Dockerfile 构建文件 (文本命令定义) Docker commit方法: 1.运行一个现有容器 ...
- 创建超小的Golang docker 镜像
原文: http://colobu.com/2015/10/12/create-minimal-golang-docker-images/ 本文对于创建超小的镜像非常有用 Docker是PaaS供应商 ...
- Docker系列之Docker镜像(读书笔记)
一.基本概念 Docker包括三个基本概念镜像.容器.仓库. Docker镜像:就是一个只读的模板.例如:一个镜像可以包含一个完整的ubuntu操作系统环境,里面仅安装了Apache或其他应用程序.用 ...
- Docker实战(一)之使用Docker镜像
镜像是Docker三大核心概念中最为重要的,自Docker诞生之日起“镜像”就是相关社区最为热门的关键字. Docker运行容器前需要本地存在对应的镜像,如果镜像没有保存至本地,Docker会尝试先从 ...
- (六)使用Docker镜像(下)
1. 创建镜像 创建镜像的方法有三种: 基于已有镜像的容器创建 基于本地模板导入 基于Dockerfile创建 1.1 基于已有镜像的容器创建 该方法主要是使用docker commit命令,其格式 ...
随机推荐
- hdu How to Type
感觉这道dp题还是有点技巧的,此题设置了两个数组:open[]和close[],分别用来记录capslock一直开启状态和一直关闭状态下的最少输入次数.此时只要判断字母的大小写,选用最优子结构即可.状 ...
- IIS7 Appcmd.exe 使用
如果您运行的是 64 位 Windows,请从 %windir%\system32\inetsrv 目录而不是 %windir%\syswow64\inetsrv 目录中使用 Appcmd.exe. ...
- java的包装类(转)
Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的,这在实际使用时存在很多的不便,为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数 ...
- fail2ban 保护
Fail2ban是一款非常使用的软件,它能够监控系统日志,能够有效的防止ssh被暴力破解,下面小编将针对Fail2ban在Linux下的安装和使用给大家做个介绍,一起来了解下吧. https://gi ...
- discuz二次开发之后导航无法高亮 $mnid == $nav[navid]解决办法(转)
在 <body>前面加入如下代码:body原来就有一个class,直接在增加一个进行测试 <!--{eval $mnid = getcurrentnav()}--> <! ...
- JitterBuffer
jitter buffer QoS的解决方案 注:此博客中的某些说法是有问题的,如65536的整数倍,则其buffer会太大=>64k*1.5k=98M,另在超时处理中也有问题 VOIP中何为动 ...
- 《Java核心技术卷一》笔记 多线程
有时,我们需要在一个程序中同时并行的处理多个任务,如播放器一边要播放音乐同时还要不断更新画面显示,或者是一边执行耗时任务,UI还能一边继续响应各种事件.还有的时候,一个任务需要很长时间才能完成,如果分 ...
- Redis 笔记与总结1 安装部署
NoSQL 使用场景: 1.对数据高并发读写 2.对海量数据的高效率存储和访问 3.对数据的高可扩展性和高可用性 Redis 通常被称为数据结构服务器,因为键可以包含字符串(strings).哈希(h ...
- flink - 反压
http://wuchong.me/blog/2016/04/26/flink-internals-how-to-handle-backpressure/ https://ci.apache.org/ ...
- Lazarus中Base64的操作
在字符串处理中,我们经常需要对文件编码然后再进行传输,通常会使用base64编码,在FreePascal中默认集成了这个单元,我们来介绍如何使用: 首先需要在引用单元的时候使用: use base64 ...