文章目录
2010 年,在美国旧金山成立了一家名叫 dotCloud 的公司。这家公司主要提供基于 PaaS 的云计算技术服务。具体来说,是和 LXC 有关的容器技术。
LXC(Linux Container)是一种轻量级的虚拟化技术,可以隔离进程和资源,提供了在单一可控主机节点上支持多个相互隔离的 Server Container 同时执行的机制。Container 有效地将由单个操作系统管理的资源划分到孤立的组中,以更好地在孤立的组之间平衡有冲突的资源使用需求。Container 将应用程序与操作系统解耦,这意味着用户拥有了一个 Container 就近似的拥有了一个轻量且具有一定隔离性的操作系统运行时(Runtime)。
LXC 类似于 Chroot,提供了一个拥有自己进程和网络空间的虚拟环境,但又有别于虚拟机,因为 LXC 是一种操作系统层次上的资源的虚拟化,本质是一种操作系统虚拟化技术,基于 Linux Kernel 的 cgroups 和 namespace 实现。
- namespace 用于完成资源的隔离。
- cgroups 用于完成进程对资源使用的限制和管理。
后来,dotCloud 公司将自己的容器技术进行了简化和标准化,并命名为 Docker。Docker 诞生之初,并没有引起行业的关注。而 dotCloud 公司在激烈的竞争之下,决定将 Docker 开源。
2013 年 3 月,dotCloud 公司的创始人之一,28 岁的 Solomon Hykes 正式决定将 Docker 项目开源。开源当月,Docker 0.1 版本发布。此后的每一个月,Docker 都会发布一个版本。到 2014 年 6 月 9 日,Docker 1.0 版本正式发布。此时的 Docker,已经成为行业里人气最火爆的开源技术。dotCloud 公司也干脆把公司名字也改成了 Docker Inc.。
在容器技术之前,业界的网红是虚拟机。虚拟机属于服务器虚拟化技术。而 Docker 这样轻量级的虚拟化,属于操作系统虚拟化技术。
Docker Container 的启动时间很快,几秒钟就能完成。而且,它对资源的利用率很高,一台主机可以同时运行几千个 Docker Container。此外,它占的空间很小,虚拟机一般要几 GB 到几十 GB 的空间,而容器只需要 MB 级甚至 KB 级。
实际上要理解 Docker 并不困难,主要是两句口号:
- “Build, Ship and Run.”:构建、分发、运行。
- “Build once, Run anywhere.”:构建一次,到处运行。
Docker 的三大核心概念,分别是:
- 镜像(Image)
- 容器(Container)
- 仓库(Repository)
简而言之,Docker 就是一个 Golang 开发的开源容器引擎技术,最初基于 LXC 来实现。在 LXC 的基础之上,实现了几项重大的更改,通过类似 Git 的操作方式来构建、分发 Image,使 Container 的使用更加便捷和灵活。
Docker 的组件Docker 的组件包括:
-
Docker Client:向 Docker Server 进程发起请求,如:build、pull、run 等操作。Docker Client 既可以在访问本地守护(local host)进程,也可以访问远程(remote host)守护进程。
-
Docker Server:侦听 REST API 请求并管理 Docker 对象,例如:镜像,容器,网络和卷。守护程序还可以与其他守护程序通信以管理 Docker 服务。
-
Docker Registry(注册表,仓库注册服务器):存储 Docker Image 的中央仓库。其中 Docker Hub 是任何人都可以使用的 Public Registry,Docker Server 默认配置在 Docker Hub 上查找 Images。个人也可以运行 Private Registry,如果使用 Docker DataCenter,则其中包括 Docker Trusted registry(DTR)。使用 docker pull 或 docker run 指令时,所需的 Image 将从 Docker Server 配置的 Registry 中提取。