前言
本讲是从Docker系列讲解课程,单独抽离出来的一个小节,重点介绍:镜像分层的意义,一起来探讨一下吧!
概述
1.站在镜像分层的角度考虑,什么是镜像?
就是把业务代码+可运行环境、进行整体的打包得到的一个只读文件。每迭代一个版本,打一次包。需要哪个版本,可以直接拉取运行。
再具体点:
镜像是一种轻量级、可执行的独立软件包、用来打包软件运行环境和基于运行环境开发的软件,它包含了某个软件所需的所有内容、包括代码、运行时、库、环境变量和配置文件。
所有的应用、直接打包docker镜像、就可以直接运行使用。
举例说明:
通过docker pull 命令,下载下的tomcat 或 nginx镜像,是不是可以通过docker run 启动后,直接通过浏览器访问,与之配套的资源已经自动构建好。
2.为什么要镜像分层?好处是什么?
一起回顾一个码头的场景:
古代的码头是不是要手挑肩扛,把货物一件件往小船上运?弊端很明显:工人可以多少私吞一点,效率也比较低。
现在呢?都是一个大大的集装箱,一个大大的货轮。好处也很明显:效率高、集装箱货物之间彼此相互不影响。
反思:码头上,每个集装箱,可以把他们理解为单独的一个镜像,Docker是什么?它就是那个大大的货轮。
上面的货物,有PHP的、Nginx的、Tomcat,多种镜像、(可以在基准镜像上迭代)多个版本(每个版本只需做增量操作),每个镜像都可以拉出来独立运行,相互都不影响,是不是很Nice!
3.如何创建docker镜像
docker官方仓库里面有大量的镜像,可以从中直接pull命令拉取。另外这些镜像都是原厂维护,可以得到及时的更新和修护。
我还可以通过编写Dockerfile,用FROM指定基准镜像后,自定义一些服务,然后重新bulid镜像,最后把它打包成一个自定义的新镜像。
一、现实中的镜像
1.所有镜像都起始于一个基础镜像层
该基础镜像,在Dockerfile中的体现就是FROM关键字后面的内容。
当进行修改或增加新的内容时,就会在当前镜像层之上,创建新的镜像层。无论这个镜像有多少层,对内每层的中间镜像都是各自独立的,对外他们又是一个统一的整体。
对内是一层一层的(每家每户),对外统一视图(都是中国公民),都是只读的:
注:图片中的大背景框,就是基准镜像,类似于大轮船上的其中一个集装箱(文件是集装箱中的货物)。
2.镜像与容器的使用原理
Docker镜像是只读的,不能直接在上面运行服务的,怎么办?这就出现了Container容器。当容器启动