Docker 官网:http://www.docker.com
Docker 中文网站:https://www.docker-cn.com
Docker Hub 官网:https://hub.docker.com


目录

Docker的发展历程

 Docker的概念与特点

Docker的定义

  Docker的优势

 Docker架构

Docker核心组件

Docker核心技术

  Docker的版本分类

 Docker与传统虚拟机的区别

 架构区别

特性比较 


Docker的发展历程

Docker的发展历程可以清晰地划分为以下几个关键阶段:

1. 起源与初创期(2010-2013年)‌

Docker起源于2010年,由DotCloud公司开始研发。这家公司的初衷是解决跨不同云平台部署应用程序的难题。
2013年,DotCloud决定将其核心容器技术开源,并命名为“Docker”。Docker的第一个版本在GitHub上发布后,迅速引起了开发社区的关注。这一时期的Docker,虽然还处于初创阶段,但已经展现了其巨大的潜力。

 2. ‌快速发展与生态系统构建(2014年)‌

2014年,Docker公司正式成立,专注于Docker项目的开发和支持。同年,Docker 1.0正式发布,这标志着Docker产品进入了生产就绪状态,开始被越来越多的企业所接受和使用。
随着Docker的普及,其生态系统也开始快速发展。出现了许多围绕Docker的工具和服务,如Docker Compose用于定义和运行多容器Docker应用程序,Docker Machine用于在虚拟主机上安装Docker,以及Docker Hub作为Docker镜像的托管服务。

3. ‌容器编排与标准化(2015-2016年)‌

2015年,Docker引入了Docker Swarm,这是一个内置于Docker引擎的集群管理和编排工具。Docker Swarm允许用户将多个Docker守护进程组织成一个虚拟的Docker主机,用于执行容器化的应用程序。随着容器技术的普及,市场上出现了多种容器编排工具。其中,Kubernetes因其强大的功能和社区支持而逐渐成为市场领导者。尽管Docker Swarm也是一款强大的工具,但在与Kubernetes的竞争中逐渐失去了市场份额。
2016年,Docker公司推出了Docker for Mac和Docker for Windows,这使得容器技术更易于在个人电脑上使用。这些产品的推出,进一步推动了Docker的普及和发展。同时,Docker与多家厂商共同成立了开放容器项目OCP(后更名为OCI),旨在实现容器技术的标准化。OCI的成立,为容器技术的长期发展奠定了坚实的基础。

4. ‌商业化与云原生计算(2017年至今)‌

2017年,Docker公司宣布将Docker的核心组件捐赠给云原生计算基金会(CNCF),并继续支持开源社区。这一举措表明了Docker公司对开源社区的承诺和支持。Docker继续发展其商业版容器及服务平台,并推出了Docker Enterprise Edition(EE),以满足企业市场的需求。Docker EE提供了更强大的功能和更高的安全性,适用于大型企业级应用。
随着云原生计算的普及,Docker作为容器技术的先驱,其影响力依然深远。尽管Kubernetes成为了容器编排的事实标准,但Docker仍然是最受欢迎的容器运行时之一,并广泛用于开发、测试和部署应用程序。Docker的灵活性和易用性使其成为了许多开发者和企业的首选工具。
综上所述,Docker的发展历程充满了创新和变革。从最初的起源与初创期到如今的商业化与云原生计算时代,Docker一直在不断推动容器技术的发展和普及。
 

 Docker的概念与特点

  • Docker的定义

       Docker 是以Docker容器为资源分割和调度的基本单位,封装整个软件运行时环境,为开发者和系统管理员设计,用于构建、发布和运行分布式应用的平台。它是一个跨平台、可移植且简单易用的容器解决方案。Docker的源代码托管在GitHub上,基于Go语言开发,并遵从Apache 2.0 协议。Docker 可在容器内部快速自动化地部署应用,并通过操作系统内核技术( namespace、CGroups 等)为容器提供资源隔离与安全保障。

  •   Docker的优势

1‌、标准化环境‌:
Docker通过容器技术封装应用程序及其依赖(如库、配置文件、运行时环境等),确保应用程序在任何环境中都能以一致的方式运行,提升了软件的可移植性和可靠性。

2‌、快速部署与启动‌:

Docker容器相比传统虚拟机启动速度快得多,可以在几秒钟内创建、启动或停止容器。这种即时性极大地缩短了应用程序从开发到部署的周期,促进了敏捷开发和DevOps流程。

‌3、资源高效利用‌:

容器共享主机内核,相比于全虚拟化技术,容器占用的系统资源更少。一个主机可以运行多个容器,显著提升服务器利用率,降低硬件成本。

‌4、可移植性‌:

Docker镜像是一种轻量级、可移植的软件包,可以在任何支持Docker的平台上运行,这使得应用程序可以在本地开发、云环境、不同操作系统之间无缝迁移,实现了“一次构建,到处运行”。

5‌、环境隔离‌:

容器为应用程序提供了隔离的运行环境,各容器间互不影响,即使应用程序有冲突的依赖或者不同的配置需求,也能在同一台主机上稳定共存。

‌6、简化配置与管理‌:

Docker通过将应用及其依赖打包成单一单元,简化了应用程序的配置和管理。
Dockerfile和Compose文件等工具允许以声明式方式定义容器配置,便于版本控制、自动化构建和部署。

7‌、持续集成与持续部署(CI/CD)‌:

Docker与CI/CD工具无缝集成,简化了自动化测试、构建和发布流程。
容器化的应用可以作为独立的部署单元,易于版本控制和回滚,加速了软件迭代速度。

8‌、微服务架构支持‌:

Docker非常适合构建和管理微服务架构,每个服务可以封装在独立的容器中,易于扩展、升级和替换。容器的轻量级特性使得微服务架构的部署和运维更为灵活和高效。

9‌、安全性增强‌:

Docker通过限制容器对主机系统的访问权限,提供了额外的安全层。每个容器有自己的用户命名空间、控制组(cgroups)和安全上下文,有助于防止容器间或容器与主机间的潜在安全风险

 Docker架构

       

       Docker采用客户端/服务器( Client/Server, C/S)架构模式。Docker Daemon作为服务器端接收客户端的请求,负责构建、运行和分发容器。客户端和服务器端可以运行在同一个Host上,客户端也可以通过Socket 或REST API 与远程的服务器端通信。

       Docker Daemon可以守护进程在宿主机后台运行,用户并不直接与其进行交互,而是通过Docker Client 间接和其通信。Docker Client 以系统命令的形式存在,用户使用Docker命令来与Docker Daemon 交互。Docker Daemon 接收用户指令并与Docker共同守护进程通信。

Docker核心组件

  • Docker 客户端(Client):用户与 Docker 交互的主要方式,通过命令行或其他工具使用 Docker API 与 Docker 守护进程通信。

  • Docker 守护进程(Daemon):Docker Daemon是服务器组件,负责构建、运行和分发 Docker 容器的后台服务,以Linux后台服务的方式运行。

  • Docker 镜像(Image):是Docker 容器的基础,一个只读的模版,包含了运行容器所需的所有信息,包括文件系统、元数据、配置等。

  • Docker 容器(Container):从镜像启动的实例,可以运行应用。容器是一个隔离的环境,多个环境之间不会相互影响,以保证容器中的应用运行在一个相对安全的环境中。

  • Docker 仓库(Registry):存储 Docker 镜像的地方,分为公有仓库和私有仓库,目前最大的公有仓库是Docker Hub。

Docker核心技术

1、命名空间(NameSpace)

       Linux 的命名空间提供了一种隔离机制,使得不同的进程组可以看到不同的文件系统、网络接口等。Docker 使用多种类型的命名空间来隔离容器:

  • PID Namespace:进程隔离。

  • Network Namespace:网络隔离。

  • Mount Namespace:挂载点隔离,使得容器有自己的根文件系统。

  • UTS Namespace:主机名和域名隔离。

  • IPC Namespace:进程间通信(IPC)隔离。

  • User Namespace:用户和组隔离。

2、控制组(Cgroups)

      Cgroups 限制、记录和隔离进程组使用的物理资源(CPU、内存、磁盘 I/O 等)。Docker 使用 cgroups 来限制每个容器的资源使用,如 CPU 时间、内存等。

  • 功能:

     (1)Resource limitation: 限制资源使用。比如内存使用上限以及文件系统的缓存限制;

     (2)Prioritization: 优先级分配。比如:CPU利用和磁盘IO吞吐,实际上相当于控制任务运行优先级;

     (3)Accounting:资源统计。 一些审计或一些统计,如cpu时长,内存用量等,主要目的是为了计费;

     (4)Control: 任务控制。对任务进行执行挂起,恢复等操作。

  • 子系统分类:

       在/sys/fs下有一个cgroup的目录,这个目录下还有很多子目录,比如: cpu,cpuset,memory,blkio……这些,这些都是cgroup的子系统。control group子系统有:

    (1)blkio — 这个子系统为块设备设定输入/输出限制,比如物理设备(磁盘,固态硬盘,USB 等等)。

    (2)cpu — 这个子系统使用调度程序提供对CPU的cgroup 任务访问。

    (3)cpuacct — 这个子系统自动生成cgroup 中任务所使用的CPU报告。

    (4)cpuset — 这个子系统为cgroup 中的任务分配独立 CPU(在多核系统)和内存节点。

    (5)devices — 这个子系统可允许或者拒绝cgroup 中的任务访问设备。

    (6)freezer — 这个子系统挂起或者恢复cgroup 中的任务。

    (7)memory — 这个子系统设定cgroup 中任务使用的内存限制,并自动生成内存资源使用报告。 

    (8)net_cls — 这个子系统使用等级识别符(classid)标记网络数据包,可允许 Linux 流量控制程序(tc)识别从具体cgroup 中生成的数据包。

    (9)net_prio — 这个子系统用来设计网络流量的优先级。

    (10)hugetlb — 这个子系统主要针对于HugeTLB系统进行限制,这是一个大页文件系统。

3、联合文件系统(Union File Systems)

       Docker 使用联合文件系统(如 AUFS, OverlayFS, Btrfs 等)实现镜像的分层存储,使得容器的创建和启动更加高效,并且减少了存储空间的占用。

  Docker的版本分类

        Docker的早期版本是docker-io,版本号是1.*, 最新版是1.13。 Docker 从1.13版本之后采用时间线的方式作为版本号,分为DockerCE (社区版)和DockerEE (企业版)。DockerCE (社区版)是免费提供给个人开发者和小型团体使用的,DockerEE (企业版)会提供额外的收费服务,如经过官方测试认证的基础设施、容器、插件等。

        Docker现在的版本格式为<YY.MM>。Docker CE (社区版)按照Stable和Edge两种方式发布,每个季度更新Stable版本,每个月份更新Edge版本。例如,使用基于月份的发行版本,19.03 的第1版就指向17.03.0,如果有漏洞/安全修复需要发布,那么将会指向19.03.1等。

 Docker与传统虚拟机的区别

  •  架构区别

容器架构

传统虚拟机架构

  • 特性比较 

特性 Docker容器技术   传统虚拟机技术
启动速度 秒级启动(直接运行在宿主机内核上)。 分钟级启动(需启动完整的 Guest OS)。
性能 接近原生(无虚拟化层开销) 较弱(有 Hypervisor 虚拟化层开销,性能略低于原生)
基础架构 基于容器化技术,共享宿主机的操作系统内核。 基于 Hypervisor(如 VMware ESXi)虚拟化硬件,每个虚拟机包含完整的 Guest OS。
资源占用 轻量级,仅包含应用及依赖库,共享内核,资源消耗低。 重量级,需为每个虚拟机分配独立资源(CPU、内存、磁盘),包含完整 OS,资源消耗高。
镜像体积 镜像小(通常为 MB ),仅包含应用和运行环境 镜像大(通常为 GB ),包含完整 OS 和虚拟硬件。
迁移性 优秀 一般
适用场景 微服务、云原生应用、CI/CD 流水线、高密度部署。 传统单体应用、需要强隔离的环境(如不同 OS)、物理资源丰富的场景。
资源利用率 高(多个容器共享宿主机资源)。 低(每个虚拟机独占分配的资源)。
安全性 共享内核存在安全风险(内核漏洞可能影响所有容器)。 强隔离性(虚拟机之间互不影响)。
内存代价 很小 较多
隔离性 安全隔离 完全隔离
运行密度 单机支持上千个容器 单机仅支持几十个容器
跨平台支持 依赖宿主机内核,Linux 容器无法直接在 Windows 运行(需使用 Linux 虚拟机或 WSL)。 支持跨平台(如 Windows 宿主机运行 Linux 虚拟机)

Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐