Docker 核心技术
概念
基于 Linux 内核的 Cgroup,Namespace,以及Union FS 等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术,由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。
最初实现是基于 LXC,从 0.7 以后开始去除 LXC,转而使用自行开发的 Libcontainer,从1.11 开始,则进一步演进为使用 runC 和 Containerd。
Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护,使得Docker 技术比虚拟机技术更为轻便、快捷。
为什么要用 Docker
1 | 更高效的利用系统资源 |
虚拟机和容器运行态的对比
容器操作
1 | 启动: |
初识容器
- cat Dockerfile
1 | FROM ubuntu |
- 将Dockerfile打包成镜像
1 | docker build -t cncamp/httpserver:${tag} . |
- 运行容器
1 | docker run -d cncamp/httpserver:v1.0 |
容器主要特性
Namespace
- Linux Namespace 是一种 Linux Kernel 提供的资源隔离方案:
- 系统可以为进程分配不同的 Namespace;
- 并保证不同的 Namespace 资源独立分配、进程彼此隔离,即不同的 Namespace 下的进程互不干扰 。
Docker优势
封装性
- 不需要再启动内核,所以应用扩缩容时可以秒速启动。
- 资源利用率高,直接使用宿主机内核调度资源,性能损失小。
- 方便的 CPU、内存资源调整。
- 能实现秒级快速回滚。
- 一键启动所有依赖服务,测试不用为搭建环境犯愁,PE 也不用为建站复杂担心。
- 镜像一次编译,随处使用。
- 测试、生产环境高度一致(数据除外)。
隔离性
- 应用的运行环境和宿主机环境无关,完全由镜像控制,一台物理机上部署多种环境的镜像测试。
- 多个应用版本可以并存在机器上。
镜像增量分发
由于采用了 Union FS, 简单来说就是支持将不同的目录挂载到同一个虚拟文件系统下,并实现一种 layer 的概念,每次发布只传输变化的部分,节约带宽。
社区活跃:
Docker 命令简单、易用,社区十分活跃,且周边组件丰富。