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

简介: 对于 Docker 用户来说,最好的情况是不需要自己创建镜像。几乎所有常用的数据库、中间件、应用软件等都有现成的 Docker 官方镜像或其他人和组织创建的镜像,我们只需要稍作配置就可以直接使用。使用现成镜像的好处除了省去自己做镜像的工作量外,更重要的是可以利用前人的经验。

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

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

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

  1. 找不到现成的镜像,比如自己开发的应用程序。

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

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

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

  1. docker commit 命令

  2. Dockerfile 构建文件

docker commit

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

目录
相关文章
|
Ubuntu 开发工具 Docker
Dockerfile 构建镜像 - 每天5分钟玩转容器技术(13)
Dockerfile 是一个文本文件,记录了镜像构建的所有步骤。 第一个 Dockerfile 用 Dockerfile 创建上节的 ubuntu-with-vi,其内容则为: 下面我们运行 docker build 命令构建镜像并详细分析每个细节。
2213 0
|
Docker 容器 Shell
镜像的分层结构 - 每天5分钟玩转容器技术(11)
Docker 支持通过扩展现有镜像,创建新的镜像。 实际上,Docker Hub 中 99% 的镜像都是通过在 base 镜像中安装和配置需要的软件构建出来的。比如我们现在构建一个新的镜像,Dockerfile 如下: ① 新镜像不再是从 scratch 开始,而是直接在 Debian base 镜像上构建。
1588 0
|
容器 Docker
base 镜像 - 每天5分钟玩转容器技术(10)
上一节我们介绍了最小的 Docker 镜像,本节讨论 base 镜像。 base 镜像有两层含义: 不依赖其他镜像,从 scratch 构建。
1431 0
|
Docker 容器
最小的镜像 - 每天5分钟玩转容器技术(9)
镜像是 Docker 容器的基石,容器是镜像的运行实例,有了镜像才能启动容器。 本章内容安排如下: 首先通过研究几个典型的镜像,分析镜像的内部结构。 然后学习如何构建自己的镜像。 最后介绍怎样管理和分发镜像。
1658 0
|
API Docker 容器
Docker 架构详解 - 每天5分钟玩转容器技术(7)
Docker 的核心组件包括: Docker 客户端 - Client Docker 服务器 - Docker daemon Docker 镜像 - Image Registry Docker 容器 - Container Docker 架构如下图所示: Docker 采用的是 Client/Server 架构。
2128 0
|
运维 虚拟化 Docker
容器 What, Why, How - 每天5分钟玩转容器技术(6)
学习任何东西都可以按照3W的框架进行,容器技术也是一样,先回答 What、Why 和 How 这三个问题。   What - 什么是容器? 容器是一种轻量级、可移植、自包含的软件打包技术,使应用程序可以在几乎任何地方以相同的方式运行。
1946 0
|
容器 Docker
【视频】运行第一个容器 - 每天5分钟玩转容器技术(5)
这两天制作的视频,安装 Docker 并运行第一个容器,希望对大家有帮助。 可在公众号(cloudman6)回复 “容器” 查看。
1445 0
|
Ubuntu Linux Docker
运行第一个容器 - 每天5分钟玩转容器技术(4)
为了让大家对容器有个感性认识,我们将尽快让一个容器运行起来。 首先我们需要搭建实验环境。 环境选择 容器需要管理工具、runtime 和操作系统,我们的选择如下: 管理工具 - Docker Engine因为 Docker 最流行使用最广泛。
1756 0
|
监控 API Docker
容器生态系统 (续) - 每天5分钟玩转容器技术(3)
容器生态系统包含核心技术、平台技术和支持技术三个方面。上一节我们讨论了核心技术,今天讨论另外两个部分。 容器平台技术 容器核心技术使得容器能够在单个 host 上运行。而容器平台技术能够让容器作为集群在分布式环境中运行。
2624 0
|
存储 大数据 虚拟化
写在最前面 - 每天5分钟玩转容器技术(1)
《每天5分钟玩转容器技术》是一个有关容器技术的教程,有下面两个特点: 系统讲解当前最流行的容器技术。从容器的整个生态环境到各个具体的技术,从整体到细节逐一讨论。 重实践并兼顾理论。
4505 0