深入解析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-tools
和iproute2
用于网络配置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应用的部署:
- 创建应用目录并设为工作目录
- 复制package.json和锁定文件
- 执行npm安装生产依赖
- 清理npm缓存
- 复制应用代码
- 移除不必要的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
技术要点总结
- 多浏览器支持:基础镜像已集成三大主流浏览器,确保测试环境一致性
- 网络捕获与回放:通过WebPageReplay实现请求捕获和确定性回放
- 安全配置:正确处理HTTPS证书和密钥管理
- 性能测试扩展性:支持网络节流和移动设备测试场景
- 数据持久化:通过数据卷分离测试数据和容器生命周期
这个Dockerfile展示了如何构建一个功能完备的网站性能测试环境,涵盖了从底层系统配置到应用部署的完整流程,为开发者提供了可靠的测试基础设施。