Docker
什么是docker?
如果想要了解docker, 首先了解一下什么是虚拟机?
Vmware就是虚拟机, 我们在windows安装一个vmware,就可以在上面安装Linux,那么这是怎么实现的呢?
首先介绍一下Hypervisor:
一种运行在基础物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享硬件
也就是说这个软件可以模拟出硬件的输入和输出,这样你在它上面就可以安装操作系统,
它可以直接操作电脑硬件
还有一种是,安装在操作系统上的,虽然是运行在操作系统上,但是同样是模拟底层硬件的输入和输出, 也就是说,在它上面的操作系统如果想调用硬件资源,需要经过VM内核->Hypervisor->主机内核
还有一种:
假如宿主机和虚拟机他们的kernel是一致的,就不用做硬件输入输出的搬运工了,只需要做kernel输入输出的搬运工即可,为了有别于硬件层面的虚拟机,这种虚拟机被命名为 操作系统层虚拟化:Operating-system-level virtualization 也被叫做容器
这就是说这个层面的虚拟化,是操作底层操作系统的内核,就是所有容器共享这个内核
空间
那么docker和宿主机共享kernel, 所以docker就大概是这个第三种的虚拟化技术
那么第三种技术,容器其实就是系统创建的的进程,只不过创建进程后,docker还会调用内核内置的方法来进行一系列的隔离操作,比如网络隔离,进程间通信隔离等,之后看上去每个进程(也就是容器)就像一个虚拟机
所以这个进程就像虚拟机,你在虚拟机里运行软件,就是在这个容器进程内再创建进程,再创建进程第一步就会调用fork方法,他会具有父进程的资源隔离,所以就不用再隔离一次了,所以两个容器内的软件其实是互相独立的
所以docker启动速度快,因为本质上容器和进程差别不大
Linux内核早期版本不支持隔离特性,现在是支持的
Docker镜像:
传统虚拟机安装ubuntu 会安装linux内核,然后再安装ubuntu发行版
Docker镜像就像是ubuntu发行版,而不包括内核
镜像只有层级关系的,比如我在docker安装了ubuntu镜像,然后又在这个镜像上安装了mysql镜像,ubuntu镜像就叫mysql的父镜像
Docker用处
Docker 提供轻量的虚拟化,你能够从Docker获得一个额外抽象层,你能够在单台机器上运行多个Docker微容器,而每个微容器里都有一个微服务或独立应用,例如你可以将Tomcat运行在一个Docker,而MySQL运行在另外一个Docker,两者可以运行在同一个服务器,或多个服务器上。未来可能每个应用都要Docker化
总结:
Docker可以高效的利用系统资源
Docker把应用都构建成镜像
安全性也受很多因素影响,镜像的传输过程是否受信等
也无法保证进程的绝对稳定
还有就是如果一层出现了bug,会永远留在下层