阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Docker镜像构建的两种方式

215次阅读
没有评论

共计 2085 个字符,预计需要花费 6 分钟才能阅读完成。

关于 Docker 里面的几个主要概念

这里用个不太恰当的比方来说明。

大家肯定安装过 ghost 系统,镜像就像是 ghost 文件,容器就像是 ghost 系统。你可以拿别人的 ghost 文件安装系统(使用镜像运行容器),也可以把自己现有的系统制作成 ghost 文件(从容器构建镜像)。Dockerfile 则像是一个生成 ghost 文件的脚本(镜像构建脚本),这个脚本会指定去哪里下载哪个版本的 window 系统,再去哪里下载哪些软件并安装,再修改哪些配置文件,等等。本文主要讲的是,如何从容器构建镜像(把现有系统制作成 ghost 文件),和如何使用 Dockerfile 构建镜像(使用脚本生成 ghost 文件)。

两种方式构建镜像的主要步骤:

  1. 从容器构建镜像(以下简称 容器镜像
    • 创建一个容器,比如使用 tomcat:latest 镜像创建一个 tomcat-test 容器
    • 修改 tomcat-test 容器的文件系统,比如修改 tomcat 的 server.xml 文件中的默认端口
    • 使用 commit 命令提交镜像
  2. 使用 Dockerfile 构建镜像(以下简称Dockerfile 镜像
    • 编写 Dockerfile 文件
    • 使用 build 命令构建镜像

两种构建方式的区别:

  1. 容器镜像 的构建者可以任意修改容器的文件系统后进行发布,这种修改对于镜像使用者来说是不透明的,镜像构建者一般也不会将对容器文件系统的每一步修改,记录进文档中,供镜像使用者参考。
  2. 容器镜像 不能(更准确地说是不建议)通过修改,生成新的 容器镜像
    从镜像运行容器,实际上是在镜像顶部上加了一层可写层,所有对容器文件系统的修改,都在这一层中进行,不影响已经存在的层。比如在容器中删除一个 1G 的文件,从用户的角度看,容器中该文件已经没有了,但从文件系统的角度看,文件其实还在,只不过在顶层中标记该文件已被删除,当然这个标记为已删除的文件还会占用镜像空间。从容器构建镜像,实际上是把容器的顶层固化到镜像中。
    也就是说,对 容器镜像 进行修改后,生成新的 容器镜像,会多一层,而且镜像的体积只会增大,不会减小。长此以往,镜像将变得越来越臃肿。Docker 提供的 exportimport 命令可以一定程度上处理该问题,但也并不是没有缺点。
  3. 容器镜像 依赖的父镜像变化时,容器镜像 必须进行重新构建。如果没有编写自动化构建脚本,而是手工构建的,那么又要重新修改容器的文件系统,再进行构建,这些重复劳动其实是没有价值的。
  4. Dockerfile 镜像 是完全透明的,所有用于构建镜像的指令都可以通过 Dockerfile 看到。甚至你还可以递归找到本镜像的任何父镜像的构建指令。也就是说,你可以完全了解一个镜像是如何从零开始,通过一条条指令构建出来的。
  5. Dockerfile 镜像 需要修改时,可以通过修改 Dockerfile 中的指令,再重新构建生成,没有任何问题。
  6. Dockerfile 可以在 GitHub 等源码管理网站上进行托管,DockerHub 自动关联源码进行构建。当你的 Dockerfile 变动,或者依赖的父镜像变动,都会触发镜像的自动构建,非常方便。

** 不管是官方还是我个人,都推荐使用第二种方式构建镜像。**

关于 Dockerfile 里面指令的详细说明,这里就不一一列出了,大家可以参考官方文档,或关注我之后的文章,当然 Linux 公社也有很多。

更多 Docker 相关教程见以下内容

Docker 安装应用(CentOS 6.5_x64) http://www.linuxidc.com/Linux/2014-07/104595.htm

Ubuntu 16.04 服务器上配置使用 Docker  http://www.linuxidc.com/Linux/2017-06/145176.htm

Ubuntu 15.04 下安装 Docker  http://www.linuxidc.com/Linux/2015-07/120444.htm

Docker 安装实例 http://www.linuxidc.com/Linux/2017-04/142666.htm

Docker 创建基础镜像  http://www.linuxidc.com/Linux/2017-05/144112.htm

在 Ubuntu 15.04 上如何安装 Docker 及基本用法 http://www.linuxidc.com/Linux/2015-09/122885.htm

Ubuntu 16.04 上 Docker 使用手记 http://www.linuxidc.com/Linux/2016-12/138490.htm

使用 Docker 分分钟启动常用应用  http://www.linuxidc.com/Linux/2017-04/142649.htm

Ubuntu 16.04 下 Docker 修改配置文件不生效解决办法  http://www.linuxidc.com/Linux/2017-05/143862.htm 

Docker 的详细介绍:请点这里
Docker 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-07/145909.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计2085字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中