Docker Desktop下载、安装、配置、使用

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个前提:

  1. 系统版本:Windows 专业版/企业版(家庭版需先开启Hyper-V,后面会讲);

  2. 开启虚拟化:进入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(依赖清单)
  1. 打开CMD,进入你的UI自动化项目根目录(ui-auto-project);

  2. 输入以下命令,生成依赖清单:但是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
  1. 生成后,打开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
  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.pysettings.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)上传镜像到仓库

  1. 注册Docker Hub账号(官网:https://hub.docker.com/)
  2. 或者注册阿里云账号,上传到 阿里云:https://home.console.aliyun.com/
  3. 以阿里云为例注册后:打开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"命令清理无用的镜像和容器,释放空间。
相关推荐
huaweichenai2 小时前
Linux安装http-server并部署html静态站点
linux·运维·服务器
Gss7772 小时前
Linux 正则表达式详解(基础 + 扩展 + 实操)
linux·运维·正则表达式
北冥湖畔的燕雀2 小时前
Linux权限与Vim,gcc以及make/makefile操作全解析
linux·运维·服务器
代码游侠2 小时前
Linux驱动复习——驱动
linux·运维·arm开发·笔记·学习
xmlhcxr2 小时前
Nginx(一)
运维·nginx
峰顶听歌的鲸鱼4 小时前
Zabbix监控系统
linux·运维·笔记·安全·云计算·zabbix·学习方法
琅琊榜首20204 小时前
移动端AI挂机新范式:YOLOv8+NCNN实现无Root视觉自动化
人工智能·yolo·自动化
物联网软硬件开发-轨物科技4 小时前
【技术白皮书】光伏电站数智化技改技术白皮书:从老旧场站到高收益智能资产的演进路径
大数据·运维·服务器
不光头强4 小时前
Linux 系统中最常用的命令及具体使用方法
linux·运维·chrome