docker学习四 镜像1----镜像的创建
博客专区 > dkpenl 的博客 > 博客详情
docker学习四 镜像1----镜像的创建
dkpenl 发表于3个月前
docker学习四 镜像1----镜像的创建
  • 发表于 3个月前
  • 阅读 3
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

       在上一节,我们从docker的官方仓库(这样的仓库有很多,比如国内的网易、阿里)获取了一个镜像,这一节我们主要聊聊镜的创建、导入导出、移除镜像。因为这个系列的文章主要偏重于docker入门及基本使用,所以,docker镜像的原理及工作机制就不在这里序述了(关键是我也不懂),有兴趣的朋友可以在度娘里找一找docker镜像原理这类的文章,这里看到过一篇文章给大家推荐一下:http://www.csdn.net/article/2015-08-21/2825511

<a href='http://www.csdn.net/article/2015-08-21/2825511'>深入分析Docker镜像原理</a>

一、创建docker镜像

          docker镜像的制作可以通过三种方法:修改已有镜像、使用Dockerfile文件、本地文件系统导入。

          1、通过修改已有镜像创建新镜像

          修改已有镜像这是最简单的方式,在别人已制作好的镜像的基础上,定制自己的需求然后形成新的镜像。比如:我们可以从仓库下载一个只含有最基础centos系统的镜像,然后安装jdk、mysql、tomcat这样就让自己拥有了一个具有java web运行环境的新镜像。为了简单点,我们这里只安装vim工具(linux下的一个文本编辑工具)为例。

          首先,我们先使用docker images命令查看一下我们已拥有的镜像:

           

        这里我们有两个镜像,一个是hub.c.163.com/library/tomcat镜像,别一个是docker.io/ubuntu镜像,我们基于ubuntu镜像启动一个容器:

          

         我们通过docker run -it docker.io/ubuntu:12.04 /bin/bash 命令以终端交互式的方式启动了一个容器(请记住这个容器的ID:823333f46325一会儿会用到),下面我们可以直接输入命令,在这个容器中安装vim工具:

         

         我们在输入apt-get install vim命令时有可能无法安装,我们需要先更新一下使用:apt-get update命令升一下级。然后,我们再安装vim工具:

        

       点击“y”,完成vim的安装。

        现在,我们使用exit来退出,此时我们的容器已经被我们改变了(安装了vim),接着我们使用docker commit 命令来提交更新后的副本。(可以想象是往版本控制系统里提交变更:首先创建一个容器,并在容器里做修改,就行修改代码一样,最后在将修改提交为一个新镜像。)输入以下命令:

        docker commit -m='a new image'-a='user1' 823333f46325 docker.io/ubuntu:12.05

        其中,  -m 来指定提交的说明信息,跟我们使用的版本控制工具一样;    -a   可以指定更新的用户信息;之后是用来创建镜像的容器的ID,最后指定目标镜像的仓库名和 tag 信息。创建成功后会返回这个镜像的 ID信息,之后,我们再通过docker images命令可以看到,我们本机会多处一个12.05版本的镜像:

      总结一下,通过docer run启动一个容器,然后在这个容器中完全成自己的修改后(如安装了一个软件 ),我们再通过docker commit命令提交一个新的镜像,这样就创建了一个新镜,非常简单。

      2、利用Dockerfile来创建镜像

       使用 docker  commit来扩展一个镜像比较简单,但是如果想定制化程序更高,更方便灵活的定制自己的镜像,那么使用dockerfile来创建镜像是一个不错的办法。

       dockfile是一种被Docker程序解释的脚本,Dockerfile由一条一条的指令组成,每条指令对应Linux下面的一条命令。docker程序将这些Dockerfile指令翻译真正的linux命令。Dockerfile有自己书写格式和支持的命令,Docker程序解决这些命令间的依赖关系,类似于Makefile。Docker程序将读取Dockerfile,根据指令生成定制的image。相比image这种黑盒子,Dockerfile这种显而易见的脚本更容易被使用者接受,它明确的表明image是怎么产生的。有了Dockerfile,当我们需要定制自己额外的需求时,只需在Dockerfile上添加或者修改指令,重新生成image即可,省去了敲命令的麻烦。

       首先,新建一个目录和dockerfile:

       $    mkdir    dockertest
       $    cd    dockertest
       $    touch    Dockerfile

        $    vi    Dockerfile

         编辑Dockerfile文件,内容如下:

         #    This    is    a    comment
          FROM docker.io/ubuntu:12.04        
          MAINTAINER    test user   
          RUN    apt-get    -qq    update
          RUN    apt-get    -qqy    install    vim

          上面的命令解释如下:

           FROM  指令告诉    Docker    使用哪个镜像作为基础 

           MAINTAINER    用来指定镜像创建者信息

           RUN     可以运行任何被基础image支持的命令。如基础image选择了ubuntu,那么软件管理部分只能使用ubuntu的命令。 

           编写完成Dockerfile后可以使用docker    build来生成镜像。

           

            其中  -t 标记来添加    tag,指定新的镜像的用户信息。    “.”    是    Dockerfile    所在的路径(当前目录)替换为一个具体的Dockerfile 的路径。

           可以看到    build    进程在执行操作。它要做的第一件事情就是上传这个    Dockerfile    内容,因为所有的操作都要依据    Dockerfile    来进行。    然后,Dockfile    中的指令被一条一条的执行。每一步都创建了一个新的容器,在容器中执行指令并提交修改(就跟之前介绍过的        docker    commit        一样)。当所有的指令都执行完毕之后,返回了最终的镜像    id。所有的中间步骤所产生的容器都被删除和清理了。

         此外,还可以利用   ADD  命令复制本地文件到镜像;用   EXPOSE 命令来向外部开放端口;用   CMD  命令来描述容器启动后运行的程序等,更多的内容请大家自行查找这里不在一一介绍了。

      3、从本地文件系统导入

          可以使用 docker import 从容器快照文件中再导入为镜像,例如:       

          udo    cat    ubuntu-14.04-x86_64-minimal.tar.gz        |docker    import    -    ubuntu:14.04

          此外,也可以通过指定 URL 或者某个目录来导入,例如:

           $sudo docker import http://example.com/exampleimage.tgz example/imagerepo

           

         总结一下,docker镜像的创建都比较简单,可以直接修改原有镜像形成新镜像(docker commit),也可以使用dockerfile文件(docker build)构建,最后还能从本地或远程导入(docker import)。

         下一节,我们讲一下镜像的上传、载入载出以及移除镜像。

 

   

共有 人打赏支持
粉丝 2
博文 8
码字总数 7156
×
dkpenl
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: