什么是 Docker?

"Docker"一词指代了多个概念,包括开源社区项目、开源项目使用的工具、主导支持此类项目的公司 Docker Inc.,以及该公司官方支持的工具。这些技术和公司的同名可能会造成混淆。

试用产品 (英文) 开始管理 Docker 容器

什么是 Docker?

IT 软件 "Docker" 是支持创建和使用 Linux® 容器的容器化技术。

开源 Docker 社区致力于改进这类技术,并免费提供给所有用户,使之获益。

Docker Inc. 公司凭借 Docker 社区产品起家,主要负责提升社区版本的安全性,并将技术进步与广大技术社区分享。此外,它还专门对这些技术产品进行完善和安全固化,以服务于企业客户。

借助 Docker,您可将容器当做轻巧、模块化的虚拟机来使用。同时,您还将获得高度灵活性,实现对容器的高效创建、部署及复制,并在环境之间迁移它们,从而有助于您针对云来优化应用。

Docker 的原理是什么?

Docker 技术使用 Linux 内核和内核功能(例如 Cgroup 和命名空间)来分隔进程,以便各进程相互独立运行。这种独立性正是采用容器的目的所在;它可以独立运行多种进程、多个应用,更加充分地发挥基础设施的作用,同时保持各个独立系统的安全性。

容器工具(包括 Docker)可提供基于镜像的部署模式。这使得它能够轻松跨多种环境,与其依赖程序共享应用或服务组。Docker 还可在这一容器环境中自动部署应用(或者合并多种流程,以构建单个应用)。

此外,由于这些工具基于 Linux 容器构建,使得 Docker 既易于使用,又别具一格,因此它可为用户提供前所未有的应用访问权限、快速部署以及版本控制和分发能力。

那么,什么是 Linux 容器?

Linux 容器是操作系统级虚拟化的一种形式,它允许多个相互隔离的用户空间实例在同一个内核上运行。Docker 正是基于这一底层技术,为开发者提供打包、分发和运行应用程序的完整工具链。

红帽资源 · 扩展阅读

Docker 与 Linux 容器的区别是什么?

由于隐私设置,该视频无法播放

要更改您的设置,请选择页脚的"Cookie 偏好设置"链接,并选择"广告 Cookie"。

尽管有时混为一谈,但 Docker 并不等同于传统的 Linux 容器。Docker 技术最初是基于 LXC 技术构建(大多数人会将这一技术与"传统的"Linux 容器联系在一起),但后来它逐渐摆脱了对这种技术的依赖。LXC 可用作轻量型虚拟化技术,但它对开发人员和用户来说体验不甚理想。除了运行容器之外,Docker 技术还具备其他多项功能,包括简化用于构建容器、传输镜像以及控制镜像版本的流程。

Docker 与 Linux 容器的区别一览

传统 Linux 容器

  • 使用 init 系统来管理多种进程
  • 所有应用都作为一个整体运行
  • 进程彼此共享运行环境

Docker 容器

  • 让应用各自独立运行其进程
  • 提供相应工具帮助实现这一功能
  • 精细化运作,进程彼此隔离

Docker 容器的优势是什么?

模块化

Docker 容器化方法注重在不必停止整个应用的情况下,单独提取部分应用进行更新或修复的能力。

💾

层和镜像版本控制

每个 Docker 镜像文件都包含多个层,每当镜像发生改变时,就会创建一个新的镜像层,可重复利用这些层来构建新容器,加快构建过程。

回滚

每个镜像有多个层,不喜欢当前迭代?将它回滚到上一版本,支持敏捷开发方法,帮助实现持续集成和部署(CI/CD)。

快速部署

基于 Docker 的容器可以将部署缩短到只用几秒,添加或移动容器时无需重启操作系统,大大缩短了部署时间。

使用 Docker 有什么局限?

Docker 本身能够管理单个容器。但随着您开始使用越来越多的容器和容器化应用,并把它们划分成数百个部分,很可能会导致管理和编排变得困难。最终,您需要后退一步,对容器实施分组,以便跨所有容器提供诸如网络、安全和遥测等服务。于是,Kubernetes 应运而生。

了解更多与 Kubernetes 容器编排有关的内容 →

使用 Docker,您将获得与传统 Linux 容器不同的类 UNIX 功能,包括可以随同应用一起,在容器中使用 cron 或 syslog 之类的进程。当然,在某些事情上面也存在一些限制,例如终止子进程之后,需要清理孙进程,而对于这类事情,传统 Linux 容器天生会处理。但我们可以在开始时修改配置文件和设置功能,从而消除这些顾虑,这些都是瑕不掩瑜的小问题。

Docker 容器真的安全吗?

在此之上,还有其他非命名空间的 Linux 子系统和设备,包括 SELinux、Cgroup 和 /dev/sd* 设备等。这意味着,如果攻击者控制了这些子系统,主机也将不保。为了保持轻量,主机与容器共享内核,也因此埋下了安全漏洞的隐患。在这一点上,它与虚拟机不同,后者更加严格地与主机系统保持隔离。

Docker 守护进程也可能成为安全隐患。为使用和运行 Docker 容器,您很可能需要使用 Docker 守护进程,来为容器提供持续运行时环境。Docker 守护进程需要根权限,所以我们需要特别留意谁可以访问该进程,以及进程驻留在哪个位置。例如,相比公共区域所用的守护进程(例如 Web 服务器),本地守护进程的受攻击面要小得多。