docker概念
1、一次封装,到处运行 Build,Ship and Run Any App,Anywhere
2、解决运行环境和配置问题的软件容器,方便持续集成并有助于整体发布的容器虚拟化技术。
3、虚拟机:占用资源多、冗余步骤多、启动慢。
4、Docker:Linux发展的一种虚拟化技术,linux容器(Linux Containers,LXC)。Linux容器不是模拟一个完整的操作系统,而是对进程进行隔离。可以将运行所需的资源打包到一个隔离的容器中。
容器和虚拟机不同,不需要捆绑一整套操作系统,只需要软件工作所需的库资源和设置。
*传统虚拟机技术是虚拟一套硬件后,在其运行一个完整操作系统,在该系统上在运行所需应用程序;
*容器内的应用进程直接运行于宿主的内核,容器没有自己的内核,而且没有进行硬件虚拟,每个容器互相隔离,有自己的文件系统,容器之间进程不会互相影响,能区分计算资源。软件隔离,共享硬件。
更快的应用交付和部署、更便捷的升级和扩缩容器、更简单的系统运维、更高效的计算资源利用。
更轻量:centos/ubuntu基础镜像近170M
更高效:无操作系统虚拟化开销,计算(轻量、无额外开销)、存储(系统盘aufs/dm/overlyfs)、网络(宿主机网络、NS隔离)
更便捷、更灵活:分层的存储和包管理,devops理念、支持多种网络配置
支持Docker6.5(64-bit)或者更高版本,系统内核要求3.10以上
Docker本身是一个容器运行载体或者称之为管理引擎。可以把应用程序和配置依赖打包好形成一个可交付的运行环境。
Docker有着比虚拟机更少的抽象层,docker不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在cpu、内存利用率上docker将会在效率上有明显优势。
Docker利用的是宿主机的内核,而不需要Guset os。因此,新建一个容器,docker不需要和虚拟机一样重新加载一个操作系统内核。避免引寻、加载操作系统内核。虚拟机需要加载Guest OS。
镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包括运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。
UnionFS(联合文件系统):是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。Union文件系统是Docker镜像的基础。镜像可以通过分层来进行基础,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
特性:一次同时家长多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层系统叠加起来,这样最终的文件系统会包括底层的文件和目录。
Docker镜像实际是有一层一层的文件系统组成,这种层级的文件系统UnionFS。包括bootfs、rootfs
Bootfs(boot file system)主要包含bootloader和kernel,bootloader主要是引导加载kernel,Linux刚启动时会加载bootfs文件系统,在docker镜像的最底层是bootfs。这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。
Rootfs(root file system),在bootfs之上。包含典型linux系统中的/dev,/proc,/bin,/etc等标准目录和文件。Rootfs就是各种不同的操作系统发行版,比如Ubuntu,Centos等等。
对于一个精简的OS,rootfs可以很小,只需要包含最基本的命令、工具和程序库就可以了,因为底层直接用Host的kernel,自己只需要提供rootfs就行了。由此可见不同的linux发行版,bootfs基本是一致的,rootfs会有差别,因此不同的发行版可以公用bootfs。
最大的一个好处就是-共享资源
比如:有一个镜像都从相同的base镜像构建而来,那么宿主机只需在磁盘上保存一份base镜像,同时内存也只需要加载一份base镜像,就可以为所有容器服务器了。而且镜像的每一层都可以被共享。