Dockerfile 是一个文本文件,记录了镜像构建的所有步骤。

第一个 Dockerfile

用 Dockerfile 创建上节的 ubuntu-with-vi,其内容则为:

下面我们运行 docker build 命令构建镜像并详细分析每个细节。

root@ubuntu:~# pwd         ①

/root

root@ubuntu:~# ls          ②

Dockerfile

root@ubuntu:~# docker build -t ubuntu-with-vi-dockerfile .        ③

Sending build context to Docker daemon 32.26 kB           ④

Step 1 : FROM ubuntu           ⑤

---> f753707788c5

Step 2 : RUN apt-get update && apt-get install -y vim           ⑥

---> Running in 9f4d4166f7e3             ⑦

......

Setting up vim (2:7.4.1689-3ubuntu1.1) ...

---> 35ca89798937           ⑧

Removing intermediate container 9f4d4166f7e3          ⑨

Successfully built 35ca89798937           ⑩

root@ubuntu:~#

① 当前目录为 /root。

② Dockerfile 准备就绪。

③ 运行 docker build 命令,-t 将新镜像命名为 ubuntu-with-vi-dockerfile,命令末尾的 . 指明 build context 为当前目录。Docker 默认会从 build context 中查找 Dockerfile 文件,我们也可以通过 -f 参数指定 Dockerfile 的位置。

④ 从这步开始就是镜像真正的构建过程。 首先 Docker 将 build context 中的所有文件发送给 Docker daemon。build context 为镜像构建提供所需要的文件或目录。
Dockerfile 中的 ADD、COPY 等命令可以将 build context 中的文件添加到镜像。此例中,build context 为当前目录 /root,该目录下的所有文件和子目录都会被发送给 Docker daemon。

所以,使用 build context 就得小心了,不要将多余文件放到 build context,特别不要把 //usr 作为 build context,否则构建过程会相当缓慢甚至失败。

⑤ Step 1:执行 FROM,将 ubuntu 作为 base 镜像。
ubuntu 镜像 ID 为 f753707788c5。

⑥ Step 2:执行 RUN,安装 vim,具体步骤为 ⑦、⑧、⑨。

⑦ 启动 ID 为 9f4d4166f7e3 的临时容器,在容器中通过 apt-get 安装 vim。

⑧ 安装成功后,将容器保存为镜像,其 ID 为 35ca89798937。
这一步底层使用的是类似 docker commit 的命令

⑨ 删除临时容器 9f4d4166f7e3。

⑩ 镜像构建成功。 
通过 docker images 查看镜像信息。 
镜像 ID 为 35ca89798937,与构建时的输出一致。

在上面的构建过程中,我们要特别注意指令 RUN 的执行过程 ⑦、⑧、⑨。Docker 会在启动的临时容器中执行操作,并通过 commit 保存为新的镜像。

查看镜像分层结构

ubuntu-with-vi-dockerfile 是通过在 base 镜像的顶部添加一个新的镜像层而得到的。

这个新镜像层的内容由 RUN apt-get update && apt-get install -y vim 生成。这一点我们可以通过 docker history 命令验证。

docker history 会显示镜像的构建历史,也就是 Dockerfile 的执行过程。

ubuntu-with-vi-dockerfile 与 ubuntu 镜像相比,确实只是多了顶部的一层 35ca89798937,由 apt-get 命令创建,大小为 97.07MB。docker history 也向我们展示了镜像的分层结构,每一层由上至下排列。

注:  表示无法获取 IMAGE ID,通常从 Docker Hub 下载的镜像会有这个问题。

下一节我们学习镜像的缓存特性。

本文转自CloudMan6 51CTO博客,原文链接:http://blog.51cto.com/cloudman/1923921

Dockerfile 构建镜像 - 每天5分钟玩转容器技术(13)相关推荐

  1. base 镜像 - 每天5分钟玩转容器技术(10)

    2019独角兽企业重金招聘Python工程师标准>>> 上一节我们介绍了最小的 Docker 镜像,本节讨论 base 镜像. base 镜像有两层含义: 不依赖其他镜像,从 scr ...

  2. 每天5分钟玩转容器技术 ---- 系列文章

    通过 Service 访问 Pod - 每天5分钟玩转 Docker 容器技术(136) 定时执行 Job - 每天5分钟玩转 Docker 容器技术(135) 并行执行 Job - 每天5分钟玩转 ...

  3. 转 容器生态系统 (续) - 每天5分钟玩转容器技术(3)

    每天5分钟玩转容器技术(3) http://www.cnblogs.com/CloudMan6/p/6718464.html 叫板OpenStack:用Docker实现私有云 http://www.c ...

  4. 【视频】运行第一个容器 - 每天5分钟玩转容器技术(5)

    [视频]运行第一个容器 - 每天5分钟玩转容器技术(5) CloudMan 2017-04-21 第5篇 [视频]运行第一个容器 这两天制作的视频,安装 Docker 并运行第一个容器,希望对大家有帮 ...

  5. 镜像的分层结构 - 每天5分钟玩转容器技术(11)

    Docker 支持通过扩展现有镜像,创建新的镜像. 实际上,Docker Hub 中 99% 的镜像都是通过在 base 镜像中安装和配置需要的软件构建出来的.比如我们现在构建一个新的镜像,Docke ...

  6. 容器生态系统 - 每天5分钟玩转容器技术(2)

    对于像容器这类平台级别的技术,通常涉及的知识范围会很广,相关的软件,解决方案也会很多,初学者往往容易迷失. 那怎么办呢? 我们可以从生活经验中寻找答案. 当我们去陌生城市旅游想了解一下这个城市一般我们 ...

  7. Docker 架构详解 - 每天5分钟玩转容器技术(7)

    Docker 的核心组件包括: Docker 客户端 - Client Docker 服务器 - Docker daemon Docker 镜像 - Image Registry Docker 容器 ...

  8. 容器生态系统 (续) - 每天5分钟玩转容器技术(3)

    容器生态系统包含核心技术.平台技术和支持技术三个方面.上一节我们讨论了核心技术,今天讨论另外两个部分. 容器平台技术 容器核心技术使得容器能够在单个 host 上运行.而容器平台技术能够让容器作为集群 ...

  9. Docker 从Dockerfile 构建镜像 :build 命令的用法

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. Dockerfile 创建完成后,可以使用 docker build 命令根据 Dockerfile ...

最新文章

  1. 贪心:jump 游戏(获取最少跳跃的次数以及跳跃路径)
  2. 手动配置lnmp环境
  3. Mocha and Diana (Easy Version) 并查集维护两片森林
  4. html语言词典,编程字典-HTML5语法
  5. 超标量、超级流水线、超长指令字、向量机 SIMD
  6. excel数据命令导入mysql_如何将EXCEL数据导入MYSQL
  7. eclipse安装java web插件
  8. html5 密码框明文,elementUI的密码框的密文和明文
  9. unix-privesc-check提权漏洞快速检测工具
  10. spring 源码分析(1)-xml文件解析
  11. 深度揭秘垃圾回收底层,这次让你彻底弄懂它
  12. Java教程(一)---JDK和Maven安装配置
  13. 华为手机解锁码计算工具_华为手机强制解锁工具
  14. 数字通信技术知识点一
  15. MODIS数据的简介和下载(一)——MODIS数据简介
  16. 固定ip计算机现实无法识别的网络,电脑显示无法识别网络怎么办
  17. java 读取psd,寻找Java库以使用PSD格式
  18. PHP极其强大的图片处理库Grafika详细教程(1):图像基本处理
  19. 【R语言】ggplot2作图补充(1)
  20. 提高系统功率密度的技术-凯利讯半导体

热门文章

  1. 面试官问:服务的心跳机制与断线重连,Netty底层是怎么实现的?懵了
  2. 哈哈,咱们团队早就不用try-catch-finally关闭资源了!
  3. 深入理解 Spring Cloud 核心组件与底层原理
  4. 微服务架构之「 配置中心 」
  5. Spring Cloud第十篇:高可用的服务注册中心
  6. 统计学习三要素 模型+策略+算法
  7. 商汤涨涨涨涨:上市4日股价累涨130%,市值一度3000亿港元
  8. 英伟达PyTorch优化神器TensorRT重磅更新!10亿参数大模型实时运行,GPT推理加速21倍...
  9. 携Science封面、NIPS最佳论文,CMU大神Noam博士毕业,论文已公开
  10. AI复原上海民国名媛影像!1929年的小姐姐,时装精致不输现在