Docker实战教程:下载、安装、配置、使用
-
- 前言(本文是基于UI自动化场景)
- [一、 Docker到底是什么,为什么使用它](#一、 Docker到底是什么,为什么使用它)
- 二、Windows系统Docker下载、安装与配置(
-
- [步骤1:下载Docker Desktop(Windows版)](#步骤1:下载Docker Desktop(Windows版))
- [步骤2:安装Docker Desktop](#步骤2:安装Docker Desktop)
- 步骤3:配置Docker
- 三、UI自动化Docker部署
-
- 3.1、整理本地UI自动化脚本及依赖
- 3.2、创建.dockerignore(构建镜像的忽略文件)
- [3.3、 创建Dockerfile(构建镜像的核心文件)](#3.3、 创建Dockerfile(构建镜像的核心文件))
- 3.4、构建UI自动化Docker镜像
- [3.5、 重新构建](#3.5、 重新构建)
- 3.6、验证:镜像构建成功后,启动容器,运行UI自动化脚本
- 3.7、上传镜像到阿里云仓库
- 四、常用docker命令
- 五、常见问题总结
前言(本文是基于UI自动化场景)
做UI自动化的同学都懂一个痛点------环境配置太繁琐!本地好不容易搭好Selenium+浏览器+驱动的环境,别人想用你的脚本,要么缺依赖、要么浏览器与驱动版本不匹配,折腾大半天还跑不起来。
而Docker就能完美解决这个问题:把UI自动化所需的"浏览器+驱动+脚本依赖"全部打包成一个"容器镜像",别人只需下载镜像、一键启动,无需任何额外配置,就能直接运行你的自动化脚本。
本文全程以「实用落地」为核心,从Docker基础认知(贴合UI自动化场景)、Windows系统Docker下载安装配置,到Selenium UI自动化Docker部署实战,再到常见坑总结,一步步带你实现"本地环境封装→Docker部署→他人一键使用",既能自己落地,也能直接复制发布到CSDN,帮助更多同行避坑。
(注:本文基于Windows 10系统、Python 3.7、Selenium 4.0实战,贴合多数UI自动化从业者的本地环境,所有命令可直接复制执行,无需修改)
一、 Docker到底是什么,为什么使用它
markdown
你的Windows电脑
├─ Windows 10/11(主系统:写脚本、用VS Code编辑、看测试报告)
│ └─ WSL2(Linux内核层:提供Docker运行的核心依赖)
│ └─ Ubuntu(Linux发行版:执行docker命令、构建/运行镜像)
│ ├─ Docker(容器工具)
│ │ ├─ UI自动化镜像(Python+Selenium+Chrome等)
│ │ └─ UI自动化容器(镜像运行实例:执行脚本、跑自动化用例)
│ └─ 访问Windows文件(挂载脚本、输出测试报告到Windows)
└─ Windows应用(浏览器、编辑器、测试报告查看工具)
很多同学觉得Docker复杂,其实不用纠结太多理论,结合UI自动化场景,记住一些核心概念,就能快速上手:
1. 镜像(Image)
相当于一个"预制好的环境模板"。比如我们可以制作一个镜像,里面包含「Python3.11.9+ Selenium4.27.1 + Chrome浏览器 + 对应版本ChromeDriver + 脚本依赖包」,这个镜像就是一个"可复用的UI自动化环境包",别人下载后直接用,不用再配置。
2. 容器(Container)
镜像的"运行实例"。别人下载我们制作的镜像后,启动镜像就会生成一个容器,容器里就是完整的UI自动化环境,我们的脚本在容器里运行,和本地环境完全隔离,不会受宿主机器(别人的电脑)系统、已装软件的影响。
简单说:镜像就是"安装包",容器就是"安装后运行的程序"。
3. 仓库(Repository)
存放镜像的"仓库"。类似GitHub存代码,我们可以把制作好的UI自动化镜像上传到仓库(比如Docker Hub、阿里云仓库),别人只需一句命令就能下载,不用我们手动传输镜像文件,极大降低分享门槛。
4. WSL2
WSL2 是 Windows Subsystem for Linux 的缩写,中文叫 适用于 Linux 的 Windows 子系统。简单说:它让你在 Windows 电脑里,直接跑一个完整的 Linux 环境,不用装虚拟机,也不用双系统。
5.Ubuntu
Ubuntu是 WSL2 上的主流 Linux 发行版,是我们操作 Docker 命令、管理镜像 / 容器的实际终端载体;WSL2 支持多种 Linux 发行版(CentOS、Debian 等),但 Ubuntu 是官方推荐、生态最完善的,Docker 官方文档也优先适配 Ubuntu。
- 简单来说:WSL2 是 Windows 上的 "Linux 运行底座",Ubuntu 是跑在这个底座上的具体 Linux 系统,Docker 则是跑在 Ubuntu(WSL2)里的容器化工具。
- Docker 的容器化核心是利用 Linux 的 namespace、cgroup 等内核特性,Windows 本身没有这些,所以必须跑在 Linux 环境里(要么虚拟机,要么 WSL2)
6. 为什么使用Docker部署UI自动化
-
✅ 环境一致:无论别人用Windows、Mac还是Linux,启动容器后,运行环境和你本地完全一样,杜绝"本地能跑、别人那跑不了"的尴尬。
-
✅ 一键部署:别人无需安装Python、Selenium、浏览器、驱动,只需2步(下载镜像+启动容器),就能运行你的自动化脚本。
-
✅ 隔离干净:容器和宿主机器完全隔离,不会污染别人的本地环境,也不会被别人的环境干扰,脚本运行更稳定。
-
✅ 复用性强:制作一次镜像,后续团队所有人都能复用,后续脚本更新,只需更新镜像即可,不用每个人都重新配置。
二、Windows系统Docker下载、安装与配置(
重点:本文针对Windows 系统(多数开发者常用),安装前先确认2个前提:
-
系统版本:Windows 专业版/企业版(家庭版需先开启Hyper-V,后面会讲);
-
开启虚拟化:进入BIOS开启(多数电脑默认开启,若未开启,启动电脑时按F2/F10进入BIOS,找到"Virtualization Technology",设置为Enabled)。
步骤1:下载Docker Desktop(Windows版)
官方安装包Docker Desktop下载:https://pan.quark.cn/s/1b93536ceec3
安装包(Docker Desktop Installer.exe),大小约500M,我使用的是4.59.0版本

步骤2:安装Docker Desktop
双击安装包,开始安装,全程下一步

安装完成后,点击"Close and restart",重启电脑(必须重启,否则Docker无法正常启动)。

重点注意地方:
WSL2 和 Hyper-V 是 Docker 在 Windows 上的 "运行引擎",没有它们,Docker 就跑不了:
- WSL2(轻量、快、Win11 家庭版专属):让 Windows 直接运行 Linux 内核,Docker 容器本质是 Linux 程序,必须依赖 WSL2;
- Hyper-V(重、占内存、家庭版无):微软虚拟机,仅 Win10/11 专业版 / 企业版支持;因此所有版本优先选 WSL2,家庭版只能用 WSL2。
步骤3:配置Docker
启动成功后,桌面右下角会出现Docker图标(鲸鱼图标),右键点击图标,选择"Settings"(设置),重点配置几个地方,否则无法使用
(1)配置WSL2、Ubuntu
- (1.1)重启电脑后,首次启动Docker,接受订阅协议

- (1.2)接着出现下面两个页面,一个是 和 Docker Desktop 页面;一个是 WSL2页面


(1.3)先处理 Docker Desktop 登录页
直接点 Continue without signing in(不登录继续),这完全不影响本地使用和部署,因为Docker Hub是国外的,选择注册会因为网络问题打不开网址,后续可以用阿里云 ACR等国内平台代替。

(1.4)确认 WSL2 与 Docker 集成
-
(1.4.1)打开 WSL 设置界面,找到 Docker Desktop 集成, 这个是 WSL 的欢迎页面,有一些集成说明

-
(1.4.2)然后在 Docker Desktop 里:打开设置 → Resources → WSL Integration → 开启对应发行版的集成:这样 Docker 就会跑在 WSL2 里


- 先解释 Ubuntu 是什么:Ubuntu 是最常用的 Linux 发行版之一(可以理解为 "Linux 系统的一个版本"),WSL 2 需要依赖一个 Linux 发行版才能运行,所以必须装一个(Ubuntu 是官方推荐、最容易装的)。
- Docker 在 Windows 上基于 WSL 2 运行,而 WSL 2 本身是 "Windows 的 Linux 子系统",必须有一个 Linux 发行版(比如 Ubuntu)才能提供 Linux 内核环境,否则 Docker 的容器(本质是 Linux
程序)跑不起来;但也可以装其他 WSL 2 发行版(比如 Debian、CentOS),但Ubuntu 是最简单、最常用的,命令wsl
--install -d Ubuntu是一键安装,不用手动配置,对新手最友好。
- (1.4.3)安装Ubuntu:以管理员身份打开 PowerShell,执行:
powershell
wsl --install -d Ubuntu
-
这个命令会自动下载并安装 Ubuntu 发行版。安装过程中会提示你设置 Linux 用户名和密码,记好这个密码(账号最好admin好记(shugh),密码可以设置123456),安装完成后,重启电脑。


-
(1.4.4)安装Ubuntu成功后再次进入进行设置


-
(1.4.5)验证 Docker 与 WSL 集成是否成功
-
打开 Ubuntu 终端(最关键)---》在 Windows 开始菜单的搜索框中,直接搜索「Ubuntu」(不是搜 WSL/PowerShell),点击搜索结果里的「Ubuntu」应用,就能直接进入你之前配置好用户名密码的 Ubuntu 命令行终端。

-
进入 Ubuntu 终端后,执行以下命令:
docker --version如果输出类似 Docker version 24.0.x,build xxx,说明 Docker 和 WSL 集成成功;
(2)配置国内镜像源(关键!解决拉取镜像不成功)
进入 Ubuntu 终端后,执行以下命令:docker run hello-world 如果输出 "Hello from Docker!",就说明整个 Docker 环境已经完全就绪,可以开始运行你的 UI 自动化容器了。
-
(2.1)Docker默认使用国外镜像源,拉取镜像时速度很慢,甚至超时,就会出现以下问题,配置国内镜像源(阿里云、网易云)即可解决:

-
(2.2)在Settings中,找到"Docker Engine"(左侧菜单);在右侧编辑框中,添加国内镜像源,点击右下角的 Apply & restart;
重点:加国内镜像源完整配置如下,直接复制替换原有内容即可,我试了其他镜像源配置均不成功,使用下面的就可以
json
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": false,
"features": {
"buildkit": true
},
"registry-mirrors": ["https://docker.registry.cyou",
"https://docker-cf.registry.cyou",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://mirror.aliyuncs.com",
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.iscas.ac.cn",
"https://docker.rainbond.cc",
"https://do.nark.eu.org",
"https://dc.j8.work",
"https://dockerproxy.com",
"https://gst6rzl9.mirror.aliyuncs.com",
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"http://mirrors.ustc.edu.cn/",
"https://mirrors.tuna.tsinghua.edu.cn/",
"http://mirrors.sohu.com/"
]
}


- (2.3)配置后再次进入 Ubuntu 终端后,执行以下命令:
docker run hello-world
如果输出 "Hello from Docker!",就说明整个 Docker 环境已经完全就绪,可以开始运行你的 UI 自动化容器了。

三、UI自动化Docker部署
- (1)核心目标:将本地UI自动化环境(Python+Selenium+Chrome+脚本)打包成Docker镜像,别人下载镜像后,一键启动就能运行脚本,无需任何额外配置。
- (2)前提:你本地已经搭建好UI自动化环境(Python + Selenium + 浏览器 + 驱动),且脚本能正常运行,做了linux系统和windowns系统兼容。
3.1、整理本地UI自动化脚本及依赖
(1)先在本地整理好脚本文件,规范目录结构组织
txt
示例:
ui-auto-project/ # 项目根目录
├─ test_ui.py # 你的UI自动化主脚本(可包含多个脚本,统一放在根目录或子目录)
├─ requirements.txt # 脚本依赖包清单(关键!)
└─ Dockerfile # Docker镜像构建文件(后续创建)
(2)生成requirements.txt(依赖清单)
-
打开CMD,进入你的UI自动化项目根目录(ui-auto-project);
-
输入以下命令,生成依赖清单:但是
pip freeze会导出所有依赖包,建议创建虚拟环境,然后只安装必须的包运行起来后,在虚拟环境中执行pip freeze;生成requirements.txt,用于告诉Docker,镜像中需要安装哪些Python依赖包:
bash
# 导出到当前目录的 freeze_requirements.txt(新文件,仅用于查看)
pip freeze > requirements.txt
# 把 freeze 结果追加到原有 requirements.txt 末尾(仅建议临时查看)
pip freeze >> requirements.txt
# 绝对路径(Windows):导出到指的目录并自定义名字
pip freeze > E:\Script\freeze_temp.txt
# 绝对路径(Linux/Docker):导出到 /app/temp 目录
pip freeze > /app/temp/freeze_temp.txt
# 相对路径(相对于当前命令执行目录):导出到上级目录
pip freeze > ../freeze_temp.txt
- 生成后,打开requirements.txt,删除无关依赖(只保留selenium及脚本所需的依赖,比如pytest、requests等),避免镜像体积过大。示例requirements.txt内容:
requirements
selenium==4.27.1
urllib3==2.6.3
Faker==18.13.0
id-validator==1.0.20
openpyxl==3.1.2
pyautogui==0.9.54
webdriver-manager==4.0.2
pytest==7.4.4
pytest-html==3.2.0
allure-pytest==2.13.5
oracledb==2.3.0
psycopg2-binary==2.9.9
PyMySQL==1.1.1
- 创建虚拟环境,执行requirements.txt,安装依赖
(a)cmd进入版本所在目录
cmd
cd /d E:\Script\DockerScript\individual_core_auto
# 验证Python版本(需显示3.11.9)确认环境没问题
python --version
(b)创建虚拟环境目录:
cmd
# 创建虚拟环境目录
python -m venv venv_selenium4.27.1
#激活虚拟环境:
venv_selenium4.27.1\Scripts\activate
# 升级pip(指定阿里云源,避免超时)
python -m pip install --upgrade pip -i https://mirrors.aliyun.com/pypi/simple/ --no-cache-dir
# 安装指定版本python包
pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ --default-timeout=180 --no-cache-dir
# 验证安装
pip list
# 退出虚拟环境(用完后执行)
deactivate
(c)配置对应的虚拟环境
重点:必须重新打开项目(新窗口打开),删除缓存文件,然后再进行下面的配置
- 顶部菜单栏 → File → Settings → Project → Python Interpreter;
点击齿轮图标 → Add Interpreter → Add Local Interpreter →Virtualenv Environment → Existing;
浏览到 ...\venv_selenium4.27.1\Scripts\python.exe → 点击 OK,完成配置。
(d)使用虚拟环境
cmd
(1)虚拟环境安装好后,且配置好环境后,可以退出命令提示符(CMD窗口)
(2)如果再次进入:cmd--> cd /d 项目路径
(3)激活虚拟环境:venv_selenium4.27.1\Scripts\activate
(4)确认是否进入虚拟环境:where python
(5)验证安装:pip list | findstr selenium # 确认显示 selenium 版本
(6)切换环境:若在命令行中,需先通过 deactivate 退出当前环境,再激活要切换的目标环境。
(7)退出环境(可选,用完后执行):deactivate
(3)修改UI自动化脚本(适配Docker环境)
-
本地脚本是连接本地Chrome浏览器运行,而Docker环境中,浏览器是在容器内运行,
runner.py、settings.py兼容处理: -
无头模式(--headless=new)
-
获取浏览器驱动路径,以及其他路径兼容
-
allure报告兼容windows和linux
3.2、创建.dockerignore(构建镜像的忽略文件)
避免打包镜像上传太多无效文件
.dockerignore
.gitignore
venv*/
.venv*/
env/
.idea/
.DS_Store
Thumbs.db
.pytest_cache/
__pycache__/
*.pyc
*.log
*.png
.git/
output/
common/utils/db_utils.py
common/utils/email_utils.py
common/utils/login_api_utils.py
core/individual_contract.py
docs/notes.txt
3.3、 创建Dockerfile(构建镜像的核心文件)
方式一:镜像源安装
在项目根目录(ui-auto-project)中,新建一个文件,命名为"Dockerfile"(无后缀名),直接复制以下内容(适配Python 3.7 + Chrome + Selenium),但是会存在镜镜像源失效,建议使用方式二:
dockerfile
# 基础镜像:Python3.7.4轻量版
FROM python:3.7.4-slim
# 设置工作目录
WORKDIR /app
# 安装系统依赖:Chrome/驱动 + 编译依赖 + Java 17(headless无头版)
RUN apt-get update && apt-get install -y \
chromium \
chromium-driver \
# Python3.7安装psycopg2-binary的编译依赖
gcc \
libpq-dev \
# Java 17无头版,兼容Allure且体积更小
openjdk-17-jre-headless \
# 下载Allure需要的wget+unzip
wget \
unzip \
# 中文显示支持(可选)
fonts-wqy-microhei \
&& rm -rf /var/lib/apt/lists/*
# 安装Allure Commandline(2.24.0兼容Java17)
RUN wget https://github.com/allure-framework/allure2/releases/download/2.24.0/allure-2.24.0.zip -O /tmp/allure.zip \
&& unzip /tmp/allure.zip -d /usr/local/ \
&& ln -s /usr/local/allure-2.24.0/bin/allure /usr/bin/allure \
&& rm /tmp/allure.zip # 清理安装包
# 设置环境变量:Chrome驱动路径 + 编码
ENV CHROME_DRIVER_PATH=/usr/bin/chromedriver
ENV PYTHONIOENCODING=utf-8
# 禁用webdriver-manager日志,ENV新增
ENV WDM_LOG_LEVEL=0
# 新增:Chrome日志重定向到空,避免冗余
ENV CHROME_LOG_FILE=/dev/null
# 复制requirements.txt并安装Python依赖(先复制依赖文件,利用Docker缓存)
COPY requirements.txt .
RUN pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ --default-timeout=180 --no-cache-dir
# 复制项目所有代码
COPY . .
# 容器启动命令:运行自动化脚本
CMD ["python", "runner.py"]
方式二:本地下载依赖打包镜像
- 因为通过镜像源,网络不稳定导致安装失败,所以可以使用本地安装的方式
(1)配置文件目录
python
# 文件目录:配置docker镜像安装包下载地址及版本
E:\Script\DockerScript\individual_core_auto\
└── docker_deps/ # 所有手动下载的依赖都放这里
├── chrome/ # Chrome 浏览器安装包
├── chromedriver/ # ChromeDriver 驱动
├── allure/ # Allure 测试报告工具
└── jdk/ # Java JDK 安装包
(2)逐个下载 + 命名 + 存放(精准对应)
py
1. Java JDK(Allure 依赖)
下载地址:https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.10%2B7/OpenJDK17U-jre_x64_linux_hotspot_17.0.10_7.tar.gz
重命名:jdk17.tar.gz(简单好记,Dockerfile 直接识别)
存放路径:docker_deps/jdk/jdk17.tar.gz
2. Allure 2.24.0(测试报告)
下载地址:https://github.com/allure-framework/allure2/releases/download/2.24.0/allure-2.24.0.zip
重命名:allure2.24.0.zip(保留版本号,避免混淆)
存放路径:docker_deps/allure/allure2.24.0.zip
3. Chrome 浏览器(Linux 版)
谷歌官网:https://googlechromelabs.github.io/chrome-for-testing/
下载地址:https://storage.googleapis.com/chrome-for-testing-public/145.0.7632.77/linux64/chrome-headless-shell-linux64.zip
重命名:chrome-headless-shell.zip(简化名称)
存放路径:docker_deps/chrome/chrome-headless-shell.zip
5. ChromeDriver(和 Chrome 版本匹配)
下载地址:https://storage.googleapis.com/chrome-for-testing-public/145.0.7632.77/linux64/chromedriver-linux64.zip
重命名:chromedriver.zip(简化名称)
存放路径:docker_deps/chromedriver/chromedriver.zip
(3)Dockerfile 对应修改(全部用本地拷贝)
把原来的「网络下载」代码,全部换成「本地拷贝」,以下是完整的依赖安装段:
.dockerfile
# 基础镜像:Python 3.11-slim
FROM python:3.11-slim
# ========== 全局环境变量(提前定义,所有步骤生效) ==========
# 系统基础配置(避免交互、统一编码)
ENV DEBIAN_FRONTEND=noninteractive
ENV LANG=C.UTF-8
ENV LC_ALL=C.UTF-8
ENV PYTHONIOENCODING=utf-8
# Java/Allure 基础路径(提前定义,避免硬编码)
ENV JAVA_HOME=/usr/local/jdk17
ENV ALLURE_HOME=/usr/local/allure-2.24.0
ENV PATH=$PATH:$JAVA_HOME/bin:$ALLURE_HOME/bin
# Chrome/ChromeDriver 核心配置(适配 chrome-headless-shell)
ENV CHROME_DRIVER_PATH=/usr/bin/chromedriver
ENV CHROME_BIN=/usr/bin/chrome
ENV CHROME_LOG_FILE=/dev/null
ENV WDM_LOG_LEVEL=0
# 1. 配置阿里云 Debian 源 + 安装基础依赖
RUN sed -i s@/deb.debian.org/@/mirrors.aliyun.com/@g /etc/apt/sources.list.d/debian.sources && \
apt-get clean && \
apt-get update -y && \
apt-get install -y --no-install-recommends \
# 基础工具依赖
wget unzip curl gcc libpq-dev libc6 libz1 \
# Chrome 核心依赖(之前的完整列表)
libglib2.0-0 libnss3 libfontconfig1 libxss1 libasound2 \
libgbm1 libatk-bridge2.0-0 libpangocairo-1.0-0 \
libxcomposite1 libxdamage1 libxfixes3 libxrandr2 libxi6 \
libxcursor1 libxtst6 libcups2 libdbus-1-3 libxkbcommon0 \
libxrender1 libxcb1 libxcb-dri3-0 libxcb-icccm4 libxcb-image0 \
libxcb-keysyms1 libxcb-randr0 libxcb-render-util0 libxcb-shape0 \
libxcb-sync1 libxcb-xfixes0 libxcb-xinerama0 libxcb-xkb1 \
libxkbcommon-x11-0 \
# 中文字体(解决乱码)
fonts-wqy-zenhei fonts-wqy-microhei && \
rm -rf /var/lib/apt/lists/* # 清理缓存
# 2. 安装 Java 17.0.10(本地拷贝)
COPY docker_deps/jdk/jdk17.tar.gz /tmp/jdk17.tar.gz
RUN tar -zxf /tmp/jdk17.tar.gz -C /usr/local/ && \
mv /usr/local/jdk-17* /usr/local/jdk17 || mv /usr/local/jre-17* /usr/local/jdk17 && \
ln -s /usr/local/jdk17/bin/java /usr/bin/java && \
rm /tmp/jdk17.tar.gz && \
java -version
# 3. 安装 Allure 2.24.0(本地拷贝)
COPY docker_deps/allure/allure2.24.0.zip /tmp/allure.zip
RUN unzip -q /tmp/allure.zip -d /usr/local/ && \
ln -s $ALLURE_HOME/bin/allure /usr/bin/allure && \
rm /tmp/allure.zip && \
allure --version
# 4. 安装 chrome-headless-shell(本地拷贝)
COPY docker_deps/chrome/chrome-headless-shell.zip /tmp/chrome-headless-shell.zip
RUN unzip -q /tmp/chrome-headless-shell.zip -d /opt/ && \
# 创建软链接,模拟系统命令,和原有逻辑兼容
ln -s /opt/chrome-headless-shell-linux64/chrome-headless-shell /usr/bin/chrome && \
# 赋予执行权限,避免权限错误
chmod +x /usr/bin/chrome && \
# 清理临时文件,减小镜像体积
rm -rf /tmp/chrome-headless-shell.zip && \
# 验证版本,提前发现问题
chrome --version
# 5. 安装 ChromeDriver(本地拷贝)
COPY docker_deps/chromedriver/chromedriver.zip /tmp/chromedriver.zip
RUN unzip /tmp/chromedriver.zip -d /usr/bin/ && \
mv /usr/bin/chromedriver-linux64/chromedriver /usr/bin/ && \
chmod +x /usr/bin/chromedriver && \
rm -rf /tmp/chromedriver.zip /usr/bin/chromedriver-linux64 && \
chromedriver --version
# 6. 配置 Python 依赖
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ --default-timeout=180 --no-cache-dir
# 7. 复制项目代码(最后复制,利用Docker缓存)
COPY . /app
# 8. 启动命令(二选一,根据你的实际脚本调整)
# 如果你用pytest运行测试用例:
# CMD ["pytest", "-v", "--alluredir=./allure-results", "test_case/"]
# 如果你用runner.py运行:
CMD ["python", "runner.py"]
3.4、构建UI自动化Docker镜像
(1) 输入以下命令,构建镜像(注意末尾有一个".",表示当前目录):
bash
# 打开CMD,进入项目根目录(individual_core_auto)
cd /d E:\Script\DockerScript\individual_core_auto
# 第一次构建镜像,镜像名字为:ui-auto-test:v1
docker build -t ui-auto-test:v1 .
# 如果构建失败,再次构建镜像前清理 Docker 缓存
# 只清构建缓存,不清理容器 / 镜像缓存
docker builder prune -f
# 定期清理 Docker 所有无用缓存(包括构建缓存、未使用镜像、虚悬镜像)
docker system prune -f
# 建议直接使用这个命令:无缓存构建镜像(不使用缓存构建,确保镜像干净)
docker build -t ui-auto-test:v1 --no-cache .
# docker images命令查看本地镜像列表
docker images
-
-t :是 --tag 的简写,作用是给你构建的镜像打一个「标签 / 名字」,方便后续识别和使用。没有 -t 的话,镜像只有一串随机的 ID(比如 a8b7c9d0e1f2);加了 -t 后,你可以给镜像起一个「易记的名字 + 版本号」(比如 ui-auto-test:v1)。
-
ui-auto-test:镜像名称(可自定义,比如你的项目名);
-
v1:镜像版本号(可自定义,后续更新脚本后,可改为v2、v3);
-
末尾的".":表示从当前目录的Dockerfile中读取构建规则。
(2) 执行命令后,Docker会开始构建镜像,过程约5-10分钟(取决于网络速度),
执行后,若能看到"ui-auto-test"镜像(名称和你自定义的一致),说明构建成功。
也可以输入docker images命令查看本地镜像列表:

3.5、 重新构建
cmd
# 打开CMD,进入项目根目录(individual_core_auto)
cd /d E:\Script\DockerScript\individual_core_auto
# 1. 先删除旧镜像(避免缓存)
docker rmi ui-auto-test:v1
# 只清构建缓存,不清理容器 / 镜像缓存
docker builder prune -f
# 定期清理 Docker 所有无用缓存(包括构建缓存、未使用镜像、虚悬镜像)
docker system prune -f
# 2. 重新构建镜像
docker build -t ui-auto-test:v1 --no-cache .
# 3. 查看镜像
docker images
docker images | findstr ui-auto-test
3.6、验证:镜像构建成功后,启动容器,运行UI自动化脚本
cmd
# 指定测试结果输出到指的目录:D:\ui-test-output
docker run --rm -v D:\ui-test-output:/app/output ui-auto-test:v1


3.7、上传镜像到阿里云仓库
(1)上传镜像到仓库
- 注册Docker Hub账号(官网:https://hub.docker.com/)
- 或者注册阿里云账号,上传到 阿里云:https://home.console.aliyun.com/
- 以阿里云为例注册后:打开CMD,输入以下命令
bash
# 登录阿里云,密码注册的用户名和密码
docker login --username=【阿里云容器仓库用户名】 【阿里云镜像仓库地址】
# 把本地的 ui-auto-test:v1 镜像,打上阿里云仓库的地址标签:
docker tag 【本地镜像名:本地标签】 【阿里云镜像仓库地址】/【仓库命名空间】/【目标镜像名:目标标签】
# 推送镜像到阿里云
docker push 【阿里云镜像仓库地址】/【仓库命名空间】/【目标镜像名:目标标签】
推送完成后,在阿里云控制台的「镜像版本」里就能看到 v1 版本了


(2)仓库设为公开,下载镜像并直接运行命令:
cmd
# Windows
docker run --rm -v %cd%/【本地挂载目录】:/app/【容器内挂载目录】 【阿里云镜像仓库地址】/【仓库命名空间】/【目标镜像名:目标标签】
# Linux/Mac
docker run --rm -v $(pwd)/【本地挂载目录】:/app/【容器内挂载目录】 【阿里云镜像仓库地址】/【仓库命名空间】/【目标镜像名:目标标签】
四、常用docker命令
(1)下载启动容器:
bash
# 下载镜像
docker pull 你的DockerHub用户名/ui-auto-test:v1
# 启动容器:从Docker Hub下载指定镜像(本地没有时),启动长期运行的可视化测试环境容器
docker run -d -p 4444:4444 -p 7900:7900 --shm-size="2g" 你的DockerHub用户名/ui-auto-test:v1
# 启动容器:仅使用本地已有的镜像,启动长期运行的可视化测试环境容器(关键!映射端口,方便脚本连接Chrome):
docker run -d -p 4444:4444 -p 7900:7900 --shm-size="2g" ui-auto-test:v1
-
-d:后台运行容器(启动后,CMD窗口可以关闭,容器仍在运行);
-
-p 4444:4444:映射Selenium端口,脚本通过这个端口连接容器内的Chrome;
-
-p 7900:7900:映射可视化端口,通过浏览器访问http://localhost:7900(密码:secret),可实时查看容器内Chrome的操作(适合调试脚本);
-
--shm-size="2g":给容器分配2GB内存,解决Chrome内存不足、崩溃的问题;
-
ui-auto-test:v1:启动的镜像名称和版本号(和你构建时的一致)。
(2)给镜像重命名
cmd
# 给镜像重命名
docker tag ui-auto-test:v1 你的DockerHub用户名/ui-auto-test:v1
(3)查看脚本运行日志(验证脚本是否正常运行):
bash
# 首先,输入以下命令,查看容器ID:
docker ps
# 找到"ui-auto-test:v1"对应的容器ID(第一列,一串字母+数字),查看日志:
docker logs 容器ID
(4) 停止容器(脚本运行完成后,可停止容器,释放资源):
bash
docker stop 容器ID
(5) 上传镜像到Docker Hub:
bash
docker push 你的DockerHub用户名/ui-auto-test:v1
五、常见问题总结
(1)Docker启动失败,提示"WSL 2 installation is incomplete"
- 解决方案:点击提示中的链接,下载WSL 2更新包,安装后重启电脑,即可正常启动Docker。
(2)拉取镜像、构建镜像速度极慢,甚至超时
- 解决方案:确认已配置国内镜像源,若仍慢,更换镜像源,或检查网络连接,避开高峰时段。
(3)容器启动成功,但脚本运行失败,提示"Chrome启动失败"
- 确认启动容器时添加了"--shm-size="2g""参数,给容器分配足够内存;
- 确认脚本中添加了"--no-sandbox"和"--disable-dev-shm-usage"参数(适配容器环境);
- 检查Dockerfile中是否安装了chromium和chromium-driver(参考本文步骤2的Dockerfile内容)。
(4)脚本无法连接容器内的Chrome,提示"连接超时"
- 确认启动容器时映射了4444端口(-p 4444:4444);
- 确认脚本中command_executor的地址是"http://localhost:4444/wd/hub"(无需修改);
- 检查容器是否正常运行(docker ps 查看容器状态),若已停止,重新启动容器。
(5)镜像体积过大(超过1GB),传输不便
- 优化requirements.txt,删除无关依赖包;
- Dockerfile中使用"slim"版本的基础镜像(如python:3.7-slim),比完整版镜像小很多;
- 构建镜像后,使用"docker prune"命令清理无用的镜像和容器,释放空间。