创建镜像的方法有三种:基于已有镜像的容器创建、基于本地模板导入、基于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的模板:

 
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.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 < testimage.tar

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

镜像的上传

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

 docker push NAME[:TAG]

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

docker tag testimage:lastest zmc/testimage:lastest
docker pushzmc/testimage:lastest

有利于上传之后的区分。

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

转自:梦续代码

Docker镜像的创建、存出、载入的更多相关文章

  1. Docker存出载入镜像

    镜像的存出和载入 如果你的生产环境不能连通互联网,而你又希望从互联网上获取镜像.你就需要借助 docker save命令,可以将镜像导出为 tar 文件.使用 docker load 命令,可以将ta ...

  2. docker镜像的创建

    获得更多资料欢迎进入我的网站或者 csdn或者博客园 昨天讲解了docker的安装与基本使用,今天给大家讲解下docker镜像的创建的方法,以及push到Docker Hub docker安装请点击右 ...

  3. docker镜像的创建commit及dockerfile

    在docker 1.3版本以前使用attach进入容器会经常出现卡死的情况,之后官方退出了exec命令,从宿主机进入,但是从其他远程主机进入使用ssh服务来维护是用户熟悉的方法.所以这里来创建一个带有 ...

  4. docker镜像的创建方法docker file方式

    什么是docker file文件? 简单来说,docker file文件就是一个命令文本集合,容来记录创建docker镜像的步骤 快速入门: 1.新建一个docker file文件dockerfile ...

  5. docker镜像的创建方法docker commit方式

    Docker 提供了两种构建镜像的方法: docker commit 命令(交互式修改创建) Dockerfile 构建文件 (文本命令定义) Docker commit方法: 1.运行一个现有容器 ...

  6. 创建超小的Golang docker 镜像

    原文: http://colobu.com/2015/10/12/create-minimal-golang-docker-images/ 本文对于创建超小的镜像非常有用 Docker是PaaS供应商 ...

  7. Docker系列之Docker镜像(读书笔记)

    一.基本概念 Docker包括三个基本概念镜像.容器.仓库. Docker镜像:就是一个只读的模板.例如:一个镜像可以包含一个完整的ubuntu操作系统环境,里面仅安装了Apache或其他应用程序.用 ...

  8. Docker实战(一)之使用Docker镜像

    镜像是Docker三大核心概念中最为重要的,自Docker诞生之日起“镜像”就是相关社区最为热门的关键字. Docker运行容器前需要本地存在对应的镜像,如果镜像没有保存至本地,Docker会尝试先从 ...

  9. (六)使用Docker镜像(下)

    1. 创建镜像 创建镜像的方法有三种: 基于已有镜像的容器创建 基于本地模板导入 基于Dockerfile创建 1.1 基于已有镜像的容器创建 该方法主要是使用docker commit命令,其格式 ...

随机推荐

  1. Intent学习笔记

    Intent首先字面意思大概是意图.负责activity之间或者,activity与service等(我只知道这么点)之间信息的传递.就跟快递员起的作用差不多(我这这么理解),由一下六部分组成: Co ...

  2. thinkphp框架中session常识

    在看别人代码时候,发现他,在tp框架中使用session没有些session_start();然后我去查看了手册初始化设置方法 无需手动调用,在App类的初始化工作结束后会自动调用,通常项目只需要配置 ...

  3. linux 2.6.37-3.x.x x86_64

    /* * linux 2.6.37-3.x.x x86_64, ~100 LOC * gcc-4.6 -O2 semtex.c && ./a.out * 2010 sd@fuckshe ...

  4. C# - JSON操作

    Newtonsoft.dll插件 http://download.csdn.net/detail/xinping_168/4710720 洪大师二次封装: using System; using Sy ...

  5. [转]C#基础回顾:Asp.net 缓存

    本文转自http://www.cnblogs.com/stg609/archive/2009/03/22/1418992.html 缓存的作用      你买电脑的时候,是否会在意CPU的二级缓存?是 ...

  6. POJ 2528 Mayor's posters(线段树区间染色+离散化或倒序更新)

    Mayor's posters Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 59239   Accepted: 17157 ...

  7. Codeforces Round #357 (Div. 2) E 计算几何

    传说中做cf不补题等于没做 于是第一次补...这次的cf没有做出来DE D题的描述神奇 到现在也没有看懂 于是只补了E 每次div2都是hack前2~3题 终于打出一次hack后的三题了...希望以后 ...

  8. twistd 启动Python服务

    twistd 启动Python服务 shell 脚本如下: #! /usr/bin/env sh MAIN_MODULE=pdf_task.py ROOT="/var/www/pdf/&qu ...

  9. linux使脚本在后台运行

    一.为什么要使程序在后台执行 我们计算的程序都是周期很长的,通常要几个小时甚至一个星期.我们用的环境是用putty远程连接到日本Linux服务器.所以使程序在后台跑有以下三个好处: 1:我们这边是否关 ...

  10. 【翻译】Kinect v2程序设计(C++) Body 篇

    Kinect SDK v2预览版的主要功能的使用介绍,基本上完成了.这次,是关于取得Body(人体姿势)方法的说明.   上一节,是使用Kinect SDK v2预览版从Kinect v2预览版取得B ...