构建镜像 - 天天5分钟玩转容器技术(12)

对于 Docker 用户来讲,最好的状况是不须要本身建立镜像。几乎全部经常使用的数据库、中间件、应用软件等都有现成的 Docker 官方镜像或其余人和组织建立的镜像,咱们只须要稍做配置就能够直接使用。docker

使用现成镜像的好处除了省去本身作镜像的工做量外,更重要的是能够利用前人的经验。特别是使用那些官方镜像,由于 Docker 的工程师知道如何更好的在容器中运行软件。数据库

固然,某些状况下咱们也不得不本身构建镜像,好比:ubuntu

  1. 找不到现成的镜像,好比本身开发的应用程序。安全

  2. 须要在镜像中加入特定的功能,好比官方镜像几乎都不提供 ssh。ssh

因此本节咱们将介绍构建镜像的方法。同时分析构建的过程也可以加深咱们对前面镜像分层结构的理解。学习

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

  1. docker commit 命令中间件

  2. Dockerfile 构建文件开发

docker commitit

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

  1. 运行容器

  2. 修改容器

  3. 将容器保存为新的镜像

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

  1. 第一步, 运行容器 

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

  2. 安装 vi

    确认 vi 没有安装。

    安装 vi。

  3. 保存为新镜像
    在新窗口中查看当前运行的容器。
    silly_goldberg 是 Docker 为咱们的容器随机分配的名字。

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

    查看新镜像的属性。
    从 size 上看到镜像由于安装了软件而变大了。

    重新镜像启动容器,验证 vi 已经能够使用。

以上演示了如何用 docker commit 建立新镜像。然而,Docker 并不建议用户经过这种方式构建镜像。缘由以下:

  1. 这是一种手工建立镜像的方式,容易出错,效率低且可重复性弱。好比要在 debian base 镜像中也加入 vi,还得重复前面的全部步骤。

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

既然 docker commit 不是推荐的方法,咱们干吗还要花时间学习呢?

缘由是:即使是用 Dockerfile(推荐方法)构建镜像,底层也 docker commit 一层一层构建新镜像的。学习 docker commit 可以帮助咱们更加深刻地理解构建过程和镜像的分层结构。

下一节咱们学习如何经过 Dockerfile 构建镜像。

二维码+指纹.png

相关文章
相关标签/搜索