zoukankan      html  css  js  c++  java
  • 容器技术(三)构建镜像【7】

    (四)构建镜像

    ​ 对于 Docker 用户来说,最好的情况是不需要自己创建镜像。几乎所有常用的数据库、中间件、应用软件等都有现成的 Docker 官方镜像或其他人和组织创建的镜像,我们只需要稍作配置就可以直接使用。

    ​ 使用现成镜像的好处除了省去自己做镜像的工作量外,更重要的是可以利用前人的经验。特别是使用那些官方镜像,因为 Docker 的工程师知道如何更好的在容器中运行软件。

    当然,某些情况下我们也不得不自己构建镜像,比如:

    • 找不到现成的镜像,比如自己开发的应用程序。
    • 需要在镜像中加入特定的功能,比如官方镜像几乎都不提供 ssh。

    所以本节我们将介绍构建镜像的方法。同时分析构建的过程也能够加深我们对前面镜像分层结构的理解。

    Docker 提供了两种构建镜像的方法:

    • docker commit 命令
    • Dockerfile 构建文件

    (1)docker commit

    docker commit 命令是创建新镜像最直观的方法,其过程包含三个步骤:

    • 运行容器
    • 修改容器
    • 将容器保存为新的镜像

    举个例子:在 ubuntu base 镜像中安装 vi 并保存为新镜像。

    ①第一步, 运行容器

    root@cuiyongchao:~# docker run -it ubuntu
    root@43f6f25cace2:/# vim 
    bash: vim: command not found
    
    

    -it 参数的作用是以交互模式进入容器,并打开终端。43f6f25cace2 是容器的内部 ID。

    ②安装vim

    root@43f6f25cace2:/# apt-get update
    root@43f6f25cace2:/# apt-get install vim -y
    Reading package lists... Done
    Building dependency tree       
    Reading state information... Done
    The following additional packages will be installed:
    
    

    ③保存为新的镜像

    在新的窗口查看当前运行的容器。

    root@cuiyongchao:~# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    43f6f25cace2        ubuntu              "/bin/bash"         10 minutes ago      Up 10 minutes                           gifted_bassi
    root@cuiyongchao:~#
    
    

    gifted_bassi 是 Docker 为我们的容器随机分配的名字。

    执行 docker commit 命令将容器保存为镜像。新镜像命名为 ubuntu-with-vi

    root@cuiyongchao:~# docker commit gifted_bassi ubuntu-with-vi
    sha256:218e302a1e28aef0d66fc17f28114783ac3acc118f233e39708335cec5e42c6c
    root@cuiyongchao:~# 
    
    

    查看新镜像的属性:

    root@cuiyongchao:~# docker images 
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    ubuntu-with-vi      latest              218e302a1e28        26 seconds ago      167MB
    ubuntu              latest              d70eaf7277ea        3 days ago          72.9MB
    
    

    从 size 上看到镜像因为安装了软件而变大了。从新镜像启动容器,验证 vi 已经可以使用。

    root@cuiyongchao:~# docker run -it ubuntu-with-vi
    root@82c636a6c4ff:/# which vim
    /usr/bin/vim
    root@82c636a6c4ff:/#
    
    

    以上演示了如何用 docker commit 创建新镜像。然而,Docker并不建议用户通过这种方式构建镜像。原因如下:

    • 这是一种手工创建镜像的方式,容易出错,效率低且可重复性弱。比如要在 debian base 镜像中也加入 vi,还得重复前面的所有步骤。

    • 更重要的:使用者并不知道镜像是如何创建出来的,里面是否有恶意程序。也就是说无法对镜像进行审计,存在安全隐患。

      既然 docker commit 不是推荐的方法,我们干嘛还要花时间学习呢?原因是:即便是用 Dockerfile(推荐方法)构建镜像,底层也 docker commit 一层一层构建新镜像的。学习 docker commit 能够帮助我们更加深入地理解构建过程和镜像的分层结构。

  • 相关阅读:
    机器学习 之 SVM VC维度、样本数目与经验风险最小化的关系
    password学4——Java 加密解密之消息摘要算法(MD5 SHA MAC)
    JavaScript实现类的private、protected、public、static以及继承
    android:3D垂直翻转动画-FlipAnimation
    生产者消费者问题
    01串
    html5+css3 权威指南阅读笔记(三)---表单及其它新增和改良元素
    Android xUtils3源代码解析之网络模块
    mysql5.7切换导致gtid不一致
    mysql简单优化的一些总结
  • 原文地址:https://www.cnblogs.com/cuiyongchao007/p/13903751.html
Copyright © 2011-2022 走看看