一,Docker简介
1,什么是容器
(1)一种虚拟化的方案
(2)操作系统级别的虚拟化
(3)只能运行相同或相似内核的操作系统
(4)依赖于Linux内核特性:Namespace和CGroups(Control Group)
2,虚拟机与容器对比
与虚拟相比,容器占用的磁盘空间更少,如下图,使用虚拟机部署应用需要包含应用,依赖的类库和完整的操作系统,但是容器只需要应用和其依赖的类库。
虚拟机原本可以几十M的应用可能需要几个G操作系统来支撑。
3,什么是Docker
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
Docker的目标:
(1)提供简单轻量的建模方式
(2)职责的逻辑分离
(3)快速高效的开发生命周期
(4)鼓励使用面向服务的架构
Docker的使用场景:
(1)使用Docker容器开发、测试、部署服务
(2)创建隔离的运行环境
(3)搭建测试环境
(4)构建多用户的平台即服务(PaaS)基础设施
(5)提供软件即服务(SaaS)应用程序
(6)高性能、超大规模的宿主机部署
二,Docker的基本组成
1,Docker Client客户端
2,Docker Daemon守护进程
3,Docker Image镜像
4,Docker Container容器
5,Docker Registry仓库
Docker Client客户端通过发送各种操作命令访问守护进程,守护进程也将结果反馈到客户端
Docker Client客户端访问守护进程,来操作Docker容器,容器是由镜像来创建,而镜像则放在Docker仓库中。
三,Docker容器相关技术简介
Namespace命名空间:
1,在编程语言中,它的主要作用是代码的封装即代码隔离。
2,在操作系统系统中,它的主要作用是系统资源的隔离,包括:进程,网络,文件系统等等。
Docker主要使用的5种命名空间:
(1)PID(Process ID) 进程隔离
(2)NET(Network) 管理网路接口
(3)IPC(InterProcess Communication) 管理跨进程通信的访问
(4)MNT(Mount) 管理挂载点
(5)UTS(Unix Timesharing System) 隔离内核和版本标识
Control groups控制组提供的功能:
(1)资源限制
(2)优先级设定
(3)资源计量
(4)资源控制
通过以上两种技术,提供给Docker容器的的能力:
(1)文件系统隔离:每个容器都有自己的root文件系统
(2)进程隔离:每个容器都运行在自己的进程环境中
(3)网路隔离:容器间的虚拟网络接口和IP地址都是分开的
(4)资源隔离和分组:使用Cgroups将CPU和内存之类的资源独立分配给每个Docker容器