什么是Docker
Docker使用Go语言开发,基于Linux内核的cgroup,namespace,以及AUFS类的Union FS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。
传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整的操作系统,在操作系统上运行相应的进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核。因此容器要比传统虚拟机更为轻便。
对比传统虚拟机
特性 | 容器 | 虚拟机 |
---|---|---|
启动 | 秒级 | 分钟级 |
硬盘使用 | 一般为 MB | 一般为 GB |
性能 | 接近原生 | 弱于 |
系统支持量 | 单机支持上千个容器 | 一般几十个 |
基本概念
-
镜像(Image)
-
容器(Container)
-
仓库(Repository)
Docker 镜像
操作系统分为内核和用户控件。Docker镜像就相当一个root
文件系统。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
分层存储
利用Union FS
技术,将镜像设计为分层存储的架构。镜像是一个虚拟的概念,实际提现并非由一个文件组成,而是由一组文件系统组成,即由多层文件系统联合组成。
镜像构建时,会一层一层进行构建,前一层是后一层的基础,任何一层的改变只会发生在自己这一层
Docker 容器
镜像和容器,就像面向对象程序设计中的“类”和“实体”,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、暂停、停止、删除等。
容器的实质是进程,容器进程运行于属于自己的独立的命名空间
。容器可以拥有自己的root
文件系统、网络配置、进程空间
,甚至自己的用户ID空间。
Docker Registry
一个Docker Registry
中可以包含多个仓库(Repository
);每个仓库可以包含多个标签(Tag
);每个标签对应一个镜像。