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 查看镜像信息。

值得一提的是,Docker 会缓存已有镜像的镜像层,构建新镜像时,如果某镜像层已经存在,就直接使用,无需重新创建。

这就是这个扩展镜像的过程。

容器学习 之 扩展镜像(五)相关推荐

  1. 容器学习 之 base镜像(四)

    上一节我们谈到了容器的组件,镜像是 Docker 容器的基石,容器是镜像的运行实例,有了镜像才能启动容器. 这里我们先从base镜像开始一步步了解镜像的内部构造,镜像的分层,镜像的分发和管理. 我们以 ...

  2. 容器学习 之 本地镜像与共有镜像(十)

    共有镜像docker hub 首先得在 Docker Hub 上注册一个账号. 在 Docker Host 上登录. root@ubuntu:/home/yj# docker login Login ...

  3. 容器学习 之 镜像命令(九)

    images 显示镜像列表 root@ubuntu:/home/yj# docker images REPOSITORY TAG IMAGE ID CREATED SIZE my-image late ...

  4. Docket学习2《docker安装nginx、安装tomcat、安装Centos7、容器导入导出、镜像上传到仓库》

    上一篇:Docker学习1<环境准备.原理.常用命令> 目录 一.安装nginx镜像 1.获取nginx的版本 2.下载nginx 3.运行nginx 4.开放端口 5.测试 6.端口暴露 ...

  5. 学习笔记(十五)——镜像的知识点与注意事项

    学习笔记(十五)--镜像的知识点与注意事项 一.基础知识 1.SQL Server镜像只有两种模式:高安全模式和高性能模式.两种模式的主要区别在于在事务提交后的操作. 在高性能模式下,主体服务器不需要 ...

  6. 容器学习 之 镜像的分层结构(六)

    镜像的分层结构 Docker Hub 中 99% 的镜像都是通过在 base 镜像中安装和配置需要的软件构建出来的.比如我们现在构建一个新的镜像,Dockerfile 如下: 新镜像不再是从 scra ...

  7. Docker容器学习笔记一

    Docker容器学习笔记一 狂神说B站视频:https://www.bilibili.com/video/BV1og4y1q7M4?p=1 Docker容器学习笔记二:https://blog.csd ...

  8. 【Docker容器学习笔记一】

    一.Docker概述 1.Docker为什么会出现? 一款产品: 开发–上线 两套环境!应用环境,应用配置! 开发 - 运维. 问题:我在我的电脑上可以允许!版本更新,导致服务不可用!对于运维来说考验 ...

  9. 《Docker——容器与容器云》:第五章 构建自己的容器云

    我们在第1章介绍了一个云计算平台应有的层次结构,其中平台即服务层(PaaS)是本书重点着墨描述的.尽管在一些经典PaaS平台中,容器技术已经扮演了一个至关重要的角色,但很遗憾,大部分经典PaaS平台中 ...

最新文章

  1. IPSEC ×××主模式的九个包交换
  2. WINCE6.0文件系统及存储管理器
  3. HDU 2191 - 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 (多重背包)
  4. N551JM集显和独显切换
  5. 中检测到有潜在危险的 request.form 值。_洛宁县钢结构厂房加固检测设计中心
  6. python循环数组判断,python的数据类型、数组、条件判断、循环的基础知识
  7. iOS警告-This block declaration is not a prototype
  8. gradle tool升级到3.0注意事项
  9. 识别产品外观的合格软件_你还在犹豫?外观检测设备使用已成主流!
  10. 郭明錤爆料:苹果造车团队已解散
  11. opencv-api contourArea
  12. Java FileInputStream
  13. VisualStudio 2010从分析到实施(3)——使用Use Case Diagram设计系统交互
  14. 11.17牛客练习赛31 ABC-----未完
  15. STM32 RTC闹钟中断和唤醒待机模式
  16. 快书编标让标书制作更高效、更规范、更轻松
  17. 10.26 工作学习记录 英语短文背诵 springboot 起步依赖和配置抽取 英文背诵 英语语法 及物与不及物 语法练习 设计模式 工厂方法模式
  18. 打开matlab只出现蓝色的界面,win10 windows设置无法打开总卡在纯蓝色界面如何解决...
  19. ESP32 学习日志(5)——NVS
  20. 软路由自建iptv服务器,LEDE软路由 iPTV 实现任意端口看电视的方法

热门文章

  1. Lua和C++交互详细总结
  2. cocos2d-x初探学习笔记(15)--CCOrbitCamera
  3. ADO学习(三)Command 对象
  4. 记一次失败的Windows环境编译Nginx源码
  5. 《MySQL实战45讲》实践篇 24-29 学习笔记 (主备篇)
  6. Go 如何利用 Linux 内核的负载均衡能力?
  7. 如何搭建低延时、交互式的在线教育平台?(内附视频回放)
  8. 视频播放器的极致体验优化
  9. 基于Nginx的媒体服务器技术
  10. Spark之Spark概述