docker_practice/introduction/README.md

35 lines
2.4 KiB
Markdown
Raw Normal View History

2014-09-12 10:52:17 +08:00
#简介
2014-09-17 13:45:13 +08:00
##什么是Docker
Docker是一个开源项目诞生于2013年初最初是dotCloud公司内部的一个业余项目。它基于Google公司推出的Go语言实现。
项目后来加入了Linux基金会并在github上维护项目代码。
2014-09-12 10:52:17 +08:00
2014-09-17 13:45:13 +08:00
Docker自开源后受到广泛的关注和讨论以至于dotCloud公司后来都改名为Docker Inc。
2014-09-11 22:52:28 +08:00
2014-09-17 13:45:13 +08:00
Docker项目的目标是实现轻量级的操作系统虚拟化解决方案。
Docker的基础是Linux Container LXC
2014-09-11 22:52:28 +08:00
首先我们来看Linux Container的发展过程。
2014-09-12 10:52:17 +08:00
我们知道传统的虚拟机通过在宿主主机中运行hypervisor来模拟一整套完整的硬件环境提供给虚拟机的操作系统。虚拟机系统看到的环境是可限制的也是彼此隔离的。
2014-09-11 22:52:28 +08:00
这种直接的做法实现了对资源最完整的封装,但很多时候往往意味着系统资源的浪费。
例如以宿主机和虚拟机系统都为Linux系统为例虚拟机中运行的应用其实可以利用宿主机系统中的运行环境。
我们知道在操作系统中包括内核、文件系统、网络、PID、UID、IPC、内存、硬盘、CPU等等所有的资源都是应用进程直接共享的。
要想实现虚拟化除了要实现对内存、CPU、网络IO、硬盘IO、存储空间等的限制外还要实现文件系统、网络、PID、UID、IPC等等的相互隔离。
前者相对容易实现一些,后者则需要宿主机系统的深入支持。
随着Linux系统对于名字空间功能的完善实现程序员已经可以实现上面的所有需求让某些进程在彼此隔离的名字空间中运行。大家虽然都共用一个内核和某些运行时环境例如一些系统命令和系统库但是彼此却看不到都以为系统中只有自己的存在。这种机制就是Container容器
2014-09-17 13:45:13 +08:00
而Docker正是在容器的基础上进行了进一步的封装让用户不需要去关心容器的管理使得操作更为简便。用户操作Docker的容器就像操作一个快速轻量级的虚拟机一样简单。
2014-09-12 10:52:17 +08:00
2014-09-17 13:45:13 +08:00
下面的图片比较了Docker和传统虚拟化方式的不同之处可见容器是在操作系统层面上实现虚拟化而传统方式则是在硬件层面实现。
2014-09-11 22:52:28 +08:00
![传统虚拟化](../images/virtualization.png)
![Docker](../images/docker.png)
2014-09-12 10:52:17 +08:00
##为什么要使用docker
2014-09-17 13:45:13 +08:00
作为一种新兴的虚拟化方式Docker跟传统的虚拟化方式相比具有众多的优势。
2014-09-12 10:52:17 +08:00