前言
在介绍Docker之前,需要知道什么是虚拟化,为什么要使用虚拟化,以Linux而言,linux操作系统会有一个主进程PID=1,由主进程派生出其他进程来控制不同得服务,比如:PID=2 运行的是nginx服务,PID=3 运行的是tomcat服务等等,服务之间可能会互相影响,为了让不同的服务运行在不同的运行时环境中实现互不影响,同时又不增加服务器成本,衍生出了虚拟化技术,实现了在一个系统之上模拟多个操作系统(不同的运行时环境),随着技术的发展,虚拟化技术的开销较大,比如,只想运行一个py的脚本,但是却需要创建一个虚拟的操作系统,这并不合理,于是又衍生出了容器技术,将虚拟化层的抽象层(用户层)剥离,使用 docker engine 来替代(替代来宾操作系统,也就是虚拟机),只需要通过docker 引擎就可以直接连接到宿主及操作系统中,极大减小了开销。
一、Docker 概述
Docker是在Linux容器里运行应用的开源工具,是一种轻量级的虚拟机。诞生于2013年。
Docker是一个用于开发,交付和运行应用程序的开放平台。能够将应用程序于基础架构分开,从而可以快速交付软件。
Docker是一个应用容器引擎,让开发者可以以打包的方式封装系统、应用、以及依赖包等到一个可移植的镜像中,然后发布到任何流行的Linux或者Windows机器上,也可以实现虚拟化。容器是完全使用沙箱机制(隔离机制),相互之间不会有任何接口。做到了“一次封装,到处运行”。
Docker容器与传统虚拟化的比较
特性 | Docker | 虚拟机 |
---|---|---|
启动速度 | 秒级 | 分钟级 |
计算能力损耗 | 接近无 | 损耗50%左右 |
磁盘占用 | MB级 | GB级 |
数量 上千个( | 进程) | 几十个(操作系统) |
隔离性 | 进程级别 | 系统级别 |
封装程度 | 只打包项目代码和依赖关系,共享宿主机内核 | 完整的操作系统,与宿主机隔离 |
操作系统 | 主要支持Linux | 几乎所有 |
二、Docker的底层原理
Docker使用一种称为namespaces提供容器的隔离工作区的技术。运行容器时,Docker会为该容器创建一 组名称空间。
这些名称空间提供一层隔离。容器的每个方面都在单独的名称空间中运行,并且其访问仅限于该名称空间。
通过Linux中内核态的管理模块 cgroups (Control groups) 控制组 与 n