Docker组成
Docker 主机(Host): 一个物理机或虚拟机,用于运行Docker 服务进程和容器。
Docker 服务端(Server):Docker 守护进程,运行docker 容器。
Docker 客户端(Client): 客户端使用docker 命令或其他工具调用docker API。
Docker 仓库(Registry): 保存镜像的仓库,类似于git 或svn 这样的版本控制系统。统一官方仓库: https://hub.docker.com/
Docker 镜像(Images): 镜像可以理解为创建实例使用的模板。
Docker 容器(Container): 容器是从镜像生成对外提供服务的一个或一组服务。
Linux Namespace 技术:
namespace 是Linux 系统的底层概念,在内核层实现,即有一些不同类型的命名空间被部署在核内,各个docker 容器运行在同一个docker 主进程并且共用同一个宿主机系统内核,各docker 容器运行在宿主机的用户空间,每个容器都要有类似于虚拟机一样的相互隔离的运行空间,但是容器技术是在一个进程内实现运行指定服务的运行环境,并且还可以保护宿主机内核不受其他进程的干扰和影响,如文件系统空间、网络空间、进程空间等,目前主要通过以下技术实现容器运行空间的相互隔离:
Linux control groups:
Linux Cgroups 的全称是Linux Control Groups,它最主要的作用,就是限制一个进程组能够使用的资源上限,包括CPU、内存、磁盘、网络带宽等等。此外,还能够对进程进行优先级设置,以及将进程挂起和恢复等操作。
cgroups 具体实现:
blkio:块设备IO 限制。
cpu:使用调度程序为cgroup 任务提供cpu 的访问。
cpuacct:产生cgroup 任务的cpu 资源报告。
cpuset:如果是多核心的cpu,这个子系统会为cgroup 任务分配单独的cpu 和内存。
devices:允许或拒绝cgroup 任务对设备的访问。
freezer:暂停和恢复cgroup 任务。
memory:设置每个cgroup 的内存限制以及产生内存资源报告。
net_cls:标记每个网络包以供cgroup 方便使用。
ns:命名空间子系统。
perf_event:增加了对每group 的监测跟踪的能力,可以监测属于某个特定的group 的所有线程以及运行在特定CPU 上的线程。
Docker 的优势:
快速部署:短时间内可以部署成百上千个应用,更快速交付到线上。
高效虚拟化:不需要额外的hypervisor 支持,直接基于linux 实现应用虚拟化,相比虚拟机大幅提高性能和效率。
节省开支:提高服务器利用率,降低IT 支出。
简化配置:将运行环境打包保存至容器,使用时直接启动即可。
快速迁移和扩展:可夸平台运行在物理机、虚拟机、公有云等环境,良好的兼容性可以方便将应用从A 宿主机迁移到B 宿主机,甚至是A 平台迁移到B 平台。
Docker 的缺点:
隔离性:各应用之间的隔离不如虚拟机彻底。