docker简介

docker简介

说docker就要先提一下虚拟化的概念。
我们都知道虚拟化技术可以根据架构分成两类:1型虚拟化和2型虚拟化,其中1型虚拟化是直接在物理机上安装hypervisor,虚拟机在hypervisor上运行,2型虚拟化是在物理机上先安装一个操作系统,再在操作系统上作为一个程序安装hypervisor。

而docker或者说容器,与这两者都不同,而是以进程的形式存在于操作系统中。

容器(container-based)是一种虚拟化方案,其充分利用操作系统本身已有的机制和特性来实现轻量级的虚拟化,因此有人把它称为新一代的虚拟化技术。至于docker,因为其使用太过广泛,功能太过强大,导致人们提到容器就想到docker,其实docker只是容器的一种。

docker底层依赖的核心技术

docker底层是依赖于一些Linux的核心技术实现的,主要有:

  • 命名空间,也就是我们常说的Namespace
  • 控制组,Control Groups
  • 联合文件系统,Union File System
  • Linux虚拟网络支持,为本地和容器内创建虚拟接口

Namespace

容器借助Linux namespace实现了容器间的空间隔离。
Linux最早是在2002年的 2.4.19版本为内核加入了namespace的特性,它的主要作用是做了一层抽象和隔离,使得在namespace中的进程和进程组看起来可以拥有自己的独立资源,当然具体的资源表现形式取决于给它赋予了哪些namespace。
随着2013年Linux 3,8中user namespace的引入,容器技术中用到的全部namespace都实现了。

具体来说,每个容器都拥有自己独立的命名空间,运行在容器中的应用就好像运行在独立的操作系统中。
对于进程的命名空间来说,由namespace管理进程号,每个命名空间内都有自己的一套进程管理方法,进程的命名空间是一个类似父子关系的结构,子空间里的进程对于父空间是可见的,但是子空间内看不见父空间的进程。
对于网络的命名空间来说,有了进程的命名空间,每个名字中的进程就可以相互隔离,但是网络接口还是共享本地的端口。所以,网络命名空间就是为进程提供一个完全独立的网络协议栈的视图,其中包括:网络设备接口、IPv4和IPv6协议栈、IP路由表、防火墙规则等

我们可以通过三个系统调用来直接对namespace进行操作,这三个系统调用分别是:

  • clone:可以通过传递不同namespace的标志来为新的进程指定所属的namespace
  • unshare:允许一个进程取消当前与其他进程共享的执行上下文
  • setns:进入文件描述符指定的namespace

举个例子

unshare -fp --mount-proc -n
ps
   PID TTY          TIME CMD
     1 pts/1    00:00:00 bash
    16 pts/1    00:00:00 ps

我们当前所在进程的 PID 为 1 并且看不到宿主机上的其他进程,达到了基础的隔离效果。

Control Groups

控制组(Control Groups)简称cgroups,是Linux内核的一个特性,主要用来对共享资源进行隔离、限制、审计。cgroups可以对进程或进程组指定分配CPU时间、分配内存和I/O带宽。

容器通过cgroups来对资源进行分配和使用,容器所获得的资源只是系统资源的一部分。cgroups主要从以下几点来限制容器资源使用:

  • 资源限制:内存子系统为进程组设置内存使用上限,内存到达上限后无法再申请内存
  • 优先级:通过优先级让一些组得到更多CPU资源
  • 资源审计:用来统计系统实际上把多少资源用在适当的目的上,可以使用cpuacct子系统记录某个进程组使用的CPU时间
  • 隔离:为组隔离命名空间,这样一个组不会看到其他组的进程、网络连接和文件系统
  • 控制:实现挂起、恢复和启动等操作

Union File System

联合文件系统(Union File System),轻量级的高性能分层文件系统,支持将文件系统中的修改信息作为一次提交,可以层层叠加;还可以将不同目录挂载到同一个虚拟文件系统下。

docker的特点

优点

  • 启动速度快,资源占用小,能够快速搭建标准化的运行环境
  • 创建分布式应用程序时快速交付和部署,更轻松地迁移和扩展,更简单的更新管理

缺点

  • docker基于64bit的Linux,无法在其他系统中使用
  • 隔离性有所欠缺,所有容器公用一部分的运行库
  • 对硬盘的管理有限
  • 容器随着用户进程的停止而销毁,容器中的日志等数据不便收集
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值