Docker
Docker(全称:Docker Engine)是一组用于构建、发布及运行应用程序的开源平台即服务(PaaS)产品[1][2]。它基于操作系统层级的虚拟化技术,将软件与其依赖项打包为称为容器的标准化单元[3]。Docker能够帮助开发者在轻量级容器中自动部署应用程序,并使得不同容器中的应用程序彼此隔离[1][2]。该服务有免费和高级版本,于2013年首次发布,由Docker, Inc.开发[1][2]。
| 中文名 | 应用容器引擎 |
|---|---|
| 外文名 | Docker |
| 启动时间 | 2013年3月[1] |
| 主要赞助商 | Docker, Inc.[1] |
| 适用系统 | Windows,macOS,Linux[1] |
| 适用架构 | x86-64,ARM,s390x,ppc64le[1] |
| 许可协议 | Apache 2.0 license[1] |
| 编程语言 | Go[1][2] |
Docker是一个开源的平台,用于开发、交付和运行应用程序[1][2]。它能够在Windows,macOS,Linux计算机上运行,并将某一应用程序及其依赖项打包至一个容器中,这些容器可以在任何支持Docker的环境中运行[1][2]。容器彼此隔离,但可以通过特定的通道相互传递信息[1][2]。
Docker提供了一个轻量级的虚拟化解决方案。由于运行在同一计算机上的所有容器共享同一个操作系统内核,避免了启动与维护虚拟机的开销。因此相比于传统的虚拟机,Docker容器更加轻便、快速、容易部署[1][2]。使用Docker,开发者可以避免在两台计算机上运行效果不一致的问题,容器提供了一致的行为,进而使得应用程序在不同环境的计算机上有相同的运行效果[1][2]。
发展历史
编辑技术起源
编辑最初Docker是PaaS提供商dotCloud开源的一个基于LXC的高级容器引擎,源代码托管在Github上。后基于Go语言自研libcontainer用以替换LXC[1][2]。Docker自2013年以来非常火热,无论是从GitHub上的代码活跃度,还是Redhat在RHEL6.5中集成对Docker的支持,就连Google的Compute Engine也支持Docker在其之上运行[1][2]。
Docker之所以大获成功,是因为彼时的软件开发者面临环境管理复杂、云计算时代到来、虚拟化手段变化以及LXC移动性等问题[1][2]。Docker的设想是交付运行环境如同海运,OS如同一个货轮,每一个在OS基础上的软件都如同一个集装箱。用户可以通过标准化手段自由组装运行环境,同时集装箱的内容可以由用户自定义,也可以由专业人员制造[2]。
发展历程
编辑2010年夏季,Founder's Den的第一批孵化项目中的12家初创公司之一,Docker Inc.由Kamel Founadi、Solomon Hykes和Sebastien Pahl在Y Combinator夏季创业孵化器团队中创立,并于2011年运营。之后,Hykes在法国的dotCloud(一家PaaS公司)内部启动了Docker项目[2]。
2013年3月,Docker以Apache 2.0授权协议开源,主要项目代码在GitHub上进行维护[4]。Docker项目后来还加入了Linux基金会[4]。
2014年,随着0.9版本的发布,Docker用自己的组件libcontainer替换了LXC,后者是用Go编程语言编写的。同年11月,亚马逊弹性计算云(EC2)的Docker容器服务发布[2]。
2016年4月,独立软件供应商Windocks向Windows发布了Docker开源项目的移植版,支持Windows[2]。
架构
编辑Docker使用客户端-服务器(C/S)架构[3][5]。Docker客户端与Docker守护进程对话,Docker守护进程负责构建、运行和分发Docker容器的繁重工作[3]。Docker客户端和守护进程可以在同一系统上运行,或者可以将Docker客户端连接到远程Docker守护进程[3]。Docker客户端和守护进程通过REST API在UNIX套接字或网络接口上进行通信[3]。
Docker守护进程
编辑Docker守护进程(dockerd)侦听Docker API请求并管理Docker对象,例如镜像、容器、网络和卷。守护进程还可以与其他守护进程通信以管理Docker服务[3]。
Docker客户端
编辑Docker客户端(docker)是许多用户与Docker交互的主要方式。当用户使用诸如`docker run`之类的命令时,客户端会将这些命令发送到`dockerd`守护进程,后者会执行这些命令[3]。
Docker注册表
编辑Docker注册表存储Docker镜像。Docker Hub是一个任何人都可以使用的公共注册表,并且Docker默认配置为在Docker Hub上查找镜像。用户甚至可以运行自己的私有注册表[3]。
核心概念
编辑Docker的三大核心概念是镜像(Image)、容器(Container)和仓库(Repository)[6]。
镜像
编辑Docker镜像是一个只读的模板,可以用来创建Docker容器[6]。它相当于是一个root文件系统,包含了运行某个应用所需的所有内容,包括代码、运行时、系统工具、库和设置[6]。
容器
编辑容器是镜像的运行实例[6]。它是一个轻量级的、独立的、可执行的软件包,包含运行应用程序所需的一切[3]。容器可以被启动、开始、停止、删除,并且彼此相互隔离[6]。
仓库
编辑仓库是用来存储和管理Docker镜像的地方,类似于代码仓库[6]。Docker官方提供了Docker Hub仓库[6]。一个Docker注册表(Registry)中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像[7]。
参考文献
编辑- ↑ 1.00 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.10 1.11 1.12 1.13 1.14 1.15 1.16 Docker_百度百科
- ↑ 2.00 2.01 2.02 2.03 2.04 2.05 2.06 2.07 2.08 2.09 2.10 2.11 2.12 2.13 2.14 2.15 图文详情——科普中国资源服务
- ↑ 3.0 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 Docker 概述
- ↑ 4.0 4.1 打开 Docker 大门-华为开发者话题
- ↑ docker的底层原理
- ↑ 6.0 6.1 6.2 6.3 6.4 6.5 6.6 深入理解Docker的三大核心概念:镜像、容器与仓库
- ↑ 一篇文掌握Docker镜像容器仓库核心概念及生命周期管理-开发者社区-阿里云