什么是Docker?
Docker是计算虚拟化的一种方式,和使用虚拟机进行虚拟化是类似的。由于近几年Docker技术的流行和发展。所以单独介绍一下Docker。首先先回答下面一个问题。
1.Docker会替代调虚机吗?
答案:不会。
原因:是有些遗留应用是运行在windows系统上的。有些应用可以直接迁移到虚拟上,但是不能直接在容器中运行。现在得趋势是虚拟机和容器同时发展。容器的优点是敏捷性和高性能。而虚拟机的优点是更强的隔离性和运维的简单性。 Docker不但不会替代虚拟机,这两种技术经常还结合起来应用。很多的公有云都是先使用虚拟机技术,然后在虚拟机上运行容器。
2.什么是Docker容器?
一句话描述容器: 容器是一个特殊的Linux进程。
只不过Docker对这个进程进行了特殊的隔离和限制,使得这个进程能够实现"应用容器"的效果。应用容器要达到的效果就是 :
1:给应用的应用提供一个单独的空间,其实就是一个单独的进程;
2:容器之间互相不影响,资源隔离;
3:容器可以在任何环境上运行。
为了达到上述的效果,Docker对这个进程进行了如下3个方面进行了隔离和控制:
2.1 . 通过Namespace对进程进行隔离:
Namespace是Linux内核提供的一个隔离系统资源的方法,它实现的功能就是将Linux的资源以Namespace为单位进行隔离。
2.2 . 通过CGroup进行资源限制:
Namespace只是限制了进程对于OS的视图,但是从OS的视角来看,这些被限制了的进程和普通的进程并没有区别。不管进程是否被限制,他们使用的都是同一个宿主机的OS内核。容器进程虽然被隔离了,但是它仍然可以不受限制的任意使用宿主机OS的资源。这显然不是一个“沙盒”应该表现出来的行为。所以必须对容器进程能够使用的系统资源进行限制,这就是Linux Control Group机制(简称CGroup)。CGroup主要作用就是限制进程能够使用的OS资源上限,比如CPU,内存,磁盘,网络带宽等。
2.3 . 通过容器镜像(或者叫rootfs)为容器提供单独的隔离的文件系统:
容器进程的目的是拥有自己的独立的文件系统,自己的进程在运行的时候可以在这个独立的文件系统中运行。这就需要用到上述的Mount Namespace,需要注意的是Mount Namespace对容器进程视图的改变需要伴随着挂在操作才能生效。所以说容器进程在启动之前需要做的事情就是挂载一个完整的操作系统的目录即可。而在Linux中正好有一个现成的命令chroot可以完成这个动作。
3.什么是容器镜像?
正如上述所言,这个挂载在容器根目录上的用来为容器进程提供隔离后执行环境的文件系统,就是所谓的“容器镜像”。它还有一个更为专业的名字,叫作:rootfs(根文件系统)。用一句话说:容器镜像就是一个文件系统。