什么是容器?
- 一种虚拟化的方案
- 操作系统级别的虚拟化
- 依赖于Linux内核特性:Namespace和Cgroups(Control Group)
- Namespaces命名空间
- 编程语言:封装 --> 代码隔离
- 操作系统:系统资源的隔离
- 5种隔离
- PID(Process ID)进程隔离
- NET(Network)管理网络接口
- IPC(InterProcess Communication)管理跨进程通信的访问
- MNT(Mount)管理挂载点
- UTS(Unix TimeSharing System)隔离内核和版本标识
- Control groups控制组
- 用来分配资源
- 资源限制
- 优先级设定
- 资源计量
- 资源控制
- Namespaces命名空间
什么是Docker?
- 将应用程序自动部署到容器
- Go语言开源引擎 Github地址
Docker容器的能力
- 文件系统隔离:每个容器都有自己的root文件系统
- 进程隔离:每个容器都运行在自己的进行环境中
- 网络隔离:容器间的虚拟网络接口和IP地址都是分开的
- 资源隔离和分组:使用cgroups将CPU和内存之类的资源独立分配给每个Docker容器
Docker的目标
- 提供简单轻量的建模方式
- 职责的逻辑分离
- 快速高效的开发生命周期
- 鼓励使用面向服务的架构
Docker的使用场景
- 使用Docker容器开发、测试、部署服务
- 创建隔离的运行环境
- 搭建测试环境
- 构建多用户的平台即服务(PaaS)基础设施
- 提供软件即服务(SaaS)应用程序
- 高性能、超大规模的宿主机部署
Docker基本组成
- Docker Client 客户端
- Docker Daemon 守护进程
- C/S架构
- Docker Image 镜像
- 容器的基石
- 打包阶段
- 层叠的只读文件系统
- 联合加载(union mount)
- Docker Container 容器
- 通过镜像启动
- 启动和执行阶段
- 写时复制(copy on write)
- Docker Registry 仓库
- 公有 Docker Hub
- 私有