虚拟化技术docker

Docker 简介

Docker 最初在 Ubuntu 12.04 上开发,使用Go语言实现。

它基于 Linux 内核的 cgroup,namespace,以及AUFS 类的 Union FS 等技术,对进程进行封装隔离,属于 操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器

Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,简化了容器的创建和使用。

 

Docker 与传统虚拟化

Docker 和传统虚拟化方式的不同:

  • 传统虚拟机技术:例如virtualbox ,先虚拟出一套硬件,然后在其上运行一个操作系统,在该系统上再运行所需应用进程;一个进程可能只占用10多MB,但是操作系统就占了10多GB。
  • 而容器内的应用进程直接运行于宿主的内核,与其他容器共享该内核。在具备虚拟机的隔离优越性的同时更为轻便。

Docker 优点:

  • 资源利用率更高:没有硬件虚拟化和操作系统的开销,docker在运行速度、内存、文件存储上更有优势,相比传统vm,一个机器可以运行更多应用。
  • 启动更快:docker直接运行与宿主内核,无需启动完整系统,可做到毫秒级启动,节约了开发、部署的时间。
  • 环境统一:Docker 的镜像提供了除内核外完整的运行时环境,避免了环境配置的麻烦还有不一致的问题。只维护一个环境即可。随之而来的好处就是方便应用在不同平台的迁移,还有就是基于基础镜像来做功能拓展变得更简单。

 

Docker基本概念

  • 镜像(Image
  • 容器(Container
  • 仓库(Repository

Docker 镜像

根文件系统

        是Linux内核启动时所mount的第一个文件系统,内核代码映像文件保存在根文件系统中,而系统引导启动程序会在根文件系统挂载之后从中把一些基本的初始化脚本和服务等加载到内存中去运行。

 Docker 镜像(Image)相当于一个根文件系统。它提供了容器运行时所需的程序、库、资源、配置,还有运行时的一些参数(如匿名卷、环境变量、用户等)。镜像的内容在构建后不可改变(改变只能重新打包一个镜像)

分层存储

因为根文件系统往往很庞大,所以Docker采用了Union FS技术,讲文件系统设计为分层架构。

镜像的构建按层进行,后续层依赖于前面的层。一层构建完无法更改,因此在一层构建完之前,要将不必要的内容清理掉。

因为这种分层架构与层层间依赖的特征,镜像的复用、定制变得更容易,新的镜像可以通过在已有镜像上添加新层来构建。

 

Docker 容器

容器是镜像运行的实体(镜像是静态定义),可以被创建、启动、停止、删除、暂停等。

容器运行于自己独立的命名空间,有自己的根文件系统、网络配置、进程空间、甚至用户 ID 空间。

容器的进程运行于一个独立于宿主系统的环境,这使得容器封装的应用更加安全。

容器的运行是以它的镜像为基础,在其上创建一个存储层,为容器的读写而准备,称为“容器存储层”。

“容器存储层”生命周期与容器一致,其中保存的数据随容器删除而丢失。

若要保留修改的数据,应该使用“数据卷”或绑定宿主目录,这些位置的读写是直接对宿主机读写,能够在容器删除后保存下来。

 

Docker 仓库

Docker Registry

Docker Registry提供集中存储、分发镜像的服务,方便在其他服务器使用构建好的镜像。

一个 Docker Registry 中可以包含多个仓库Repository);每个仓库可以包含多个标签Tag);每个标签对应一个镜像。

若一个仓库包含一种软件,则标签就是软件的版本,<仓库名:标签> 确定了哪个软件的哪个版本,例如Ubuntu:18.04。若不给出标签,则默认为latest,如Ubuntu:latest。

仓库名经常以 两段式路径 形式出现,比如 jwilder/nginx-proxy,前者往往意味着 Docker Registry 多用户环境下的用户名,后者则往往是对应的软件名。

Docker Registry 公开服务

是开放给用户使用、允许用户管理镜像的服务

允许用户免费上传、下载公开镜像,并提供收费服务供用户管理私有镜像

最常使用的 Registry 公开服务是官方的 Docker Hub,这也是默认的 Registry

在国内访问这些服务可能会比较慢。国内的一些云服务商提供了针对 Docker Hub 的镜像服务(Registry Mirror),这些镜像服务被称为加速器。常见的有 阿里云加速器、DaoCloud 加速器 等

私有 Docker Registry

除了使用公开服务外,用户还可以在本地搭建私有 Docker Registry。

 

参考:

《docker 从入门到实践》

 

 

你可能感兴趣的:(docker)