Docker

简而言之:Docker 会将应用程序及其所有依赖项打包到一个可移植的容器中。该容器可以在任何机器上以相同方式运行,从而消除“在我的机器上可以运行”的问题。

Docker 是 Docker, Inc. 于 2013 年发布的开源平台。它使用操作系统级虚拟化,在称为容器的隔离单元中运行应用程序。容器共享主机操作系统的内核。与每个实例都运行完整操作系统的虚拟机相比,它要轻量得多。Docker 容器可在数秒内启动,并且只需虚拟机所需内存的一小部分。

核心概念

  1. 镜像:定义容器文件系统和配置的只读模板。镜像由 Dockerfile 构建而成。
  2. 容器:镜像的运行实例。容器彼此隔离,也与主机隔离。
  3. Dockerfile:包含逐层构建镜像指令的文本文件。
  4. Docker Hub:预构建镜像的公共注册表(Node.js、Python、Postgres 等)。
  5. :挂载到容器中的持久化存储。容器重启后数据仍会保留。
  6. Docker Compose:用于在单个 YAML 文件中定义和运行多容器应用程序的工具。

Docker vs 虚拟机

  1. 启动时间:容器可在毫秒级启动。虚拟机启动完整操作系统需要数分钟。
  2. 资源使用:容器共享主机内核。虚拟机则为每个实例运行一个完整操作系统。
  3. 隔离性:虚拟机提供更强的隔离。容器共享内核,因此存在较小的风险面。
  4. 可移植性:Docker 镜像可在任何 Docker 主机上运行。虚拟机镜像则绑定到特定的虚拟机管理程序。

用于网页抓取和数据管道的 Docker

网页爬虫工具通常依赖特定的浏览器版本、语言运行时和库组合。Docker 镜像会将所有依赖项锁定到精确版本。在 CI 中可运行的爬虫,在生产环境中也会以相同方式运行。使用 Playwright 或 Puppeteer 的无头浏览器抓取工具通常会被容器化。Bright Data 的抓取浏览器专为与容器化抓取工作负载集成而构建。多个容器可以并行运行,通过横向扩展提升吞吐量,而 Kubernetes 可在生产环境中自动执行这种扩展。

采用情况

Docker Hub 托管着超过 1500 万个代码库。Stack Overflow 开发者调查一直将 Docker 列为最常用的工具之一。Docker 是各大云服务提供商中容器化工作负载的基础,AWS、Google Cloud 和 Azure 都使用 Docker 的 OCI 兼容镜像格式运行容器。

准备好开始了吗?