Docker概述

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 虚拟机)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@t.t.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值