ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

docker-python-chromedriver 模板化构建机制揭秘:render.sh 如何一键生成多版本 Dockerfile

docker-python-chromedriver 模板化构建机制揭秘:render.sh 如何一键生成多版本 Dockerfile docker-python-chromedriver 模板化构建机制揭秘render.sh 如何一键生成多版本 Dockerfile【免费下载链接】docker-python-chromedriverDockerfile for running Python Selenium in headless Chrome (Python 2.7 / 3.6 / 3.7 / 3.8 / Alpine based Python / Chromedriver / Selenium / Xvfb included in different versions)项目地址: https://gitcode.com/gh_mirrors/do/docker-python-chromedriver对于需要跑自动化测试的开发者来说docker-python-chromedriver是一个相当实用的开源项目它把 Python、Google Chrome、Chromedriver、Selenium 打包进 Docker 镜像让无头浏览器测试开箱即用。但很多人好奇的是——项目里同时维护着 3.6 到 3.11 共 12 个版本、Debian 与 Alpine 两套体系的 Dockerfile它们到底是怎么高效生成、避免重复维护的答案就藏在render.sh 模板化构建机制里。本文就带你拆解这个一键生成多版本 Dockerfile的巧妙设计。为什么要用模板化构建维护 24 个 Dockerfile 的痛点打开项目目录会发现光是py-debian和py-alpine下就有 24 个 Dockerfile。如果每个文件都手写维护一旦要升级 Chromedriver 版本或调整安装参数就得逐个修改、极易遗漏。而模板化构建的核心思想是只维护一份模板用脚本批量渲染出所有版本。项目的目录结构非常清晰py-debian/ # Debian 系镜像体积大、兼容性好 ├── Dockerfile.template ├── Dockerfile-selenium.template ├── render.sh └── 3.6 ~ 3.11/ # 各版本目录 py-alpine/ # Alpine 系镜像体积小、启动快 ├── Dockerfile.template ├── Dockerfile-selenium.template ├── render.sh └── 3.6-alpine ~ 3.11-alpine/render.sh 的核心理念用 sed 做占位符替换两个render.sh脚本虽然分属不同体系但思路完全一致定义render()函数把模板中的%%PYTHON_VERSION%%等占位符替换成真实版本号再输出到对应目录。以 py-alpine/render.sh 为例render() { sedStr s!%%PYTHON_VERSION%%!$python_version!g; s!%%ALPINE_VERSION%%!$alpine_version!g; sed -E $sedStr $1 }这段脚本的精妙之处在于使用!作为 sed 分隔符避免与 URL 中的/冲突%%变量%%双百分号占位符一眼就能看出哪里会被替换循环遍历版本数组同名调用render即可批量生成。一键生成多版本 Dockerfile 的操作流程运行 render.sh 的流程可以归纳为四步定义版本清单python_versions(3.6 3.7 3.8 3.9 3.10 3.11)想加新版本只需改这一行循环遍历版本为每个 Python 版本创建专属目录渲染普通版render Dockerfile.template $version/Dockerfile渲染 Selenium 版render Dockerfile-selenium.template $version-selenium/Dockerfile。Alpine 版本稍有不同它会额外固定alpine_version3.14并生成3.6-alpine、3.6-alpine-selenium这类带后缀的目录名。模板与生成物对比占位符如何变成真实版本看看模板和最终产物的差别就明白这套机制有多优雅。Alpine 模板 Dockerfile.template 中的写法FROM python:%%PYTHON_VERSION%% RUN echo http://dl-4.alpinelinux.org/alpine/v%%ALPINE_VERSION%%/main /etc/apk/repositories RUN apk add chromium chromium-chromedriver渲染后生成的 3.10-alpine/DockerfileFROM python:3.10-alpine RUN echo http://dl-4.alpinelinux.org/alpine/v3.14/main /etc/apk/repositories RUN apk add chromium chromium-chromedriverDebian 体系同样如此模板 Dockerfile-selenium.template 除了安装 Chrome 和 Chromedriver还额外通过ENV DISPLAY:99设置显示端口避免崩溃并pip install selenium渲染出的 3.9-selenium/Dockerfile 则对应 Python 3.9 版本。普通版与 Selenium 版模板的差异两套模板只有一个关键区别Dockerfile-selenium.template在普通版基础上追加了 pip 升级和 Selenium 安装两步。这意味着维护者可以分别独立更新基础环境和Selenium 环境互不干扰。验证模板化构建成果跑通 Selenium 测试生成完镜像后可以用仓库自带的 test_script.py 快速验证。它通过webdriver.Chrome()启动无头浏览器访问页面并断言元素可点击。使用带 Selenium 的镜像一条命令即可验证docker run -it -w /usr/workspace -v $(pwd):/usr/workspace joyzoursky/python-chromedriver:3.10-alpine-selenium sh # python test_script.py看到Ran 2 tests ... OK的输出就说明整个模板化构建链路完全正常。模板化构建的三大收益与扩展建议这套机制给项目带来了实实在在的好处收益说明单一事实来源改动只发生在模板上所有版本自动同步扩展零成本新增 Python 版本只需在数组里加一个元素降低出错率批量生成避免手工复制粘贴导致的遗漏如果你想基于此项目二次开发也可以沿用同样的思路把版本号、镜像源、依赖清单抽成占位符用自己的render.sh一键渲染。这套模板 脚本的组合拳正是 docker-python-chromedriver 能轻松维护多版本、多体系 Dockerfile 的秘密所在。【免费下载链接】docker-python-chromedriverDockerfile for running Python Selenium in headless Chrome (Python 2.7 / 3.6 / 3.7 / 3.8 / Alpine based Python / Chromedriver / Selenium / Xvfb included in different versions)项目地址: https://gitcode.com/gh_mirrors/do/docker-python-chromedriver创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表