




















Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护。
Docker 自开源后受到广泛的关注和讨论,以至于 dotCloud 公司后来都改名为 Docker Inc。Redhat 已经在其 RHEL6.5 中集中支持 Docker;Google 也在其 PaaS 产品中广泛应用。
Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux 容(LXC)等技术。
在 LXC 的基础上 Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单。
下面的图片比较了 Docker 和传统虚拟化方式的不同之处,可见容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方式则是在硬件层面实现。
作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具有众多的优势。
首先,Docker 容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多。 其次,Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器。
容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。传统虚拟机方式运行 10 个不同的应用就要起 10 个虚拟机,而 Docker 只需要启动 10 个隔离的应用即可。
具体说来,Docker 在如下几个方面具有较大的优势。
docker 镜像是一套使用联合加载技术实现的层叠的只读文件系统,包含基础镜像和附加镜像层
Linux 操作系统分别由两部分组成
内核空间是 kernel,Linux 刚启动时会加载 bootfs 文件系统,之后 bootf 会被卸载掉,用户空间的文件系统是 rootfs,包含常见的目录,如/dev、/proc、/bin、/etc 等等
不同的 Linux 发行版本 (红帽,centos,ubuntu 等) 主要的区别是 rootfs, 多个 Linux 发行版本的 kernel 差别不大。
每个不同 linux 发行版的 docker 镜像只包含对应的 rootfs,所以比完整的系统镜像要小得多
/var/lib/docker(可以使用 docker info 来进行查看)
当一个新容器启动时,读写层是没有任何数据的,当用户需要读取一些文件时,可以直接从只读层进行读取,只有当用户要修改只读层一些文件时,docker 才会将该文件从只读层复制出来放在读写层供使用者修改,只读层中的文件是没有改变的
Repository:本身是一个仓库,这个仓库里面可以放具体的镜像,是指具体的某个镜像的仓库,比如 Tomcat 下面有很多个版本的镜像,它们共同组成了 Tomcat 的 Repository。
Registry:镜像的仓库,比如官方的是 Docker Hub,它是开源的,也可以自己部署一个,Registry 上有很多的 Repository,Redis、Tomcat、MySQL 等等 Repository 组成了 Registry。
用户在 Docker Client 中运行 Docker 的各种命令,这些命令会传送给在 docker 宿主机上运行的 docker 守护进程,docker 的守护进程来实现 docker 的各种功能
启动 docker 服务后,docker 的守护进程会一直在后台运行
docker 命令行接口是 docker 最常用的与守护进程进行通信的接口,docker 的二进制命令文件(例如 docker run)此时就是 docker 的 Client,docker 也提供了其他的接口:Remote API
用户可以通过编写程序调用 Remote API,与 docker 守护进程进行通信,将自己的程序与 docker 进行集成
unix:///var/run/docker.sock 是默认的连接方式,可以通过配置修改为其他的 socket 连接方式
用户可以通过 dokcer 的二进制命令接口或者自定义程序,自定义程序通过 Remote API 来调用 docker 守护进程,Client 与 Server 之间通过 Socket 来进行连接,这种连接意味着 Client 与 Server 既可以在同一台机器上运行,也可以在不同机器上运行,Client 可以通过远程的方式来连接 Server以上
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。