Docker由Go语言开发实现,基于Linux内核的cgroup,namespace,以及AUFS类的Union FS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。
由于隔离的进程独立于宿主和其他的隔离的进程,因此也称为容器。Docker在容器的基础上进行了进一步的封装,从文件系统,网络互连到进程隔离等等,
极大简化了容器的创建及维护,使得Docker技术比虚拟化技术更为轻便、快捷。
- 传统虚拟机
传统虚拟机是虚拟出一套硬件后,在其运行一个完成的操作系统,在系统上再运行所需的应用进程
- Docker
容器内的应用进程直接运行于宿主的内核,容器没有自己的内核,而且也没有进行硬件的虚拟。因此,容器要比传统的虚拟机更为轻便。
- Docker的优势
- 更高效的利用系统资源
- 启动速度更快速
- 一致的运行环境
- 持续交付和部署
- 更轻松迁移
- 更轻松的维护和扩容
- 与传统虚拟机对比总结
特性 | 容器 | 虚拟机 |
启动 | 秒级 | 分钟机 |
硬盘使用 | 一般MB | 一般GB |
性能 | 接近原生 | 较弱 |
系统支持 | 单机支持上千个容器 | 几十个 |
Docker三个概念
- 镜像(Image)
Docker镜像是一个特殊的文件系统,除了提供容器运行所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的配置参数(如匿名卷、环境变量、用户等)。
镜像不包含任何动态数据,器内容在构建之后也不会被改变
- 容器(Container)
镜像和容器的关系就像java中的类和实例一样,镜像是静态定义的,容器是镜像运行的实体。容器可以被创建、启动、停止、删除、暂停等。容器跟镜像一样都是分层存储。
- 仓库(Repository)
类似git及svn,docker仓库是存放镜像文件的,方便其他服务器使用。