docker介绍

docker介绍

拍摄者: Cameron Venti

Docker 是 Moby 项目的子集,是一个软件框架,用于在服务器和云上构建、运行和管理容器。术语“docker”可以指工具(命令和守护程序)或文件格式。Dockerfile

过去,当你想要运行一个 Web 应用程序时,你买了一台服务器,安装了 Linux,设置了一个 LAMP 堆栈,然后运行了这个应用程序。如果您的应用程序变得流行,您可以通过设置第二台服务器来练习良好的负载平衡,以确保应用程序不会因流量过多而崩溃。

然而,时代已经变了,互联网不再专注于单个服务器,而是建立在通常称为“云”的系统中相互依赖和冗余的服务器阵列之上。由于 Linux 内核命名空间和 cgroup 等创新,服务器的概念可以摆脱硬件的约束,而本质上成为一种软件。这些基于软件的服务器称为容器,它们是运行它们的 Linux 操作系统和超本地化运行时环境(容器的内容)的混合组合

 

容器技术可以分为三个不同的类别:

  • Builder:用于构建容器的工具或一系列工具,例如用于 LXC 的 distrobuilder 或用于 Docker 的 Dockerfile。
  • 引擎:用于运行容器的应用程序。对于 Docker,这是指 docker 命令和守护程序。对于其他人,这可以指守护程序和相关命令(例如 podman)。dockerdcontainerd
  • 编排:用于管理许多容器的技术,包括 Kubernetes 和 OKD。

容器通常同时提供应用程序和配置,这意味着与从传统源安装应用程序相比,系统管理员不必花费太多时间在容器中运行应用程序。Dockerhub 和 Quay.io 是提供供容器引擎使用的映像的存储库。

然而,容器最大的吸引力在于它们能够优雅地“死亡”,并在负载平衡需要时重生。无论容器的消亡是由崩溃引起的,还是因为服务器流量低而不再需要它,容器的启动成本都很“低”,而且它们被设计为无缝地出现和消失。由于容器是短暂的,并且会根据需要频繁生成新实例,因此预计监视和管理它们不是由人类实时完成的,而是自动化的。

 

Docker 的替代品

Linux 容器促进了高可用性计算的巨大转变。有许多工具集可以帮助您在容器中运行服务,甚至整个操作系统开放容器倡议 (OCI) 是一个行业标准组织,旨在鼓励创新,同时避免供应商锁定的危险。借助 OCI,您可以在选择容器工具链时进行选择,包括 Docker、CRI-OPodmanLXC 等。

 

容器实用程序

根据设计,容器可以快速成倍增加,无论您是运行许多不同的服务,还是运行几个服务的许多实例。如果您决定在容器中运行服务,您可能需要设计用于托管和管理这些容器的软件。这通常称为容器业务流程。虽然 Docker 和其他容器引擎(如 Podman 和 CRI-O)是容器定义和映像的良好实用程序,但它们的工作是创建和运行容器,而不是帮助您组织和管理它们。Kubernetes 和 OKD 等项目为 Docker、Podman、CRI-O 等提供容器编排。

在生产环境中运行其中任何一个时,您可能希望通过下游项目(如 OpenShift(基于 OKD)来投资支持。

 

您需要了解的有关 Docker 社区版的信息

Docker 的开源组件收集在名为 Docker Community Edition 的产品中,即 .其中包括 Docker 引擎和一组终端命令,以帮助管理员管理他们正在使用的所有 Docker 容器。您可以通过在发行版的包管理器中搜索来安装此工具链。docker-cedocker

为什么使用 Docker

开源的一大优点是,你可以选择使用什么技术来完成一项任务。Docker 引擎对于需要轻量级、干净的测试环境但不需要复杂业务流程的单独开发人员非常有用。如果 Docker 在您的系统上可用,并且您周围的每个人都熟悉 Docker 工具链,那么 Docker 社区版 () 是开始使用容器的好方法。docker-ce

Dockerhub 和 Quay.io 是为你选择的容器引擎提供映像的存储库。如果 Docker Community Edition 不可用或不受支持,那么 Podman 是一个明智的选择。确保开放标准占上风的努力正在进行中,因此容器解决方案的重要长期战略应该是坚持尊重和促进开源和开放标准的项目。专有附加功能乍一看似乎很吸引人,但通常情况下,一旦您将工具提交到不允许迁移的产品中,您就会失去选择的灵活性。容器可以解放,只要它们被解放了。

 

Docker的优势

模块化

Docker 容器化方法注重在不必停止整个应用的情况下,单独提取部分应用进行更新或修复的能力。除了这种基于微服务的方法,您还可以采用与面向服务的架构(SOA)类似的方法,在多个应用间共享进程。

层和镜像版本控制

每个 Docker 镜像文件都包含多个层,它们组合成一个镜像。每当镜像发生改变时,就会创建一个新的镜像层。每当用户指定命令时,例如 run 或 copy,就会创建一个新的层。

Docker 可重复利用这些层来构建新容器,因而加快了构建过程。镜像之间共享中间变化,进一步提升了速度、规模以及效率。版本控制也是层所固有的功能:每次发生新的更改时,您大都会获得一个内置的更改日志,拥有对容器镜像的全盘管控。

回滚

回滚也许是层最值得一提的功能。每个镜像有多个层。不喜欢镜像的当前迭代?将它回滚到上一版本。这一功能还支持敏捷开发方法,帮助实现持续集成和部署(CI/CD),使其在工具层面成为一种现实。

快速部署

新硬件的启用、运行、置备和供应在过去需要耗费数日,所需的投入和开销也很繁重。基于 Docker 的容器可以将部署缩短到只用几秒。通过为每个进程创建容器,您可以快速将这些进程共享给新的应用。而且,添加或移动容器时无需重启操作系统,大大缩短了部署时间。除了部署时间更短外,您还可以轻松无虞、经济高效地创建和销毁容器创建的数据。

因此,Docker 技术是一种更加精细、可控、基于微服务的技术,可为企业提供更高的效率价值。

使用Docker的局限

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

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

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

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

原创文章,作者:geeklinux.cn,如若转载,请注明出处:https://www.geeklinux.cn/cloud-native/docker/1022.html

(0)
geeklinux.cn的头像geeklinux.cn
上一篇 2024 年 1 月 27 日
下一篇 2024 年 1 月 29 日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注