问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Docker基础入门:本质、性质、架构与核心组件详解

创作时间:
作者:
@小白创作中心

Docker基础入门:本质、性质、架构与核心组件详解

引用
CSDN
1.
https://blog.csdn.net/Dreaming_TI/article/details/144561133

Docker 本质

Docker本质上类似于LXC(Linux Container,一种Linux下的虚拟化解决方案),但它本身并不是容器,而是容器的易用工具。容器技术源自于Linux内核,Docker的主要作用是将这一技术进行普及和简化。早期版本的Docker实际上是LXC的二次封装和发行。

作为容器技术的实现,Docker是一个基于Go语言开发的开源项目,其核心目标是“Build, Ship and Run Any APP, Anywhere”。简单来说,Docker通过对应用组件的封装、分发、部署和运行等生命周期的管理,帮助用户实现“一次封装,到处运行”的目标。

在早期,Docker使用LXC作为容器管理引擎,但它对容器创建过程进行了改进。Docker不再通过模板去安装容器,而是采用镜像技术。镜像文件将操作系统用户空间所需的所有组件预先编排并打包成一个文件(即镜像)。这些镜像文件集中存储在镜像仓库中。当需要创建容器时,Docker会调用LXC的工具lxc-create,但是不再通过LXC模板安装,而是连接到镜像仓库,下载匹配的镜像文件,并基于镜像启动容器。因此,Docker极大地简化了容器的使用过程。用户创建和启动容器时,只需使用简单的命令:docker run启动容器,docker stop停止容器。

Docker 的引擎迭代

Docker在早期是基于LXC容器管理引擎实现的,但随着技术的逐步成熟,Docker自行开发了一个新的容器引擎,名为libcontainer。随后,随着CNCF(Cloud Native Computing Foundation)的介入,Docker又研发了一个符合工业化标准的容器引擎——runC。目前,最新版的Docker已经采用了runC作为其默认的容器引擎。

Docker 和虚拟机的区别

对比项
传统虚拟机
Docker 容器
磁盘占用
几个GB到几十个GB
几十MB到几百MB
CPU/内存占用
虚拟操作系统非常占用CPU和内存,需要通过虚拟层调用,占用率高
Docker引擎占用资源极低,直接作用于硬件资源,占用少
启动速度
几分钟(从开机到运行项目)
几秒(从开启容器到运行项目)
安装/管理
需要专门的运维技术
安装、管理方便,应用部署
部署
手动部署,速度慢
体系化部署,可以自动化,速度快
隔离性
系统级别(每个虚拟机有独立的操作系统)
进程级别(共享宿主机操作系统内核)
封装程度
打包整个操作系统
打包项目代码和依赖信息

从上图可以看出:Docker相比虚拟机具有更少的抽象层。Docker不依赖Hypervisor进行硬件资源虚拟化,容器中的程序直接访问宿主机的物理硬件资源。因此,在CPU和内存的利用率上,Docker显著优于虚拟机,具备更高的效率。Docker使用的是宿主机的内核,而不需要独立的Guest OS,这也节省了操作系统所占用的资源。当创建Docker容器时,不需要像虚拟机那样重新加载操作系统内核。这样避免了加载和启动操作系统内核时所消耗的时间和资源。当创建一个虚拟机时,虚拟机管理软件需要加载Guest OS,整个过程通常需要几分钟;而创建Docker容器则只需几秒钟。

Docker 和 JVM 虚拟化的区别

对比项
JVM
Docker 容器
性能
JVM需要占用一定的CPU和内存
基本没有损失
虚拟层面
基于JVM虚拟机,属于更高层的虚拟化
基于操作系统,更加通用,不依赖特定代码
代码无关性
一个特定代码的执行平台,运行时才存在,只能支撑特定代码的执行,并且必须在JVM进程中
模拟了整个操作系统,是静态存在的,可以支撑任何相同平台的应用程序
主机隔离性
JVM不隔离主机
通过命名空间实现隔离

Docker 版本

1. LXC (Linux Containers)

LXC是最早的Linux容器技术,Docker早期版本使用LXC来实现容器的底层功能。虽然使用者较少,但LXC仍在持续发展中。

2. libcontainer

从Docker 0.9版本开始,Docker开发了libcontainer,作为LXC的替代方案。在Docker 1.10版本中,完全移除了LXC支持,并在1.11版本中将libcontainer拆分成runc,后者成为容器的标准。

3. Moby

Moby是Docker推出的开源项目,核心组件就是moby。moby是Docker引擎(dockerd)使用的开源项目,现已从moby仓库fork并使用containerd作为运行时标准。

官方网站

4. docker-ce

Docker的开源版本,CE代表Community Edition(社区版)。docker-ce的组件来源于moby和containerd等开源项目。

定价页面

5. docker-ee

Docker的收费版本,EE代表Enterprise Edition(企业版)。与docker-ce相同,但添加了企业级功能和支持。

定价页面

总结:

  • LXC:早期的容器技术,现已被Docker替代。
  • libcontainer:Docker自主开发的容器实现,后与runc合并。
  • Moby:Docker开源项目,包含Docker引擎的核心。
  • docker-ce:Docker开源社区版。
  • docker-ee:Docker企业收费版,提供额外的企业级功能。

Docker 架构

Docker使用客户端-服务器(C/S)架构模式,使用远程API来管理和创建Docker容器。Docker容器通过Docker镜像来创建。

1. Docker 仓库 (Registry)

Docker仓库用于存储和管理Docker镜像。可以类比为代码仓库(如Git)。

  • 公共仓库:例如Docker Hub,提供了丰富的公共镜像供用户使用,如Nginx、MySQL、Redis等。
  • 私有仓库:企业或个人可以搭建私有仓库(如Docker Registry)来存储私有镜像,确保数据的安全性和定制化。
  • 功能:仓库支持镜像的推送(push)和拉取(pull),并且可以管理不同版本的镜像。

2. Docker 守护进程 (Daemon)

Docker守护进程是运行在后台的服务,负责管理Docker容器的生命周期(包括容器的创建、运行、停止等)。它通常也被称为Docker Daemon,负责:

  • 启动和停止容器
  • 构建、拉取和推送镜像
  • 处理Docker客户端的请求
  • 管理网络和存储等资源
  • 通常,守护进程通过dockerd启动。

3. Docker 客户端 (Client)

Docker客户端是与Docker守护进程通信的接口,用户可以通过客户端与Docker守护进程交互,发送命令(如docker run、docker build等)。客户端主要通过以下方式进行通信:

  • 命令行接口(CLI):最常见的方式,用户通过命令行与Docker守护进程交互。
  • REST API:开发者可以通过Docker提供的API进行集成和自动化管理。

4. Docker 主机 (Host)

Docker主机是指运行Docker守护进程和容器的物理机或虚拟机。Docker主机负责:

  • 执行容器的运行时环境
  • 提供计算资源(CPU、内存等)
  • 执行网络和存储管理等功能
  • 在单主机上运行多个容器,多个主机可以通过Docker Swarm或Kubernetes集群进行管理。

5. Docker 镜像 (Images)

Docker镜像是容器的构建模板,包含运行某个应用所需要的操作系统环境、依赖库、应用程序代码等。镜像具有以下特点:

  • 只读:镜像本身是不可修改的,一旦构建完成,它就保持不变。
  • 分层存储:每个镜像由多个层组成,每一层都包含一些更改。Docker镜像利用联合文件系统来实现这一点,这样可以有效地减少存储空间的浪费。
  • 构建和定制:用户可以使用Dockerfile来定义镜像的构建过程,包括安装软件、配置环境等。

6. Docker 容器 (Container)

Docker容器是由Docker镜像创建的运行实例,是应用程序和服务的封装体。容器在隔离环境中运行,具有以下特点:

  • 轻量级:容器共享主机的操作系统内核,因此比虚拟机更节省资源。
  • 可移植性:容器内部的应用与其依赖环境封装在一起,可以在不同的主机上运行,保证一致性。
  • 短暂性:容器可以快速启动、停止和销毁,支持弹性扩展。
  • 隔离性:容器在操作系统级别提供进程和文件系统的隔离,使得不同的容器能够相互独立运行,避免冲突。

补充组件

除了基本的架构组成,Docker生态系统还包括以下相关组件:

  • Docker Compose:用于定义和运行多容器应用的工具。通过一个YAML文件,用户可以定义多个服务,并使用单个命令来启动或停止整个应用。
  • Docker Swarm:Docker原生的集群管理工具,支持容器的集群部署、负载均衡、自动伸缩等功能。
  • Kubernetes:容器编排工具,是一种跨平台的解决方案,支持高效管理容器的部署、扩展和管理。
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号