最近重新学习docker,好久不用,什么都是忘得差不多了,每天地铁看看视频,记记笔记,重新学习docker。
docker简介
什么是容器?
- 一种虚拟化的方案
- 操作系统级别的虚拟化
- 只能运行在相同或相似内核的操作系统
- 依赖于linux内核特性:Namespace和Cgroups(Control Group)
linux容器 VS 虚拟机
使用的容量更小
什么是docker?
- 将应用程序自动部署到容器
- GO语言开源引擎
- 2013 dotCloud
- 基于Apache 2.0开源授权协议发行
docker的目标
- 提供简单轻量的建模方式
- 职责的逻辑分离
- 快速高效的开发生命周期
- 鼓励使用面向服务的架构
docker的使用场景
- 使用docker容器开发测试,部署服务
- 创建隔离的运行环境
- 搭建测试环境
- 构建多用户的平台即服务(PaaS)基础设施
- 提供软件即服务(SaaS)应用程序
- 高性能、超大规模的宿主机部署
Docker容器相关技术
docker依赖的linux内核特性
- NameSpaces命名空间
- Control group (Cgroups)控制组
Namespace命名空间
编程语言
封装 -> 代码隔离
操作系统
系统资源的隔离
进程、网络、文件系统...
- PID (Process ID) 进程隔离
- NET (Network) 管理网络接口
- IPC (InterProcess Communication) 管理跨进程通信的访问
- MNT (Mount) 管理挂载点
- UTS (Unix TimeSharing System) 隔离内核和版本标识
Control groups 控制组
- 用来分配资源
- 来源于google
- Linux Kernel 2.6.24 @ 2007
- 资源限制
- 优先级设定
- 资源计量
- 资源控制
Docker容器的能力
- 文件系统隔离: 每个容器的都有自己的root文件系统
- 进程隔离: 每个容器都运行在自己的进程环境中
- 网络隔离: 容器的虚拟网络接口和IP地址是分开的
- 资源隔离和分组:使用Cgroups将CPU和内存之类的资源独立分配给每个Docker容器