知名百科 >> Docker >> 历史版本
编辑时间历史版本内容长度图片数目录数修改原因
2024-05-08 10:28 最新历史版本 9568 1 7
  返回词条

Docker

Docker是一个用于开发、发布和运行应用程序的开源应用程序容器引擎。它可以帮助开发者在不同的环境下快速、简单、可移植地开发应用程序。Docker最初由Docker公司开发,于2013年发布。Docker是基于流程容器的轻量级虚拟容器解决方案,构建于LXC(Linux容器)之上。Docker使开发人员能够将他们的应用程序和依赖包打包到一个可移植的容器中,然后发布到任何流行的Linux或Windows机器上。与传统虚拟机相比,Docker具有重量轻、性能高、启动速度快、资源占用少、可移植性好等优点。

目录

发展历史

起源阶段

(2008-2013年)

2008年,所罗门·海克斯(Solomon Hykes)、卡迈勒·富纳迪(Kamel Founadi)和塞巴斯蒂安·帕尔(Sebastien Pahl)在巴黎创立了一家名为DotCloud的初创公司,旨在为软件开发者提供云托管服务。在接下来的几年里,Hykes领导了基于容器的工具的开发,以帮助DotCloud加速和扩展其运营。

2013年,Hykes推出了工具Docker,并将其作为开源软件发布,供任何人下载、使用和修改。

2014年,Docker公司发布了Docker 1.0版本,引入了映像和容器的概念,并提供了一整套命令行工具和API。同年3月,亚马逊宣布在其弹性豆茎产品中加入Docker支持。同年6月,Google开放了一个容器节点管理器,根据YAML列表管理一组Docker容器。同年8月,Red Hat发布了运行Docker容器的原型系统Project Atomic。

发展阶段

(2014-2016年)

2015年,Docker推出了Docker Compose和Docker Swarm。Docker Compose用于定义和管理多容器应用程序,而Docker Swarm是Docker的集群管理和编排工具。同年,Docker宣布成立一个新的非营利组织——Docker开放容器倡议(OCI ),以促进Docker的开放标准化和互操作性。OCI不仅包括Docker,还包括红帽、谷歌、IBM等众多知名公司。

2016年,Docker推出了Docker for Mac和Docker for Windows,为开发者提供了在本地环境下运行和测试Docker容器的工具。同年9月,微软在亚特兰大举行的Ignite大会上宣布全面推出Windows Server 2016。Windows 2016推出了容器功能,Windows Server 2016上的容器由Docker支持。

商业化阶段

(2017年至今)

2017年,Docker公司推出Docker企业版(Docker EE),为企业用户提供更加稳定可靠的容器服务。同年10月,在DockerCon EU 2017上,Docker宣布Docker引擎工具将支持Kubernetes。

2020年,Docker发布了Docker CLI的改进版本,引入了实验功能和命令,并提供了更强大、更灵活的命令行界面。

2021年,Docker公司公布了新的产品订阅策略,将产品订阅分为四个等级,分别是个人免费、专业付费版、团队付费版和商务付费版。对于员工超过250人或年收入超过1000万美元的公司,必须使用付费订阅模式。

系统结构

Docker采用客户端-服务器架构,Docker客户端与Docker守护进程通信,完成Docker的功能。客户端用来发送操作指令,守护进程负责构建、运行和分发Docker容器。Docker客户端和守护进程可以运行在同一个系统上,也可以通过网络连接到远程Docker守护进程。客户端和守护进程使用REST API通过UNIX套接字或网络接口进行通信。此外,Docker还提供了Docker Compose作为另一个客户端工具,可以处理由一组容器组成的应用。

Docker守护进程(docker守护进程):Docker daemon,又称Docker引擎,是运行在主机上的后台服务。它负责管理Docker对象(图像、容器、网络等。),接收Docker客户端的命令并执行相应的操作。Docker守护进程中还有一些重要的组件,比如Docker镜像、Docker容器、Docker注册表和数据量。

Docker图像(docker图像):Docker image是一种轻量级和可移植的打包格式,它包含运行应用程序所需的所有文件和配置。Docker映像可以由Dockerfile定义,也可以从Docker Hub等映像库获得。

DockerDocker

Docker容器:Docker容器是一个由Docker镜像启动的运行实例,它包含了应用程序和运行时所需的所有依赖关系。Docker容器是轻量级的,可以随时启动和停止,也有很好的隔离性和可移植性。

Docker registry:Docker registry是一个存储Docker图像的存储库。默认情况下,Docker官方提供了一个公共注册表(Docker Hub),开发者可以从中获取常用图片。此外,您还可以建立一个私人Docker注册表来存储和共享您自己的图像。

Volume:数据量是一种解决容器中持久数据问题的机制。在容器中,当容器被删除时,容器内部生成的需要持久化的数据也会被删除,从而导致数据的丢失。为了解决这个问题,可以使用数据卷将数据持久化到主机,实现容器和主机之间的数据共享。数据卷允许将主机上的目录或文件与容器中的目录进行映射。当容器中的应用程序从容器中的目录读写数据时,相应的操作会同步到主机上的目录,从而实现数据的持久化。例如,对于数据库容器,数据可以存储在主机上的实际磁盘中,以确保数据的持久性。

Docker客户端:Docker客户端是与Docker引擎交互的工具,它通过Docker API与Docker引擎进行通信。Docker客户端可以运行在本地或远程主机上,可以通过命令行界面或Docker API操作Docker引擎。Docker客户端可以与多个Docker引擎通信。

实现原理

Linux下的核心实现原理

Docker使用Linux内核名称空间、控件组和层能力来实现容器技术。名称空间允许Docker隔离每个容器的进程ID和网络等资源。控制组允许Docker限制容器的CPU和内存等计算资源。layer函数允许Docker在容器中构建一个轻量级的镜像系统,该系统由多个层组成。容器运行时环境负责管理每个容器的生命周期,可以根据镜像系统创建和启动容器,停止和删除容器。

Windows下的核心实现原理

在Windows下,Docker使用Hyper-V虚拟化技术作为容器运行时的后端,结合Windows容器技术,实现容器隔离和高效运行。同时,引入计算服务提供的容器管理功能来管理容器。Hyper-V虚拟化技术在Windows中发挥着重要作用。它允许在主机上创建和管理虚拟机,每个虚拟机可以运行独立的操作系统和应用程序。在Windows下,Docker使用Hyper-V作为容器运行时的后端。这意味着Docker容器实际上运行在Hyper-V虚拟机中,每个容器在自己的虚拟机中都有独立的操作系统和文件系统,从而实现隔离和安全。

Windows引入了Windows Server Container技术,这是一种轻量级的虚拟化形式。Windows容器允许多个容器共享同一个操作系统内核,但是在用户空间中提供隔离。这种轻量级虚拟化技术使得容器的启动和操作更加高效和快速。Windows容器可以提供与主机相同的API和文件系统视图,这样容器化的应用程序就可以在Windows环境中无缝运行。

计算服务是Windows提供的一个组件,用于管理容器的生命周期。它抽象了Windows操作系统提供的底层功能,如名称空间、控件组和容器运行时。计算服务为管理操作(如创建、启动、停止和删除容器)提供了一个通用界面。它与Docker引擎和其他容器管理组件通信,以提供容器管理功能。

生态系统

Docker是一个强大的容器化平台,它不仅是一种容器技术,还是一个生态系统,包括许多相关的工具和服务,使Docker容器更容易使用和扩展。以下是Docker生态系统的一些主要组件和工具。

Docker Hub:Docker Hub是Docker的官方图片仓库,也是全球最大的容器图片库,开发者可以从中获取所需图片。Docker Hub还提供自动建造服务和私有仓库等功能。

Docker撰写:Docker Compose是一个部署工具,可以通过一个配置文件定义和运行多个Docker容器。使用Docker Compose,您可以快速构建和启动复杂的多容器应用程序,如Web应用程序和数据库应用程序。

Docker Swarm:Docker Swarm是Docker官方的集群管理工具,可以集群多个Docker主机,实现容器的高可用性和负载均衡。Docker Swarm还提供内置的服务发现和容器编排功能,可以轻松管理和扩展容器应用。

Docker Machine:Docker Machine是一款管理工具,通过它你可以在本地或云平台上快速创建和管理Docker主机。使用Docker Machine可以简化部署和管理Docker容器集群的过程,在开发和测试环境中使用Docker也很方便。

优点缺点

优势

简化开发生命周期:快速一致地交付应用程序:使用Docker容器,开发人员可以在标准化的环境中工作并快速交付应用程序。容器提供了一个隔离的运行环境,以确保应用程序在不同的开发环境中具有一致的行为。这简化了开发过程,并使持续集成和持续交付(CI/CD)工作流更加顺畅。

简化开发和测试过程:开发人员可以在本地编写代码,并使用Docker容器与团队成员共享他们的工作。使用Docker,他们可以轻松地将应用程序推入测试环境,进行自动化和手动测试。当发现问题时,开发人员可以在开发环境中修复bug,并将其重新部署到测试环境中进行验证。

简化生产环境的部署:一旦测试完成并通过验证,使用Docker将更新后的映像推送到生产环境就非常简单了。这使得修复问题和部署更新变得快速可靠,并减少了生产环境中的停机时间。

快速部署和扩展:Docker基于容器的平台具有很高的可移植性,可以运行在各种环境中,比如开发者的本地机器、数据中心和云服务提供商。这使得动态管理工作负载变得非常容易,并且可以根据业务需求实时扩展或拆除应用和服务。

在相同硬件上运行更多工作负载:Docker的轻量级和高效率使得在相同的硬件上运行更多的工作负载成为可能。与传统的基于虚拟机管理程序的虚拟机相比,Docker提供了更加经济高效的解决方案,可以在相同的服务器容量下实现更多的业务目标,适用于高密度环境和中小型部署。

劣势

安全问题:集装箱技术在集装箱安全方面存在一些重要问题。集装箱安全首次被列入Gartner十大安全项目,进一步证实了其在安全研究和应用中的普遍性。特别是随着微服务架构和DevOps开发模式的流行,越来越多的开发者采用了容器技术。然而,作为一场新的技术革命,容器技术不仅面临着传统的主机安全问题,也带来了新的安全威胁。Docker的安全问题主要在以下几个方面。

逃避安全风险:Docker容器的逃逸安全风险包括配置危险、隔离不完善和内核漏洞。危险的配置可能让攻击者逃脱,不完善的隔离可能导致关键信息的泄露,内核漏洞可能让攻击者从容器中逃脱并访问主机。

镜像安全风险:镜像是Docker容器的静态表示,其安全性影响容器的运行时安全性。镜像脚本的安全威胁可能导致容器中的漏洞或恶意利用,而镜像漏洞的安全威胁涉及镜像中软件的CVE漏洞和恶意上传的镜像。

网络安全风险:Docker容器网络默认采用网桥连接,但是容器之间的通信是不过滤的,容易受到ARP欺骗和MAC flooding攻击。恶意使用容器中的内核资源也可能影响其他容器的正常运行。

应用场景

Docker可以用来构建和管理开发环境,保证开发环境的一致性和可移植性。开发人员可以使用Docker容器在他们的本地环境中运行应用程序,而不会影响其他应用程序或主机。

Docker可以用来构建和管理测试环境,保证测试环境的一致性和可移植性。测试人员可以使用Docker容器在不同的环境中测试应用程序,无需任何修改。

Docker可用于支持持续集成和持续部署流程。开发人员可以使用Docker容器来构建和打包应用程序,而DevOps团队可以使用Docker容器将应用程序部署到各种环境中。

Docker可以用来支持微服务架构,应用被分成几个小服务,每个小服务运行在一个独立的Docker容器中。这可以使应用程序更容易管理和扩展,还可以提高可用性和可靠性。

Docker可以用来支持多租户应用,每个租户可以运行在一个单独的Docker容器中。这可以使应用程序更容易管理和隔离,还可以提高安全性和可靠性。

应用示例

AWS Amazon ECR和Amazon ECR Public:AWS客户可以使用高可用性和高性能的容器组件注册中心来处理他们的容器应用程序。通过使用Docker官方映像和Amazon ECR Public,AWS客户可以获得高可用性和快速下载的优势。

Datadog:不止Datadog:Datadog的应用程序运行在容器化的基础设施上,Docker Hub是容器镜像的主要来源。Datadog是公认的Docker认证发行商,它提供安全可靠的容器映像,用于监控基础设施和应用程序的性能。

VMware:VMware加入了Docker Verified Publisher计划,使开发人员能够通过容器访问VMware提供的工件,并安全地采用他们的开源技术。特别是,VMware Tanzu的客户可以从更广泛的辅助服务中受益,快速启动应用程序。

标签