Docker 中 Linux 的无头 Chrome 启动及性能比较

阅读时长 5 分钟读完

随着前端技术的发展,每个前端开发者都需要处理浏览器兼容性问题。而无头 Chrome 可以帮助我们自动化测试,检查代码等操作,从而提高我们的工作效率。本文将介绍如何在 Docker 中启动 Linux 的无头 Chrome,并与传统虚拟机进行性能比较。

1. Docker 中启动无头 Chrome

Docker 可以快捷地创建和管理程序运行的环境,而无头 Chrome 是一种无 UI 界面的 Chrome,可以运行在 Linux 上,是前端自动化测试不可或缺的工具。以下是 Docker 中启动无头 Chrome 的具体操作步骤:

1.1 安装 Docker

首先,我们需要安装 Docker。Docker 的安装步骤可以在其官方网站上找到。安装完成后,我们可以在命令行中输入 docker version 命令,查看 Docker 是否成功安装。

1.2 下载无头 Chrome 镜像

在 Docker 中,我们可以通过 docker pull 命令快速下载各种镜像。无头 Chrome 镜像在 Docker Hub 上已有现成的镜像可供下载。我们可以使用以下命令下载镜像:

1.3 启动容器

我们已经下载了无头 Chrome 的镜像,接下来需要启动容器并运行 Chrome。以下是启动容器的命令:

该命令包含以下参数:

  • -i 表示我们将使用交互式命令来运行容器
  • --init 用于初始化容器进程,防止发生僵尸进程
  • --rm 表示当容器终止时,删除容器
  • --cap-add=SYS_ADMIN 表示增加 CAP_SYS_ADMIN 能力,避免出现一些权限问题
  • -v /dev/shm:/dev/shm 将宿主机的 /dev/shm(共享内存)作为容器的 /dev/shm
  • zenika/alpine-chrome 使用之前下载的镜像
  • --no-sandbox 关闭沙盒
  • --headless 代表无头模式
  • --disable-gpu 关闭 GPU 加速
  • --user-data-dir=/data 指定浏览器配置和数据的目录。用户可以指定自己的数据卷。

成功运行该命令后,我们就启动了一个无头 Chrome 的实例。我们可以在容器中执行自动化测试、屏幕截图等操作。

2. 性能比较

我们通过 Docker 启动无头 Chrome,可以在几秒钟内获得一个可用的无头 Chrome 实例,而传统的虚拟机则需要在设置过程中耗费更长时间。我们在以下方面比较两者的性能:

  • 内存占用
  • CPU 占用
  • 启动时间

我们对比的 Docker 和传统虚拟机都是在 4 核、16GB 内存的服务器上运行的。

2.1 内存占用

我们在两者运行时分别记录了内存占用。测试的结果显示,Docker 运行时的内存占用约为 510MB,而传统虚拟机则为 690MB。与传统虚拟机相比,Docker 节省了约 180MB 的内存。

这是因为 Docker 可以与宿主机共享内核,减少了重复内存的使用。而传统虚拟机每次运行都需要模拟一个完整的操作系统,因此需要更多的资源。

2.2 CPU 占用

在运行自动化测试时,CPU 的性能对测试速度起决定性作用。因此,我们还需要比较 Docker 和传统虚拟机的 CPU 占用情况。测试结果显示,两者的 CPU 占用率都大致相同。这表明,与传统虚拟机相比,Docker 在 CPU 方面的性能并无显著改进。

2.3 启动时间

在自动化测试环境中,启动时间非常重要。我们计算了 Docker 和传统虚拟机的无头 Chrome 启动时间。结果显示,Docker 启动无头 Chrome 的时间平均为 0.75 秒,而传统虚拟机则为 2.5 秒。与传统虚拟机相比,Docker 启动无头 Chrome 更加快速。

3. 总结

无头 Chrome 可以帮助我们自动化测试、检查代码等操作。Docker 可以在几秒钟内获得一个可用的无头 Chrome 实例,并且比传统虚拟机在内存占用和启动时间方面更加优秀。但是,在 CPU 方面,与传统虚拟机相比并没有显著提高。

因此,在使用自动化测试时,我们应该尽可能地使用 Docker。在配置环境时,应确保充分利用 Docker 的优点。同时,我们还可以根据实际情况,在 Docker 中进行性能测试和优化。

参考示例代码:

-- -------------------- ---- -------
----- --------- - ---------------------

------ -- -- -
  ----- ------- - ----- ------------------
    --------- -----
    ----- -
      ---------------
      ---------------------------
      --------------------------
      ----------------------------------
      ----------------
      --------------------------
    -
  ---

  ----- ---- - ----- ------------------

  ----- ---------------------------------- - ---------- -------------- ---

  ----- ----------------- ----- ------------- ---

  ----- ----------------
-----

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/651d0e6d95b1f8cacd4928b2

纠错
反馈