Alpine Chrome Docker 镜像
在极小的Alpine镜像中以无头模式运行的Chrome浏览器,适用于网页测试、自动化和内容生成等场景,体积小巧且功能丰富。
可用仓库
基于https://www.docker.com/increase-rate-limits的变更,提供以下仓库地址:
- https://hub.docker.com/r/zenika/alpine-chrome(无前缀):`zenika/alpine-chrome`
- Google Cloud(按地区就近访问):
- 全球:
gcr.io/zenika-hub/alpine-chrome - 欧洲:
eu.gcr.io/zenika-hub/alpine-chrome - 亚洲:
asia.gcr.io/zenika-hub/alpine-chrome - 美国:
us.gcr.io/zenika-hub/alpine-chrome
- 全球:
支持的标签及对应Dockerfile链接
latest、100https://github.com/Zenika/alpine-chrome/blob/master/Dockerfilewith-node、100-with-node、100-with-node-16(带Node.js)https://github.com/Zenika/alpine-chrome/blob/master/with-node/Dockerfilewith-puppeteer、100-with-puppeteer(带Puppeteer)https://github.com/Zenika/alpine-chrome/blob/master/with-puppeteer/Dockerfilewith-playwright、100-with-playwright(带Playwright)https://github.com/Zenika/alpine-chrome/blob/master/with-playwright/Dockerfilewith-selenoid、100-with-selenoid(带Selenoid)https://github.com/Zenika/alpine-chrome/blob/master/with-selenoid/Dockerfilewith-chromedriver、100-with-chromedriver(带Chromedriver)https://github.com/Zenika/alpine-chrome/blob/master/with-chromedriver/Dockerfile- 历史版本:
89、86、85、84、83、81、80、77、76、73、72、71、68、64 - 带Node.js的历史版本:
89-with-node、86-with-node、85-with-node等 - 带Puppeteer的历史版本:
89-with-puppeteer、86-with-puppeteer等
alpine-chrome
在极小的Alpine镜像中以无头模式运行的Chrome浏览器 *
🤔 为什么使用无头Chrome
在Web开发中,快速运行端到端测试至关重要。Puppeteer等流行技术使开发者能够实现测试、表单自动化、网页爬取、截图生成、时间线捕获等功能。而秘密在于:Chrome原生支持其中部分功能!🙌
💡 打造理想容器的特性
- 📦 最小的无头Chrome镜像(压缩大小:https://github.com/Zenika/alpine-chrome#image-disk-size)
- 🐳 易于使用、临时且可复现的Docker无头Chrome环境
- 📝 文档友好,提供打印DOM、生成移动比例图片、生成PDF等示例
- 👷♂️ 通过https://hub.docker.com/repository/docker/zenika/alpine-chrome自动构建,确保项目同步和镜像可靠性
- 📌 包含最新Chromium版本,同时提供历史版本标签以便测试不同Chromium版本
- 🔐 安全可靠,提供https://github.com/Zenika/alpine-chrome#3-ways-to-securely-use-chrome-headless-with-this-image
- 🌐 支持国际化:包含亚洲字符支持(参见https://github.com/Zenika/alpine-chrome/blob/master/with-puppeteer/src/screenshot-asia.js)
- 💄 支持设计场景:支持WebGL和表情符号(参见https://github.com/Zenika/alpine-chrome#how-to-use-with-webgl和https://github.com/Zenika/alpine-chrome/issues/114)
- 📄 开源,采用Apache2许可证
- 👥 社区共建,包含外部贡献者(参见https://github.com/Zenika/alpine-chrome#-contributors)
- 💚 开发者友好,提供NodeJS、Puppeteer、docker-compose示例,以及X11显示测试(参见https://github.com/Zenika/alpine-chrome#run-examples)
三种安全使用本镜像运行Chrome无头模式的方法
❌ 无任何配置
仅使用docker container run -it zenika/alpine-chrome ...启动容器会失败,日志类似https://github.com/Zenika/alpine-chrome/issues/33。请使用以下三种方法。
✅ 使用--no-sandbox
启动容器命令:
docker container run -it --rm zenika/alpine-chrome,并在所有命令中添加--no-sandbox参数。
注意:确保信任目标网站。
no-sandbox参数的简要说明参见https://www.google.com/googlebooks/chrome/med_26.html,深度设计文档参见https://chromium.googlesource.com/chromium/src/+/master/docs/design/sandbox.md。
✅ 使用SYS_ADMIN权限
启动容器命令:
docker container run -it --rm --cap-add=SYS_ADMIN zenika/alpine-chrome
此方法允许Chrome启用沙箱,但从Docker角度看授予了不必要的权限。
✅ 最佳方式:使用seccomp
基于Jessie Frazelle的Chrome安全计算(seccomp)配置文件,这是最安全的运行方式。
配置文件:https://github.com/Zenika/alpine-chrome/blob/master/chrome.json,也可通过`wget https://raw.githubusercontent.com/jfrazelle/dotfiles/master/etc/docker/seccomp/chrome.json`获取。
启动容器命令:
docker container run -it --rm --security-opt seccomp=$(pwd)/chrome.json zenika/alpine-chrome
命令行使用方法
默认入口点
默认入口点执行命令:chromium-browser --headless --disable-gpu --disable-software-rasterizer --disable-dev-shm-usage
如需完全控制,可覆盖入口点:docker container run -it --rm --entrypoint "" zenika/alpine-chrome chromium-browser ...
使用开发者工具
命令(需no-sandbox):docker container run -d -p 9222:9222 zenika/alpine-chrome --no-sandbox --remote-debugging-address=0.0.0.0 --remote-debugging-port=9222 https://www.chromestatus.com/
在浏览器中访问http://localhost:9222,点击要检查的标签页。将链接开头的https://chrome-devtools-frontend.appspot.com/serve_file/@.../inspector.html?ws=localhost:9222/[END]替换为chrome-devtools://devtools/bundled/inspector.html?ws=localhost:9222/[END]。
打印DOM
命令(需no-sandbox):docker container run -it --rm zenika/alpine-chrome --no-sandbox --dump-dom https://www.chromestatus.com/
生成PDF
命令(需no-sandbox):docker container run -it --rm -v $(pwd):/usr/src/app zenika/alpine-chrome --no-sandbox --print-to-pdf --hide-scrollbars https://www.chromestatus.com/
截取屏幕截图
命令(需no-sandbox):docker container run -it --rm -v $(pwd):/usr/src/app zenika/alpine-chrome --no-sandbox --screenshot --hide-scrollbars https://www.chromestatus.com/
标准信纸尺寸
命令(需no-sandbox):docker container run -it --rm -v $(pwd):/usr/src/app zenika/alpine-chrome --no-sandbox --screenshot --hide-scrollbars --window-size=1280,1696 https://www.chromestatus.com/
Nexus 5x手机尺寸
命令(需no-sandbox):docker container run -it --rm -v $(pwd):/usr/src/app zenika/alpine-chrome --no-sandbox --screenshot --hide-scrollbars --window-size=412,732 https://www.chromestatus.com/
截图文件归属当前用户(默认归容器用户所有)
命令(需no-sandbox):docker container run -u `id -u $USER` -it --rm -v $(pwd):/usr/src/app zenika/alpine-chrome --no-sandbox --screenshot --hide-scrollbars --window-size=412,732 [***]
与Deno集成使用
进入deno src目录,构建镜像:
docker image build -t zenika/alpine-chrome:with-deno-sample .
启动容器:
docker container run -it --rm zenika/alpine-chrome:with-deno-sample Download https://deno.land/std/examples/welcome.ts Warning Implicitly using master branch https://deno.land/std/examples/welcome.ts Compile https://deno.land/std/examples/welcome.ts Welcome to Deno 🦕
运行自定义文件:
docker container run -it --rm -v $(pwd):/usr/src/app zenika/alpine-chrome:with-deno-sample run helloworld.ts Compile file:///usr/src/app/helloworld.ts Download https://deno.land/std/fmt/colors.ts Warning Implicitly using master branch https://deno.land/std/fmt/colors.ts Hello world!
与Puppeteer集成使用
借助https://pptr.dev/#?product=Puppeteer&version=v1.15.0&show=api-class-browser工具,可扩展无头Chrome功能。通过NodeJS代码可实现更复杂的测试。
详见https://github.com/Zenika/alpine-chrome/blob/master/with-puppeteer目录。需https://github.com/puppeteer/puppeteer/blob/main/versions.js。
若src目录中有NodeJS/Puppeteer脚本pdf.js,启动命令:
docker container run -it --rm -v $(pwd)/src:/usr/src/app/src --cap-add=SYS_ADMIN zenika/alpine-chrome:with-puppeteer node src/pdf.js
通过https://pkgs.alpinelinux.org/package/edge/testing/x86/wqy-zenhei库支持亚洲语言页面(如https://github.com/Zenika/alpine-chrome/blob/master/with-puppeteer/src/screenshot-asia.js):
docker container run -it --rm -v $(pwd)/src:/usr/src/app/src --cap-add=SYS_ADMIN zenika/alpine-chrome:with-puppeteer node src/screenshot-asia.js
已测试支持以下语言的网站:
- 中文(
https://m.baidu.com) - 日文(
https://www.yahoo.co.jp/) - 韩文(
https://www.naver.com/)
使用Puppeteer测试Chrome扩展
https://github.com/puppeteer/puppeteer/blob/main/docs/api.md#working-with-chrome-extensions,无头模式不支持测试Chrome扩展,需借助Xvfb提供显示环境。
详见https://github.com/Zenika/alpine-chrome/blob/master/with-puppeteer-xvfb目录,需https://github.com/puppeteer/puppeteer/blob/main/versions.js。
若src目录中有脚本extension.js,扩展文件在chrome-extension目录,启动命令:
docker container run -it --rm -v $(pwd)/src:/usr/src/app/src --cap-add=SYS_ADMIN zenika/alpine-chrome:with-puppeteer-xvfb node src/extension.js
示例扩展将所有网站背景设为红色,脚本会加载扩展并截取icanhazip.com的截图。
与Playwright集成使用
类似https://pptr.dev/#?product=Puppeteer&version=v6.0.0&show=api-class-browser,https://playwright.dev/docs/core-concepts/#browser也可扩展无头Chrome功能。
进入with-playwright目录,启动命令:
docker container run -it --rm -v $(pwd)/src:/usr/src/app/src --cap-add=SYS_ADMIN zenika/alpine-chrome:with-playwright node src/useragent.js
with-playwright/src目录将生成example-chromium.png文件。
WebGL使用方法
默认支持WebGL,如需禁用,启动Chromium时添加--disable-gpu。
with-webgl标签已弃用,将于2020年8月底前移除。
示例命令:
docker container run -it --rm --cap-add=SYS_ADMIN -v $(pwd):/usr/src/app zenika/alpine-chrome --screenshot --hide-scrollbars https://webglfundamentals.org/webgl/webgl-fundamentals.html
docker container run -it --rm --cap-add=SYS_ADMIN -v $(pwd):/usr/src/app zenika/alpine-chrome --screenshot --hide-scrollbars https://browserleaks.com/webgl
相关链接:
- https://github.com/adieuadieu/serverless-chrome/issues/108
- https://github.com/DevExpress/testcafe/issues/2116
- 'use-gl'参数值说明https://cs.chromium.org/chromium/src/ui/gl/gl_switches.cc?type=cs&q=kUseGL&sq=package:chromium&g=0&l=69
与Chromedriver集成使用
https://chromedriver.chromium.org/home是Selenium WebDriver控制Chrome的独立可执行文件。本镜像可作为Docker化Selenium测试的基础。详见https://www.browserstack.com/guide/run-selenium-tests-using-selenium-chromedriver。
与Selenoid集成使用
https://github.com/aerokube/selenoid是基于Docker的Selenium hub实现,轻量级且功能强大。with-selenoid镜像包含Selenium服务器、Chrome和Chromedriver。
启动命令:
docker container run -it --rm --cap-add=SYS_ADMIN -p 4444:4444 zenika/alpine-chrome:with-selenoid -capture-driver-logs
测试可访问http://localhost:4444/wd/hub。
在GitLab CI等Docker权限受限环境中,可能无法使用--cap-add=SYS_ADMIN,需向chromedriver传递--no-sandbox参数。详见selenoid文档。
以root用户运行并覆盖默认入口点
命令:
docker container run --rm -it --entrypoint "" --user root zenika/alpine-chrome sh
运行示例
examples目录提供以下示例:
- 🐳 https://github.com/Zenika/alpine-chrome/blob/master/examples/docker-compose:启动Chrome并调用同一docker-compose中的nginx服务器
- ☸️ https://github.com/Zenika/alpine-chrome/tree/master/examples/k8s:在K8s中部署无头
zenika/alpine-chrome 镜像文档
镜像拉取方式
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
轩辕镜像加速拉取命令点我查看更多 alpine-chrome 镜像标签
DockerHub 原生拉取命令
用户好评
来自真实用户的反馈,见证轩辕镜像的优质服务
