下图为 Docker 图标(是一个鲸鱼上面是集装箱)。1、我们为什么要使用Docker当我们在工作中,一款产品从开发设计到上线运行,其中需要开发人员和运维工程师,开发人员负责代码编写,开发产品,运维工程师需要测试环境,产品部署。这之间就会有分歧。比如开发人员在自己的电脑上运行产品没有问题,可是换了一个环境,运维工程师部署的时候由于操作环境和开发人员不一致,其中包括操作系统、开发环境、部署文件等等。开发人员需要告诉运维团队所需的全部配置文件+所有的软件环境,也就导致产品部署出现问题,开发人员和运维工程师出现分歧。就好比我们要开发一个电商项目,其中肯定包括 Java 环境/Tomcat/ MySQL / JDBC 驱动包/相应 jar 包等,还需要较复杂的安装配置,并且不能跨平台使用,如果开发人员在 Windows 上开发,而运维工程师部署产品在 Linux 上,就会导致由于环境不同的产品部署问题,就算不跨系统,而是换一台同样操作系统的服务器,要移植部署依然非常麻烦。为了解决这个问题,我们的 Docker 应运而生!2、Docker是什么说了这么多,那么 Docker 到底是什么,能帮我们做什么,且听我慢慢道来。首先我们要知道,Docker 是基于 Go 语言实现的云开源项目,Docker 的主要目标是“Build,Ship and Run Any App,Anywhere”,Docker 其中包括,镜像、容器、仓库,很简单,目的就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的产品(可以是 web 应用或者数据库应用)及其环境能够做到“一次封装,到处运行”。再通俗点说,就是我们使用 Docker,使得运行在 Docker 容器上面的应用,配置好一次环境,换到别的机器上可以一键部署,大大简化了操作,实现了跨平台,跨服务器,由下而上打包,达到应用程式跨平台间的无缝接轨运作。一句话,Docker解决了运行环境和配置问题软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术。3、Docker能干什么这个需要对比来说,其实我们常用的虚拟机就和Docker类似,我将通过之前的虚拟机技术和现在和容器虚拟化技术做一个对比。(1)之前的虚拟机技术我们对虚拟机并不陌生,其实它也可以看作是一个Docker,是一种带环境安装的解决方案,可以在一个操作系统中运行另一个操作系统,对于计算机底层来说,虚拟机就是一个软件而已,不需要的时候就可以删掉,对其他部分毫无影响,我们也可以通过虚拟机实现不同产品的打包发布,但是它也有很多缺点,比如:资源占用多、冗余步骤多、启动慢。(2)容器虚拟化技术由于前面虚拟机存在诸多问题,Linux 发展出了另一种虚拟化技术:Linux 容器,Linux 容器不是模拟一个完整的操作系统而是对进程进行隔离,有了容器,我们就可以将软件运行所需的所有资源打包到一个隔离的容器中,容器与虚拟机不同,不需要捆绑一整套操作系统,只需要软件工作所需的库资源和设置。系统因此而变得高效轻量并保证部署在任何环境中的软件都能始终如一地运行。(3)小总结
[ironmanjay@localhost ~]$ uname -a Linux localhost.localdomain 3.10.0-1062.12.1.el7.x86_64 #1 SMP Tue Feb 4 23:02:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
1、Docker镜像是什么?是一种UnionFS(联合文件系统),是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。Union 文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。2、Docker镜像加载原理Docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。bootfs(boot file system)主要包含bootloader和kernel, bootloader主要是引导加载kernel, Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是bootfs。这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。3、Docker镜像为什么很小如果我们从仓库pull一个centos只有200左右mb,但是我们的镜像centos文件高达4G左右,因为我们的在仓库pull的centos剔除了无用的东西,只是一个精简的OS,rootfs可以很小,只包含了最基本的命令、工具和程序库就可以了,因为底层直接用Host的kernel,自己只需要提供rootfs 就行了。4、Docker分层的镜像如下图所见,当我们在仓库下载tomcat时,是一层一层下载的,这里面包含着运行tomcat的环境,就像洋葱一样,一层一层的最终展示给我们镜像版的tomcat。5、Docker镜像为什么要采用分层结构Docker镜像最大的一个好处就是 - 共享资源。比如:有多个镜像都从相同的 base 镜像构建而来,那么宿主机只需在磁盘上保存一份base镜像,同时内存中也只需加载一份 base 镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。6、Docker镜像的特点Docker镜像都是只读的当容器启动时,一个新的可写层被加载到镜像的顶部。这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。