构建镜像

    直接进入主题,docker的构建有两种方式,一种是通过commit命令的方式,一种是通过 Dockerfile 构建文件的方式构建,分析一下这两种方式用法,以拿构建centos为例吧,打算将本地仓库的centos安装一些常用工具,然后构建成新的镜像文件,并保存到本地仓库中,下面直接上干货.

前期准备

    执行一下 docker images  看看centos 是否已经拉取到本地仓库了,如果没有,那么需要从 docker hub(https://hub.docker.com/) 官方网站下载一个版本,

    玩转docker-构建镜像

    拉取centos镜像文件 

玩转docker-构建镜像

执行 docker pull centos 命令

玩转docker-构建镜像

执行完上述命令,发现已经将centos拉取到本地仓库了,接下来就是通过改造centos,重新构建成新的镜像文件

命令构建

        这种方式构建装有常用工具的新的centos镜像需要完成以下三个步骤:

(1)运行容器。

(2)修改容器,需要在运行的容器中安装常用工具命令

(3)将修改后的容器保存为新的镜像

运行容器

    首先进入到centos容器,先执行 docker run -it  --name centos_old -d docker.io/centos bash 玩转docker-构建镜像

进入到该容器的命令其实有四种,这里只介绍两种:

    执行 docker  ps 拿到正在运行的容器之后,执行如下:

    1) docker attach containerid(容器id) 进入到容器,上述是通过该命令执行,这种方式比较古老

    2) docker exec -it cenos_old(你起的别名) bash 进入到容器,该命令是新版的docker才具有的,,

进入容器之后,发现命令的最左侧有一串大概是散列值的东西,那就是容器的id,,

注意:    

  •     -it 参数表示交互执行
  •     bash参数表示以脚本方式执行 ,常用命令大家自行脑补.

  进入到该容器之后,发现基本的 net-tools vim 等命令无法使用,那么,我们可以根据情况安装几个常用工具,然后重新构建

玩转docker-构建镜像

修改容器

    比如我想安装一个 net-tools的命令,执行 yum install -y net-tools 那么安装完毕之后,ifconfig工具就可以用了玩转docker-构建镜像

    玩转docker-构建镜像

保存镜像

    重新复制一个ssh窗口界面,找到目前正在运行的centos_old 容器

玩转docker-构建镜像

    执行commit命令将容器保存为新的镜像,1362da3ae2a7 是运行的容器的ID,centos_new 是新镜像的名字,1.0.0是版本号

玩转docker-构建镜像

    如上图所示,centos_new 是新构建的镜像文件,1.0.0是构建的版本号,上述sha256是通过sha算法生成的一串散列值,这样commit方式构建镜像完毕.

文件构建

   上述,,除了通过commit方式构建镜像文件以外,我们还可以通过Dockerfile的方式来构建镜像.因为通过Dockerfile的方式构建镜像,需要有上下文的支持,因此,需要在/目录下,新建一个文件夹,比如叫myDockerfle文件

玩转docker-构建镜像

 

然后在该文件夹下再创建一个叫 Dockerfile的文件,那么该文件就是镜像文件的构建脚本.

玩转docker-构建镜像

在Dockerfile文件中写一些需要构建的目标脚本,比如本例中,我打算在上述通过commit生成的centos_new 版本的基础上,接着进行构建,并生成新的版本centos镜像文件,输入如下一些脚本信息:

          玩转docker-构建镜像

    上述构建脚本的含义是:我打算在centos_new基础之上,构建一个安装了httpd服务的新的centos镜像文件,并且需要让该镜像文件开机的时候httpd服务生效,并暴露80端口,并且作者是yebn(嘻嘻)

玩转docker-构建镜像

说明:在上述执行过程中,大家会看到比较惊喜的一幕,会发现每步执行的时候,都会有step提示

  •         step1) 执行from操作的时候,会从id为ad9ad47b8ddb的容器中获取源,如果没有则将会从官网默认拉取
  •         step2) 执行第一个命令maintainer yebn ,表示构建作者是yebn,并且临时生成一个id为2daeeb264489的容器
  •         step3)执行第三个命令的时候,将会打包生成一个新的镜像a7dc5cf6d9a5,并移除step2的临时镜像2daeeb264489,这样依次循环,直到所有的镜像全部打包完毕

执行效果如上图所示,执行 docker images 发现已经生成了最新的centos镜像文件,如下图所示,centos_new 有两个版本

玩转docker-构建镜像

执行 docker history 将会呈现该版本的每次构建历史,如下图所示:
玩转docker-构建镜像

    欢迎各位小伙伴提出建议或者建议!

 

转载于:https://my.oschina.net/yaukie/blog/2986857

相关文章: