首页
/ 深入解析sitespeed.io的Docker镜像构建过程

深入解析sitespeed.io的Docker镜像构建过程

2025-07-08 04:50:15作者:邓越浪Henry

sitespeed.io是一个强大的网站性能测试工具,它通过Docker容器化部署提供了便捷的使用方式。本文将详细解析其Dockerfile构建过程,帮助开发者理解其内部机制。

基础镜像选择

该Dockerfile基于sitespeedio/webbrowsers镜像构建,这是一个预配置了多种浏览器环境的镜像:

FROM sitespeedio/webbrowsers:chrome-138.0-firefox-140.0-edge-138.0

这个基础镜像已经包含了Chrome 138.0、Firefox 140.0和Edge 138.0三个主流浏览器,为网站性能测试提供了完整的浏览器环境支持。

平台兼容性处理

ARG TARGETPLATFORM=linux/amd64

这里使用了构建参数TARGETPLATFORM,默认值为linux/amd64,这使得Docker镜像可以针对不同平台进行构建,增强了跨平台兼容性。

环境变量配置

ENV SITESPEED_IO_BROWSERTIME__XVFB=true
ENV SITESPEED_IO_BROWSERTIME__DOCKER=true
ENV PYTHON=python3

这些环境变量配置了关键运行参数:

  • XVFB设置为true表示使用虚拟帧缓冲区运行浏览器
  • DOCKER标志告知应用运行在容器环境中
  • 指定使用Python3作为Python解释器

WebPageReplay工具集成

COPY docker/webpagereplay/$TARGETPLATFORM/wpr /usr/local/bin/
COPY docker/webpagereplay/wpr_cert.pem /webpagereplay/certs/
COPY docker/webpagereplay/wpr_key.pem /webpagereplay/certs/
COPY docker/webpagereplay/deterministic.js /webpagereplay/scripts/deterministic.js
COPY docker/webpagereplay/LICENSE /webpagereplay/

这部分将WebPageReplay工具及其相关文件复制到镜像中:

  • wpr二进制文件根据目标平台选择
  • 证书文件用于HTTPS流量捕获
  • deterministic.js脚本用于控制回放的确定性
  • 许可证文件确保合规性

系统依赖安装

RUN sudo apt-get update && sudo apt-get install libnss3-tools \
    net-tools \
    build-essential \
    iproute2 -y && \
    mkdir -p $HOME/.pki/nssdb && \
    certutil -d $HOME/.pki/nssdb -N

安装必要的系统工具:

  • libnss3-tools用于证书管理
  • net-toolsiproute2用于网络配置
  • build-essential提供编译环境
  • 创建并初始化NSS证书数据库

WebPageReplay根证书安装

RUN wpr installroot --https_cert_file /webpagereplay/certs/wpr_cert.pem --https_key_file /webpagereplay/certs/wpr_key.pem

将WebPageReplay的证书安装为系统信任的根证书,这对于HTTPS流量捕获至关重要。

应用代码部署

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

COPY package.json /usr/src/app/
COPY npm-shrinkwrap.json /usr/src/app/
COPY tools/postinstall.js /usr/src/app/tools/postinstall.js
RUN npm install --production && npm cache clean --force

COPY ./bin/ /usr/src/app/bin/
COPY ./lib/ /usr/src/app/lib/
RUN rm -fR /usr/src/app/node_modules/selenium-webdriver/bin

这部分完成了Node.js应用的部署:

  1. 创建应用目录并设为工作目录
  2. 复制package.json和锁定文件
  3. 执行npm安装生产依赖
  4. 清理npm缓存
  5. 复制应用代码
  6. 移除不必要的selenium-webdriver二进制文件

启动脚本配置

COPY docker/scripts/start.sh /start.sh

将启动脚本复制到根目录,作为容器入口点。

Android调试桥配置

RUN mkdir -m 0750 /root/.android
ADD docker/adb/insecure_shared_adbkey /root/.android/adbkey
ADD docker/adb/insecure_shared_adbkey.pub /root/.android/adbkey.pub

这部分配置了Android调试桥(ADB)的密钥对,用于移动设备测试场景。

网络限速权限配置

RUN echo 'ALL ALL=NOPASSWD: /usr/sbin/tc, /usr/sbin/route, /usr/sbin/ip' > /etc/sudoers.d/tc

配置sudo权限,允许所有用户无需密码执行网络限速相关命令,这是实现网络节流功能的基础。

最终配置

ENTRYPOINT ["/start.sh"]
VOLUME /sitespeed.io
VOLUME /baseline

WORKDIR /sitespeed.io
  • 设置启动脚本为入口点
  • 声明两个数据卷:/sitespeed.io用于存储测试结果,/baseline用于基准比较
  • 设置工作目录为/sitespeed.io

技术要点总结

  1. 多浏览器支持:基础镜像已集成三大主流浏览器,确保测试环境一致性
  2. 网络捕获与回放:通过WebPageReplay实现请求捕获和确定性回放
  3. 安全配置:正确处理HTTPS证书和密钥管理
  4. 性能测试扩展性:支持网络节流和移动设备测试场景
  5. 数据持久化:通过数据卷分离测试数据和容器生命周期

这个Dockerfile展示了如何构建一个功能完备的网站性能测试环境,涵盖了从底层系统配置到应用部署的完整流程,为开发者提供了可靠的测试基础设施。