Docker 笔记

Docker 笔记

什么是docker的本质?

虚拟化技术

虚拟化技术的本质在于对计算机系统软硬件资源的划分和抽象。计算机系统通过各种层次的抽象来隐藏底层的细节而对上层提供统一的接口,虚拟化可以在每个抽象层来实现。无论是在哪个抽象层实现,其本质都是一样的,那就是它使用某些手段来管理分配底层资源,并将底层资源反映给上层。实际上,操作系统中就有虚拟化的思想,MMU通过对物理内存的划分和抽象,使得给每个进程呈现出来的都是4G地址空间,令每个进程认为自己独占了整个内存资源,并且对每个进程进行了有效的隔离,使得单个进程的崩溃不会影响到其他进程。

Docker等容器技术属于围绕应用程序(接近进程层面)的虚拟化技术,与传统的虚拟机不同,不需要对整个操作系统进行抽象,因此属于轻量级的虚拟化技术

容器与虚拟机两者虽然都属于虚拟化的技术,目标都是为了将一套应用程序所需的执行环境打包起来,建立一个孤立环境,方便在不同的硬件中移动,但两者的运作思维截然不同。简单来说,常见的传统虚拟化技术如vSphere或Hyper-V是以操作系统为中心,而Container技术则是一种以应用程序为中心的虚拟化技术。

传统虚拟化技术从操作系统层下手,目标是建立一个可以用来执行整套操作系统的沙盒独立执行环境,习惯以虚拟机(Virtual Machine)来称呼。而Container技术则是直接将一个应用程序所需的相关程序代码、函式库、环境配置文件都打包起来建立沙盒执行环境,为了和传统虚拟化技术产生的虚拟机区分,Container技术产生的环境就称为Container。

对比图1 对比图2

虚拟机技术的特点

虚拟机技术是对整个操作系统的抽象,但存在几个问题

  • 资源占用多
  • 冗余步骤多
  • 启动慢

容器技术的特点

由于容器是进程级别的,相比虚拟机有很多优势。

  • 启动快
  • 资源占用少
  • 体积小

Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。

Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。

总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。

Docker 的主要用途,目前有三大类。

  • 提供一次性的环境:比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。
  • 响应式部署和扩展:提供弹性的云服务。因为 Docker 容器可以随开随关,很适合动态扩容和缩容。
  • 组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。