You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于Python Selenium构建多容器RPA:复用依赖基础容器

问题

我想要创建多个搭载基于Python和Selenium的RPA的容器,如何避免在每个容器中重复安装Python及其依赖库?能否通过构建一个包含所有依赖的基础容器,将这些依赖复用至其他容器?或者无法实现该需求?

原docker-compose配置:

services:
  chromedriver:
    container_name: chromedriver
    image: selenium/standalone-chrome:latest
    shm_size: 2gb
    ports:
      - 4444:4444
      - 5900:5900
    restart: always
  bank_1:
    build:
      dockerfile: Dockerfile-bank1
    container_name: bank_1
    command: python3 bank_1.py
    ports:
      - 8000:8000
    depends_on:
      - chromedriver
  bank_2:
    build:
      dockerfile: Dockerfile-bank1
    container_name: bank_2
    command: python3 bank_2.py
    ports:
      - 8001:8001
    depends_on:
      - chromedriver
解决方案

完全可以实现,核心是构建自定义基础镜像,把Python运行环境、Selenium及其他公共依赖一次性打包,所有业务RPA容器直接基于这个基础镜像构建,仅需添加各自的业务代码即可,大幅减少重复构建工作和镜像体积。

步骤1:创建基础镜像的Dockerfile

新建Dockerfile-base,定义公共依赖环境:

# 选择轻量的Python基础镜像,以3.10-slim版本为例
FROM python:3.10-slim

# 设置容器内工作目录
WORKDIR /app

# 安装必要系统依赖(按需添加,比如编译工具)
RUN apt-get update && apt-get install -y --no-install-recommends \
    gcc \
    && rm -rf /var/lib/apt/lists/*

# 安装Python公共依赖:Selenium及其他你需要的库
RUN pip install --no-cache-dir selenium requests pandas

# 设置环境变量,确保Python输出实时打印
ENV PYTHONUNBUFFERED=1

步骤2:构建基础镜像

执行命令构建并标记基础镜像:

docker build -t rpa-python-base:v1 -f Dockerfile-base .

步骤3:修改业务容器的Dockerfile

以Dockerfile-bank1为例,无需重复安装Python和依赖,仅从基础镜像出发复制业务代码:

# 基于我们构建的基础镜像
FROM rpa-python-base:v1

# 复制当前目录下的业务脚本到容器内(根据项目结构调整路径)
COPY bank_1.py .

如果bank_2有独立的Dockerfile(比如Dockerfile-bank2),结构完全一致,只需替换复制的脚本为bank_2.py即可。

步骤4:调整docker-compose.yml

确保业务容器的build配置指向修改后的Dockerfile:

services:
  chromedriver:
    container_name: chromedriver
    image: selenium/standalone-chrome:latest
    shm_size: 2gb
    ports:
      - 4444:4444
      - 5900:5900
    restart: always
  bank_1:
    build:
      dockerfile: Dockerfile-bank1
    container_name: bank_1
    command: python3 bank_1.py
    ports:
      - 8000:8000
    depends_on:
      - chromedriver
  bank_2:
    build:
      dockerfile: Dockerfile-bank2  # 改为对应业务的Dockerfile
    container_name: bank_2
    command: python3 bank_2.py
    ports:
      - 8001:8001
    depends_on:
      - chromedriver

额外优化点

  • 分层缓存利用:Docker会缓存镜像层,基础镜像仅在依赖变更时需要重新构建,业务容器的构建仅处理代码复制步骤,速度极快。
  • 依赖更新便捷:如果需要升级Selenium或其他公共库,只需修改Dockerfile-base重新构建基础镜像,所有业务容器重新基于新镜像构建即可。
  • 保持架构轻量:你当前使用独立的selenium/standalone-chrome服务是正确的,业务容器仅需安装selenium库,通过远程连接http://chromedriver:4444使用ChromeDriver,避免每个业务容器都打包浏览器,大幅减少镜像体积。

内容的提问来源于stack exchange,提问作者brunobos21

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 20:30:56