目录
一、什么是Docker
docker是基于Go语言实现的云开源项目,诞生于2013年初,最初的发起者是DotCloud公司。Docker的主要目标是“Build,Ship and Run Any App,Anywhere”等生命周期的管理,达到应用组件级别的“一次封装,到处运行”。
docker是利用一个更高层次的控制工具,对进程进行封装隔离,是属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。
Linux Containers = Namespace + Cgroup
- Namespace:命名空间,主要做访问隔离
- Cgroup:是control group的简称,又称为控制组,它主要是做资源控制
二、为什么要使用Docker
- 更快速的交付和部署:开发人员可以使用镜像来快速构建一套标准的开发环境;开发、测试、运维人员可以直接使用相同环境来部署代码。
- 更高效的资源利用:Docker是内核级的虚拟化,启动速度更快,消耗资源更少。
- 更轻松的迁移和扩展:Docker容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云等。
- 更简单的更新管理:Docker所有修改都以增量的方式进行分发和更新,从而更容易的实现自动化。
三、虚拟机与容器的区别
容器没有传统虚拟化中的Hypervisor层,它是基于容器技术的轻量级虚拟化,相对于传统的虚拟化技术,省去了Hypervisor层的开销。
传统虚拟化中Hypervisor层的作用:
- 资源虚拟化及分配:Hypervisor层在物理硬件和操作系统之间构建虚拟化层,将物理资源(CPU、内存、磁盘、网络等)抽象为虚拟资源,并动态分配给多个虚拟机实例。启动时,Hypervisor会为每个虚拟机加载操作系统并分配独立资源,确保多工作负载并行运行。
- 隔离与安全管控:Hypervisor强制虚拟机之间的资源隔离,防止相互干扰或越权访问。常见的分成两种类型:
· 裸金属型Hypervisor - 直接控制硬件,通过特权指令捕获和调度机制保障虚拟机安全;
· 托管型Hypervisor - 依赖主机操作系统实现隔离,但性能开销较高。
此外,Hypervisor还提供故障监控和迁移能力,增强系统可靠性。
特性 |
容器 |
虚拟机 |
启动速度 |
秒级 |
分钟级 |
硬盘使用 |
一般MB |
一般GB |
性能 |
接近原生 |
弱于 |
系统支持量 |
单机支持上百容器 |
一般几十个 |
隔离性 |
安全隔离 |
完全隔离 |
四、Docker运行架构
- Docker Image:镜像是Docker容器的基石,容器基于镜像启动和运行,镜像就好比容器的源代码,保存了用于启动容器的各种条件。类似于虚拟机的镜像。
- Docker Container:容器通过镜像来启动,Docker的容器是Docker的执行来源,容器中可以运行客户的一个或多个进程,如果说镜像是Docker生命周期的构建和打包阶段,那么容器则是启动和执行阶段。
- Docker Registry仓库:Docker用仓库来保存用户构建的镜像,仓库分为公有和私有两种。
运行架构图
五、Docker镜像分层架构
Docker镜像采用一种分层堆叠的运作方式:
- 采用overlay2的文件系统
- 镜像其实是由多个镜像堆叠而成的
- 建立镜像的同时,每个步骤都会建立一层镜像
六、使用Docker
运维、开发人员必须掌握如何管理容器的生命周期、管理镜像的生命周期和掌握Dockerfile的编写语法