在线课堂:https://www.100ask.net/index(课程观看) 论 坛:http://bbs.100ask.net/(学术答疑) 开 发 板:https://100ask.taobao.com/ (淘宝) https://weidongshan.tmall.com/(天猫)
版本 | 日期 | 作者 | 说明 |
---|---|---|---|
V1 | 2020 | 韦东山 | 技术文档 |
Docker是一种容器,什么叫容器?在软件开发中,我们经常碰到“这程序在我的电脑上明明没问题啊,怎么在客户的电脑上就有问题?”这是因为各个电脑的软件、硬件不一致。
有没有一种统一的、虚拟的软件硬件平台,在上面开发好软件后发给客户,客户就可以直接在这个平台上运行程序?有的,这就是容器。容器有很多种,Docker是其中比较好的。 跟VMware相比,Docker是一个轻量级的软件,运行速度快。
使用Docker前,需要了解2个概念:Image和container,即镜像、容器。镜像就是一个环境包,这个环境包可以移动到任意的Docker平台里运行。而容器就是镜像的实例,一个镜像可以启动多个容器。 简单地类比,映像就像一个Word软件,这是厂家发布的,你无法修改;容器就是你启动Word软件,可以启动多个Word软件,在每一个Word软件里编写不同的文档。
Docker的核心是“统一文件系统”(union file system),什么意思? 假设你有2个目录:lower和upper,它们可以合并成一个新目录merged,内容如下:
合并的原则是什么?upper目录优先级更高,可以覆盖lower目录,lower目录是只读的,upper目录是可读可写的。这个规则可以解析得更具体:
① 文件名及目录不相同,则 lower 及 upper 目录中的文件及目录按原结构都融入到 merged 目录中;
② 文件名相同,只显示 upper 层的文件: 如上图在 lower 和 upper 目录下及下层目录 dir_A 下都有 same.txt 文件,但在合并到 merged 目录时,则只显示 upper 的,而 lower 的隐藏。
③ 目录名相同, 对目录进行合并成一个目录: 如上图在 lower 及 upper 目录下都有 dir_A 目录,将目录及目录下的所有文件合并到 merged 的 dir_A 目录,目录内如有文件名相同,则同样只显示 upper 的,如上图中 dir_A 目录下的same.txt文件。
读文件时,upper目录中有该文件时就从upper目录读取;否则去lower目录读取。 新建、修改、删除文件时,只会影响到upper目录,lower目录是只读的不受影响。 在Docker中,镜像提供lower层的只读文件;容器提供upper层的可读可写文件,如下:
当我们启动一个容器时,就是在镜像提供的lower文件系统的基础上,创建一个可读可写的upper层文件系统。 我们可以启动多个容器,就是创建多个upper层文件系统,这些容器的upper层文件系统互不影响。
我们提供了镜像文件,里面安装好了各种软件;你需要做的是下载镜像、启动容器,在容器里下载你的程序、编译它们。
参考文章:Linux overlay文件系统解析 全文下载:嵌入式Linux系统开发完全手册 第二版