Docker的基本概念

一、什么是Docker

  • Docker是使用google公司推出的GO语言进行开发实现,于 Linux 内核的 cgroup,namespace,以及 AUFS 类的 Union FS 等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术,由于隔离的进程独立于宿主和其他隔离的进程,因此称为容器。

  • Docker在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护,使得Docker比虚拟技术更为轻便、快捷。

 

二、Docker与VMware

2.1、Docker与VMware的区别

image

  • Docker利用的是宿主机的内核进行容器的资源分配(直接调用硬件资源),隔离的是进程,VMware是在宿主机上虚拟底层硬件环境,通过创建操作系统实现隔离。
  • Docker由于没有臃肿的操作系统,启动速度比VMware很多
  • Docker的隔离性比VMware差
  • Docker的资源利用比VMware大很多,VMware由于是直接虚拟操作系统,而创建时需要分配资源,相同的硬件环境Docker创建的容器及资源的利用率要比VMware多。
特性 容器 虚拟机
启动 秒级 分钟级
硬盘使用 一般为 MB 一般为 GB
性能 接近原生 弱于
系统支持量 单机支持上千个容器 一般几十个

 

2.2、Docker的优点(为什么使用Docker)

  • 更高效的利用系统资源
    • 不需要虚拟硬件及运行完整的操作系统等开销
  • 更快速的启动时间
    • 直接依赖于宿主内核,无需启动操作系统,运行速度达到毫秒或秒级
  • 一致的运行环境
    • 可提高一致的开发、测试、生产环境
  • 持续集成、交付和部署
    • 开发人员可以通过Dockerfile来进行镜像构建,并结合 持续集成(Continuous Integration) 系统进行集成测试,而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合持续部署(Continuous Delivery/Deployment) 系统进行自动部署
  • 更轻松的迁移
    • Docker确保了运行环境的一致性,在不同平台上都能得到相同的运行结果,故其迁移十分便捷。
  • 更轻松的维护和扩展

 

三、Docker的三大基本概念

  • 镜像(Image):一个特殊的文件系统(类)

    • 操作系统分为内核用户空间,操作系统启动后,会挂载root文件系统为其提供用户空间支持,而Docker(Image),就相当于一个root文件系统。
    • Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。 镜像不包含任何动态数据,其内容在构建之后也不会被改变。
    • 镜像采用分层存储的架构(便于复用、定制,类似于继承),实际有多层文件系统联合组成。镜像在构建时,会一层一层的构建,前一层是后一层的基础,每一层构建后就不再改变,后一层的改变只发生在这一层(即删除上一层只是在本层进行标识)
  • 容器(Container):镜像运行时的实体(实例)

    • 容器与镜像的关系如同OOP中的类与实例一样,镜像是静态的定义,容器是运行时的实体,可以被创建、启动、停止、运行和暂停等。
    • 容器的实质是进程,但与直接在宿主执行的进程不同,其拥有独立的命名空间,而且使用的也是分层存储。
    • 容器的存储层的生命周期和容器一样,容器消亡时其存储层也随之消亡,即存储层的数据都会随着容器的删除而丢失,因此对于文件的写入操作,都应该用数据卷(Volume)、或者绑定宿主目录,这些操作会跳转存储层直接对宿主进行读写,其性能和稳定性更高,容器删除后也不会消失,容器的存储层应保持无状态。
  • 仓库(Repository):集中存放镜像文件的地方(代码管理)

    • 镜像构建完后,可以很容易的在本地宿主运行,但是如果要在其他服务器上使用镜像,我们就需要一个集中处理、分发镜像的服务,Docker Registry就是这样的服务。
    • 一个 Docker Registry中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像,镜像仓库是用来集中存放镜像仓库的地方,类似与代码仓库。
    • 通常一个仓库会包含同一软件不同版本的镜像,标签通常就对应软件的各个版本,可以通过<仓库名>:<标签>来指定哪个版本的镜像,没有指定标签的话就默认latest
    • 常见的镜像仓库服务:
      • https://hub.docker.com/
      • 时速云:https://hub.tenxcloud.com/
      • 网易云:https://www.163yun.com/product/repo
      • 阿里云:https://www.aliyun.com/product/containerservice?utm_content=se_1292836

 

四、Build、Ship、Run

Docker的运行过程

  • Docker将镜像仓库的镜像拉取到本地,从而运行为一个个容器,故Docker常被称为码头工人,主要包括以下三步:
    • Build(构建镜像):镜像就像集装箱,包括运行环境、文件、资源等
    • Ship(运输镜像):主机和仓库间运行,仓库就如同超级码头
    • Run(运行镜像):运行的镜像就是容器,容器是程序运行的地方

 

五、参考