1. 容器的概念
- 一种虚拟化的解决方案
- 与虚拟机所不同的是,虚拟机通过中间层,将一台或多台独立的机器虚拟运行于物理硬件之上;
- 而容器是直接运行于操作系统内核之上的用户空间;
- 基于上述,容器虚拟化也被称为操作系统虚拟化;
- 由于依赖于操作系统的特性,因此容器只能运行与底层操作系统相同或相似的操作系统
- 而 docker 使用的容器技术则是依赖于 Linux 内核特性:namespace 和 cgroups(control group)
- 因此 docker 上只能运行 Linux 类型系统,而不能运行 windows 系统;
2. Linux 容器技术 vs 虚拟机技术
如下图示为二者的层次化的分别:
- docker,占用更少的磁盘空间;
- 使用虚拟机,不但依赖应用(App)和其依赖的库(bins/libs),还需要包含完整的操作系统(Guest OS),为了运行数 MB 的应用,却需要安装占用几个 GB 的操作系统;
3. docker
- 将应用程序自动部署到容器的一种开源引擎,其使用 go 语言编写;
- 提供简单轻量的建模方式;
- 职责的逻辑分离;
使用场景:
- 使用 docker 容器开发、测试、部署服务;
- 创建隔离的运行环境;
- 搭建测试环境;
- 构建多用户的平台即服务(PaaS)基础设施
- 提供软件即服务(SaaS)应用程序
4. docker 的基本组成
- docker client:客户端; docker daemon:守护进程;
- c/s 架构
- docker image:镜像;
- 镜像是容器的基石;
- 层叠的只读文件系统
- docker container:容器;
- 通过镜像启动;
- 启动和执行;
- 写时复制(copy on write)
- docker registry:仓库
- 公有/私有
- Docker Hub
5. namespace/cgroups
- namespace
- 对于编程语言,实现封装时的代码隔离;
- 对于操作系统,则可实现对系统资源的隔离,系统资源包括:进程、网络、文件系统…
- namespace 包涵一下几种:
- PID(process id),进程隔离;
- NET(network),管理网络接口
- IPC(InterProcess Communication),管理跨进程通信的访问;
- MNT(Mount),管理挂载点;
- UTS(Unix Timesharing System),隔离内核和版本标识;
- Control groups
- 使用 control groups 对隔离的资源进行管理;
- 用来分配资源,实现了:资源限制,优先级设定,资源计量,资源控制;