Docker 提供了一个可以运行你的应用程序的封套(envelope),或者说容器。它原本是 dotCloud 启动的一个业
余项目,并在前些时候开源了。它吸引了大量的关注和讨论,导致 dotCloud 把它重命名到 Docker Inc。它最初
是用 Go 语言编写的,它就相当于是加在 LXC(LinuX Containers,linux 容器)上的管道,允许开发者在更高层
次的概念上工作。
Docker 扩展了 Linux 容器(Linux Containers),或着说 LXC,通过一个高层次的 API 为进程单独提供了一个
轻量级的虚拟环境。Docker 利用了 LXC, cgroups 和 Linux 自己的内核。和传统的虚拟机不同的是,一个
Docker 容器并不包含一个单独的操作系统,而是基于已有的基础设施中操作系统提供的功能来运行的。
Docker 类似虚拟机的概念,但是与虚拟化技术的不同点在于下面几点:
1.虚拟化技术依赖物理 CPU 和内存,是硬件级别的;而 docker 构建在操作系统上,利用操作系统的
containerization 技术,所以 docker 甚至可以在虚拟机上运行。
2.虚拟化系统一般都是指操作系统镜像,比较复杂,称为“系统”;而 docker 开源而且轻量,称为“容器”,单个
容器适合部署少量应用,比如部署一个 redis、一个 memcached。
3.传统的虚拟化技术使用快照来保存状态;而 docker 在保存状态上不仅更为轻便和低成本,而且引入了类似
源代码管理机制,将容器的快照历史版本一一记录,切换成本很低。
4.传统的虚拟化技术在构建系统的时候较为复杂,需要大量的人力;而 docker 可以通过 Dockfile 来构建整个
容器,重启和构建速度很快。更重要的是 Dockfile 可以手动编写,这样应用程序开发人员可以通过发布 Dockfile
5.Dockerfile 可以基于已经构建好的容器镜像,创建新容器。Dockerfile 可以通过社区分享和下载,有利于该
Docker 会像一个可移植的容器引擎那样工作。它把应用程序及所有程序的依赖环境打包到一个虚拟容器中,
这个虚拟容器可以运行在任何一种 Linux 服务器上。这大大地提高了程序运行的灵活性和可移植性,无论需不需
要许可、是在公共云还是私密云、是不是裸机环境等等。
Docker 也是一个云计算平台,它利用 Linux 的 LXC、AUFU、Go 语言、cgroup 实现了资源的独立,可以很轻
松的实现文件、资源、网络等隔离,其最终的目标是实现类似 PaaS 平台的应用隔离。
1. Docker 服务器守护程序(server daemon),用于管理所有的容器。
2. Docker 命令行客户端,用于控制服务器守护程序。
3. Docker 镜像:查找和浏览 docker 容器镜像。
文件系统隔离:每个进程容器运行在完全独立的根文件系统里。
资源隔离:可以使用 cgroup 为每个进程容器分配不同的系统资源,例如 CPU 和内存。