Docker之定制镜像 04

所谓定制镜像就是以一个镜像为基础,在其上进行定制;定制镜像常用方法:

一、利用docker commit命令定制镜像

镜像是容器的基础,镜像是多层存储,每一层是在前一层的基础上进行的修改而来;二容器同样也是多层存储,是在以镜像为基础,在其基础上加一层作为容器运行时的存储层;利用docker commit命令可以将该容器的基础镜像加上运行容器的存储层打包构建成新的镜像。

步骤:

  • 使用docker run命令运行现有的一个docker镜像,启动一个容器
  • 使用docker exec -it  /bin/bash命令进入一个运行中的容器
  • 进入到运行中的容器之后,根据自己想要定制的内容,修改容器内的文件内容,也就是修改容器的存储层
  • 修改完容器文件之后,使用exit命令,退出容器(注意不是停止运行容器)
  • 可以使用docker diff 命令查看容器文件的具体变动
  • 确认以上修改变动就是我们需要定制的内容之后,使用docker commit [optional]   [[:]] 命令将正在运行的容器保存为镜像;例如:
    $ docker commit \
    --author "huahua.Dr" \
    --message "update default index.html" \
    webserver \
    nginx:v2
  • 使用docker images命令即可查看生成的新镜像了
  • 可以使用docker history [[:]]查看具体镜像的历史变化记录
  • 最后就可以使用新保存的镜像运行为一个容器了。

优点:

  • Docker commit命令利用了镜像分层存储的原理:在原来镜像的基础上,再叠加一层容器的存储层,构成新的镜像,这样很方便生成定制镜像
  • 使用场景:用于紧急情况下保留现场

缺点:

  • 使用docker commit命令制作镜像后,除了要修改的文件之外,还有大量的无关内容被添加进来:原来的镜像每一层都不会改变,变化的仅仅是当前层,每次修改都是改变当前层,制作修改次数一多,会造成镜像极为臃肿,体积会越来越大,无法重复利用。
  • 使用docker commit制作的镜像为黑箱镜像,因为除了制作镜像的人以外不知道执行过什么命令,时间一长,很难进行维护,镜像构建透明性很差

二、使用dockerfile文件定制镜像

上面利用docker commit定制镜像的时候,知道镜像的定制实际上就是定制每一层所添加的配置、文件,镜像是分层存储的;为了解决使用docker commit定制镜像所带来的镜像体积大、镜像无法重复利用、镜像构建透明性差等问题,推荐使用Dockerfile脚本文件进行镜像构建,Dockerfile是一个文本文件,其中包含的每一条指令都表示构建镜像的每一层,即是每一条指令就类似我们调用了docker commit命令构建一层镜像,因此需要合理编写Dockerfile文件中的每一条指令。因为docker是clent/server模式,docker制作镜像都是客户端docker通过RESTAPI通信服务端dockerd,在dockerd完成镜像构建。

步骤:

  • 注意后面的.表示上下文路径context为当前路径,并不是Dockerfile文件路径(Dockerfile文件,默认为当前路径的一个名叫Dockerfile的文件);
  • 如果需要制定Dockerfile文件,使用docker build -f 制定Dockerfile文件路径;
  • 如果指令中有需要上传一些文件到dockerd,则需要将这些文件放到这个上下文路径上(因为dockerd才是真正制作镜像的地方,需要将所有需要的东西上传到dockerd后才开始制作镜像)
  • Docker build还支持git仓库、tar压缩包等方式构建
  • 在一个空白目录中,新建一个文本文件,命名为Dockerfile(Dockerfile为自定义名称,文件名可自定义,在docker build的时候指定即可)
  • 按照编写Dockerfile文件的规范,编写好需要定制的指令(注意:每一条指令都会构建一层镜像,因此需要合理使用指令,例如操作同一个资源的多步骤可以使用连接符&&将这些操作步骤连在一起,编写一条指令即可)
  • 编写完需要定制的指令之后,如果涉及到文件的下载、copy等,一定要记得在Dockerfile文件每一层构建的最后清理掉无关的文件,如脚本中下载文件,在当前层镜像制作完成后需要将下载的文件删除,避免臃肿。
  • 在Dockerfile文件所在目录执行命令:docker build  [optional] ; 例如:docker build -t nginx:v1 . 
  • 构建命令执行完,即可docker images查看构建的新镜像

优点:

  • 镜像构建透明化
  • 镜像可重复利用
  • Dockerfile文件编写好可避免镜像臃肿

缺点:

  • 编写Dockerfile文件指令有点复杂,需要对Dockerfile指令熟悉理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值