Dockerfile 构建镜像 - 每天5分钟玩转容器技术(13)
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)相关推荐
- base 镜像 - 每天5分钟玩转容器技术(10)
2019独角兽企业重金招聘Python工程师标准>>> 上一节我们介绍了最小的 Docker 镜像,本节讨论 base 镜像. base 镜像有两层含义: 不依赖其他镜像,从 scr ...
- 每天5分钟玩转容器技术 ---- 系列文章
通过 Service 访问 Pod - 每天5分钟玩转 Docker 容器技术(136) 定时执行 Job - 每天5分钟玩转 Docker 容器技术(135) 并行执行 Job - 每天5分钟玩转 ...
- 转 容器生态系统 (续) - 每天5分钟玩转容器技术(3)
每天5分钟玩转容器技术(3) http://www.cnblogs.com/CloudMan6/p/6718464.html 叫板OpenStack:用Docker实现私有云 http://www.c ...
- 【视频】运行第一个容器 - 每天5分钟玩转容器技术(5)
[视频]运行第一个容器 - 每天5分钟玩转容器技术(5) CloudMan 2017-04-21 第5篇 [视频]运行第一个容器 这两天制作的视频,安装 Docker 并运行第一个容器,希望对大家有帮 ...
- 镜像的分层结构 - 每天5分钟玩转容器技术(11)
Docker 支持通过扩展现有镜像,创建新的镜像. 实际上,Docker Hub 中 99% 的镜像都是通过在 base 镜像中安装和配置需要的软件构建出来的.比如我们现在构建一个新的镜像,Docke ...
- 容器生态系统 - 每天5分钟玩转容器技术(2)
对于像容器这类平台级别的技术,通常涉及的知识范围会很广,相关的软件,解决方案也会很多,初学者往往容易迷失. 那怎么办呢? 我们可以从生活经验中寻找答案. 当我们去陌生城市旅游想了解一下这个城市一般我们 ...
- Docker 架构详解 - 每天5分钟玩转容器技术(7)
Docker 的核心组件包括: Docker 客户端 - Client Docker 服务器 - Docker daemon Docker 镜像 - Image Registry Docker 容器 ...
- 容器生态系统 (续) - 每天5分钟玩转容器技术(3)
容器生态系统包含核心技术.平台技术和支持技术三个方面.上一节我们讨论了核心技术,今天讨论另外两个部分. 容器平台技术 容器核心技术使得容器能够在单个 host 上运行.而容器平台技术能够让容器作为集群 ...
- Docker 从Dockerfile 构建镜像 :build 命令的用法
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. Dockerfile 创建完成后,可以使用 docker build 命令根据 Dockerfile ...
最新文章
- 四年上册级计算机教学计划,小学数学四年级上册教学计划
- 单连接算法与全连接算法
- 计算机专业大学排名_计算机专业大学排名公布:大连大学、辽宁师范大学冲进前一百...
- linux 重启_四步见证linux系统重启过程,小心操作,防止后悔!
- Git之pull后回退版本
- 关于“服务器提交了协议冲突. Section=ResponseStatusLine问题请
- springboot logback自定义配置文件路径
- RequireJS简单教程
- matlab 暴雨强度公式,利用MATLAB推导城市暴雨强度公式
- 大学生高等数学竞赛复习资料
- 达梦之路——基于Linux平台(redhat)安装部署DM7单库
- dorado7.x form提交数据报错
- RTL8152网卡灯配置详细说明
- Mybatis 注解@select,@detele,@update,@insert的简单应用
- 从零开始学习CTF——CTF是什么
- 富媒体超级短信(多媒体短信、视频短信)亮点、应用场景
- DP1.2 硬件规范——硬件/Lenovo
- Android 使用PLDroidPlayer播放网络视频 依据视频角度自己主动旋转
- 【论文阅读笔记】Deep neural networks are easily fooled- High confidence predictions for unrecognizable image
- 推荐引擎Mahout初体验
热门文章
- 深度学习框架哪家强?MXNet称霸CNN、RNN和情感分析,TensorFlow仅擅长推断特征提取
- 资源 | AI、神经网络、机器学习、深度学习以及大数据学习备忘单
- 资源 | 8张思维导图帮你梳理深度学习机器学习多个知识点
- 独家 | 我们扒出了这家中国创业公司,竟比苹果iPhone X早两年推出黑科技,还不用借助深度摄像头
- 为什么国内流行的 MyBatis ,国外 Java 工程师却不愿意使用?
- 序列化/反序列化,我忍你很久了,淦!
- 怎么快速插入 100 条数据,用时最短
- 【廖雪峰python入门笔记】tuple_创建
- 追番必备,动漫角色也可以用人脸识别了
- 华为鸿蒙系统2.0发布了!AI人工智能大有可为!