Docker简介

一、什么是Docker?
Docker时Docker.Lnc公司开源的一个基于LXC(Linux Container)技术之上搭建的Container容器引擎。提供一系列更强的功能,比如镜像、Dockerfile等。源代码托管在Github上,基于Go语言并遵从Apache2.0协议开源。
Docker属于Linux容器的一种封装,Docker理念是将应用及依赖包打包到一个可移植的容器中,可发布到任意Linux发行版Docker引擎上。
Docker将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了Docker,就不用担心环境问题。

Docker简介

二、Docker的架构
Docker采用C/S架构,Dcoker daemon作为服务端接受来自客户端请求,并处理这些请求,比如创建、运行容器等。客户端为用户提供一系列指令与Docker daemon交互。
Docker简介

Docker 功能
docker 客户端(client) docker客户端通过命令行形式与docker守护进程通信
docker 主机(host) 一个物理或虚拟机用于执行docker进程和容器
docker仓库(registry) docker仓库用来存放镜像

三、Docker的组件
LXC:
Linux容器技术,共享内核,容器共享宿主机资源,使用namespace和cgroups对资源限制于隔离。

Cgroups(control groups):
Linux内核提供的一种限制单进程或多进程资源的机制。例如:CPU、内存等资源的使用限制。

NameSpace:
命名空间,Linux内核提供的一种限制进程或者多进程资源隔离机制,一个进程可以属于多个命名空间。Linux提供了6种NameSpace:UTS、IPC、PID、Network、Mount、User。

NAMESPACE 功能
UTS 提供主机名,域名的隔离能力
IPC 提供进程之间通信、消息内存的隔离能力
PID 提供进程间隔离的能力
Network 提供网络隔离能力
Mount 提供磁盘挂载点和文件系统的隔离能力
User 提供用户、用户组隔离的能力

AUFS(advanced multi layered unification filesystem):
高级多层统一文件系统,是UFS的一种,每个branch可以指定readonly(ro只读)、readwrite(读写)和whiteout-able(wo隐藏)权限;一般情况下,aufs只有最上层的branch才有读写权限,其他branch均为只读权限。

UFS(UnionFS):
联合文件系统,支持将不同位置的目录挂载到同一虚拟文件系统,形成一种分层的模型;成员目录称为虚拟文件系统的一个分支(branch)。

四、Docker的优点

Docker的优点 详解
持续集成 在项目快速迭代情况下,轻量级容器对项目快速构建、环境打包、发布等流程就能提高工作效率。
版本控制 每个镜像就是一个版本,在一个项目多个版本时可以很方便管理。
可移植性 容器可以移动到任意一台Docker主机上,而不需要过多关注底层系统
标准化 应用程序环境及依赖、操作系统等问题,增加了生产环境故障率,容器保证了所有配置、依赖始终不变。
隔离性和安全性 容器之间的进程是相互隔离的,一个容器出现问题不会影响其他容器。

五、虚拟机与容器区别

KVM、VMware
硬件–》操作系统–》hypevisor–》--VM(guest OS、app)

Docker
硬件–》操作系统–》docker engine(docker引擎)–》container(app)
Docker简介
KVM、VMware:完整的操作系统
Docker:容器只包含了 文件系统级、内核、物理资源的调度:

启动时间:
Docker秒级别、KVM分钟级。

轻量级:
容器景象大小通常用M为单位、虚拟机以G为单位。
容器资源占用小、要比虚拟机部署更快。

性能:
容器共享的宿主机的内核、系统级虚拟化,占用资源少、没用hypervisor层开销,容器性能基本接近物理机。
虚拟机需要hypevisor层支持,虚拟化一些设备,具有完整的GuestOS(虚拟机操作系统),虚拟机开销大,因此降低性能,没有容器新能好。

安全性:
由于共享宿主机内核,只是进程级隔离,因此隔离性稳定性不如虚拟机。
容器具有一定权限访问宿主主机内核,存在一定安全隐患。

使用要求:
KVM基于硬件的完全虚拟化,需要硬件cpu虚拟化技术支持。
容器共享宿主主机内核,可以运行在主流的Linux发行版本,不需要考虑cpu是否支持虚拟化技术。