Docker系列-1.基本概念
1 虚拟化技术
虚拟化技术分为系统级虚拟化技术和操作系统级虚拟化。
1.1 系统级虚拟化技术
系统级虚拟化即硬件抽象层上的虚拟化。每台虚拟机中都有属于它的虚拟硬件,通过虚拟化层的模拟,虚拟机中的操作系统认为自己仍然是独占一个系统。比如VirtualBox、KVM、VMware、Xen、Hyper-V都是系统级虚拟化的实现方案。
1.2 操作系统级虚拟化
操作系统虚拟化是指:每个节点上只有唯一的系统内核,不虚拟任何硬件设备。通过使用操作系统提供的特性使得多个(容器)环境之间可以相互隔离。代表性的技术:chroot、LXC、Docker、Podman
2 Docker是什么
Docker是一个提供应用打包,部署、运行应用的容器化平台。这个平台(Docker Engine)介于应用程序和可用资源之间。这个额外的软件抽象层可以对操作系统虚拟化资源进行管理。
可用资源(CPU、内存、硬盘、网络等)这些资源既可以来自物理机也可以来自虚拟机。应用程序通过Docker Engine使用这些可用资源。
3 Docker体系结构
Docker Engine包含三个部分:Docker Deamon、rest api、docker cli;
Docker Deamon:Docker核心服务提供者的守护进程,提供:镜像的获取、服务的创建;
REST API:基于小型的web容器对外提供http接口服务;
Docker cli:docker可执行命令,他通过REST API与Deamon通信
4 容器与镜像
镜像
镜像是一个打包好的只读文件,里面包含里应用程序运行时所需的所有软、硬件资源。
容器
容器是镜像的一个运行实例,由Docker创建并运行。容器与容器相互独立,互不影响。
5 Docker运行流程
5.1 docker pull运行流程
-
client:docker pull Redis
-
deamon:是否有Redis是否有本地镜像
-
如果没有从Registry中Redis官方镜像下载到本地
5.2 docker run运行流程
- client:docker run Redis
- deamon:是否有Redis是否有本地镜像
- 如果有则从本地镜像创建Redis容器并由容器内部的组件对外暴露服务
6 运用到的内核相关技术
Namespaces
Linux Kernel通过namespace来隔离内核资源,可以使每一个进程都只能看到与自己的相关的资源而感觉不到对方的存在。这个无疑从资源的供给角度为容器虚拟化技术提提供了基础支持。
Cgroups
Linux Kernel通过Cgroups来管理操作系统的资源诸如可以限制、统计进程的CPU时间、占用的Memory、存储IO、网络IO资源
UnionFS
Docker使用轻量级(写时复制特性)的文件系统UnionFS,主要包括AUFS, btrfs, vfs, and DeviceMapper等实现
Container format
Docker将namespaces、control groups、 UnionFS 合并打包进一个文件 libcontainer格式文件。未来可能会兼容BSD的Jails或Solaris的Zones。