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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 对于 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

目录
相关文章
|
5月前
|
存储 运维 Kubernetes
容器镜像的构建与管理实践
在云原生时代,容器技术已成为现代软件开发和运维不可或缺的一部分。本文将深入探讨容器镜像的构建流程、管理策略以及安全性考量,旨在为读者提供一套系统化的容器镜像管理方案。我们将从实际案例出发,分析容器镜像构建的最佳实践,同时指出常见的陷阱与误区。此外,文章还将介绍如何有效利用现有的工具和平台来提升容器镜像的安全性和管理效率,确保在快速迭代的开发周期中,能够维护镜像的一致性和可靠性。
98 0
|
应用服务中间件 Shell Linux
容器镜像构建及推送阿里云容器镜像服务测试
容器镜像构建及推送阿里云容器镜像服务测试
容器镜像构建及推送阿里云容器镜像服务测试
|
运维 达摩院 Kubernetes
今年大促季,阿里云容器服务有哪些技术和应用新突破?
本文会介绍 ACK 和 ACR 的新产品能力和实践助力双 11 场景下的客户和业务。
189 0
今年大促季,阿里云容器服务有哪些技术和应用新突破?
|
存储 缓存 Dragonfly
Nydus | 容器镜像基础
Nydus | 容器镜像基础
Nydus | 容器镜像基础
|
前端开发 应用服务中间件 API
Taiga 容器部署
taiga 组件介绍 Taiga-front 由angularjs和coffeescript搭建的一个前端,可以运行在nginx中的静态网站。taiga/taiga-front taiga/taiga-front-dist 是taiga-front编译完版本,如果只是部署,可以使用这个版本。
4387 0
|
存储 运维 Cloud Native
容器技术基础介绍
容器技术基础介绍
329 0
容器技术基础介绍
|
存储 机器学习/深度学习 运维
容器镜像服务的应用场景
容器镜像服务的应用场景
336 0
|
存储 安全 Cloud Native
容器镜像服务的几个特性
容器镜像服务的几个特性
268 0
|
存储 Dragonfly 供应链
容器技术之容器镜像篇
# 前言 常言道,startup有startup的好,大厂有大厂的好,那么大厂究竟好在哪呢?拿硅谷老牌大厂们FLG来说,如果要问最令人怀念的是什么?Free food和基础设施(Infrastructure)一定是会上榜的,两者均极大提升了广大应用开发者的幸福指数。那么能不能“让天下没有难做的应用”呢?请大家把目光投向正在兴起的云原生生态。 在云原生生态中,容器服务包括了镜像和容器引擎
1880 0
容器技术之容器镜像篇
|
Ubuntu Shell Docker
Docker基础之九: 管理容器的数据
管理容器的数据 到目前为止,我们已经介绍了Docker的一些基本概念,如:容器的操作,镜像的操作和网络的操作等。在本节,我们将介绍如何管理容器内部的数据,以及容器间的数据交互。我们将介绍如何创建: 数据卷 数据型容器 1 数据卷 数据卷是一个经过特殊设计的文件夹,提供给容器使用。数据卷并不
5354 2