Docker 是一个基于容器构建应用程序的软件平台——这些小巧且轻量级的执行环境,共享作系统内核,但彼此间独立运行。虽然容器在Linux和Unix系统中已经使用了一段时间,但2013年启动的开源项目Docker通过让开发者比以往更容易打包软件“一次构建,随处运行”,从而推广了这项技术。
Docker最初由所罗门·海克斯于2008年在巴黎创立,最初是一个平台即服务(PaaS),2013年转向专注于其平台运行的底层软件容器的民主化。
Hykes于2013年3月在PyCon上首次演示了Docker,他解释说Docker的诞生源于开发者不断要求支持DotCloud平台的底层技术。“我们一直觉得能说'是的,这是我们的低层次作品'会很酷。现在你可以和我们一起做Linux容器,去做任何你想做的事,去构建你的平台。”所以我们就是这么做的。”
于是,Docker 诞生了,这个开源项目迅速在开发者中获得关注,吸引了 Microsoft、IBM 和 Red Hat 等知名技术供应商的关注,同时也吸引了愿意投入数百万美元的风险投资家。集装箱革命由此开始。
正如Hykes在PyCon演讲中所描述的,容器是“你可以从那边的服务器交付到另一台服务器的自足软件单元,从你的笔记本电脑到EC2再到裸机巨型服务器,并且由于在进程层面隔离,并且拥有自己的文件系统,所以运行方式相同。”
通过简化这一过程,Docker 很快成为容器的事实行业标准。Docker 让开发者能够以一种简化的方式部署、复制、移动和备份工作负载,利用一组可复用的镜像,使工作负载比以往方法更可移植和灵活。
在虚拟机(VM)领域,这可以通过在同一硬件上运行时保持应用程序分离来实现,但在那个世界里,每个虚拟机都需要自己的作系统,这意味着它们通常体积庞大、启动缓慢、移动不便且维护和升级繁琐。容器标志着与虚拟机时代的明显转变,是通过隔离执行环境并共享底层作系统内核,为开发者提供了轻量且快速的选择。
Docker
虚拟化和容器基础设施的叠加情况。
Docker:组件部分
Docker 之所以在软件开发者中走红,是因为它找到了一种新颖的方法,将构建和启动容器所需的工具打包得比以往更简洁和更简洁。Docker细分为组件部分,包括Dockerfile、容器镜像、Docker 运行工具、Docker Hub、Docker Engine、Docker Compose和Docker Desktop。
Dockerfile。 每个 Docker 容器都以一个 Dockerfile 开始。该文本文件提供了一组构建 Docker 镜像的指令,包括作系统、语言、环境变量、文件位置、网络端口以及运行所需的其他组件。
Docker 镜像。 类似于虚拟机中的快照,Docker 镜像是一个可携带、只读、可执行的文件,包含创建容器的指令以及容器将运行哪些软件组件及其方式的规范。
Docker 运行工具。Docker 的运行工具是启动容器的命令。每个容器都是镜像的一个实例,并且可以同时运行同一镜像的多个实例。
Docker Hub。 Docker Hub 是一个可以存储、共享和管理容器镜像的仓库。可以把它看作是 Docker 自己的 GitHub,但专门针对容器。
Docker 引擎。 Docker Engine 是 Docker 的核心。它是基于客户端-服务器技术创建和运行容器的。Docker 引擎包含一个名为 dockerd 的长期守护进程用于管理容器,允许程序与 Docker 守护进程通信的 API,以及命令行接口。
Docker Compose。 Docker Compose 是一款命令行工具,使用 YAML 文件来定义和运行多容器 Docker 应用程序。它允许你创建、启动、停止和重建配置中的所有服务,并查看所有运行服务的状态和日志输出。
Docker 桌面版。 所有这些组件都包裹在 Docker 的桌面应用中,提供了一种用户友好的方式来构建和共享容器化应用和微服务。
Docker 容器提供了一种构建比以往方法更易于组装、维护和移动的应用程序的方法。这为软件开发者带来了多重优势。
Docker 容器极简,便于可移植性。 Docker 通过隔离应用及其环境,使其保持清洁和最小化,从而实现更细致的控制和更高的可移植性。
Docker 容器支持组合性。 容器使开发者更容易将应用的构建模块组合成模块化单元,模块化组件可互换,从而加快开发周期、功能发布和修复错误。
Docker 容器简化了编排和扩展。 由于容器重量轻,开发者可以大量推出以实现服务的扩展性。这些容器集群需要被编排,这正是Kubernetes通常发挥作用的地方。
容器解决了许多问题,但并不能解决所有开发者的问题。
Docker 容器不是虚拟机。 与虚拟机不同,容器使用主机作系统资源的受控部分,这意味着元素不像虚拟机那样严格隔离。
Docker 容器不提供裸机速度。 容器比虚拟机更轻巧,更贴近金属,但确实会带来一定的性能开销。如果你的工作量需要裸金属速度,容器能帮你接近但不会完全达到。
Docker 容器是无状态且不可变的。 容器启动和运行时,会有一个描述其内容的镜像。这个形象默认是不可改变的——一旦创建,就不会改变。但容器实例是暂时的。一旦从系统内存中移除,它就永远消失了。如果你想让容器像虚拟机一样在会话间持久化状态,你需要设计持久化。
随着云原生开发技术成为构建和运行软件的主流模式,容器的使用持续增长,但Docker现在只是这一拼图的一部分。
Docker 之所以成为主流,是因为可以轻松地将应用程序及其所有依赖的代码从开发者的笔记本电脑迁移到服务器。但容器的兴起导致应用构建方式发生转变——从单体堆栈转向微服务网络。很快,许多用户需要一种方式来大规模协调和管理容器群。
Kubernetes开源项目由谷歌发起,迅速成为实现这一目标的最佳途径,取代了Docker自身通过Swarm orchestrator(RIP)解决这一问题的尝试。在资金问题日益严重的情况下,Docker 最终于2019年将其企业业务出售给 Mirantis,后者随后将 Docker Enterprise 并入 Mirantis Kubernetes 引擎。
Docker 的残余——包括最初的开源 Docker Engine 容器运行时、Docker Hub 映像仓库和 Docker Desktop 应用——在公司资深人士 Scott Johnston 的领导下继续存在,他正试图围绕核心客户群——软件开发者重新定位业务。
Copyright © 2013-2020. All Rights Reserved. 恒讯科技 深圳市恒讯科技有限公司 粤ICP备20052954号 IDC证:B1-20230800.移动站


