云计算百科
云计算领域专业知识百科平台

告别繁琐,一键封神!用Docker在Ubuntu上部署WebUI服务器的终极保姆级教程

哈喽,大家好!

前段时间和大家分享了Adobe全家桶的一些经验,反响还不错。今天我们换个赛道,聊一聊在开发者和设计师圈子里同样火热的技术——Docker。最近我一直在折腾自己的工作站,希望搭建一个高效、隔离且可移植的AI绘画环境。尝试了各种方案后,最终还是回到了Docker的怀抱。它实在是太香了!

这篇文章,我想和大家详细分享一下如何在Ubuntu系统下,利用Docker部署一个功能强大的WebUI服务器(以当下最流行的AUTOMATIC1111/stable-diffusion-webui为例)。这套流程不仅能让你彻底告别本地环境配置的各种依赖地狱,还能实现资源的灵活管理和快速迁移,无论是设计师想尝鲜AI出图,还是开发者需要一个稳定的测试环境,都堪称完美解决方案。


技术简介:Docker 与 Stable Diffusion WebUI

在开始实战之前,我们先花点时间简单了解下今天两位主角的核心概念。

Docker,可以把它想象成一个超轻量级的“集装箱”。我们过去安装软件,需要先配好操作系统环境,再装各种依赖库,过程繁琐且容易出错。而Docker将一个完整的应用(比如我们今天的WebUI服务器)及其所有依赖,全部打包到一个标准化的“集-装箱”(即Docker镜像)里。无论你是在Windows、macOS还是Linux上,只要你的机器上安装了Docker平台,这个集装箱就能直接运行,保证环境的绝对一致性。它解决了“在我电脑上明明是好的”这一世纪难题,是DevOps和云原生时代的基石技术。

Stable Diffusion WebUI,全称通常指AUTOMATIC1111开发的那个版本,是目前全球最受欢迎、生态最丰富的AI绘画图形化界面。它本身是一个基于Gradio库的Python程序,允许用户通过浏览器窗口,与强大的Stable Diffusion模型进行交互,实现文生图、图生图、模型训练、后期处理等一系列复杂操作。由于其依赖NVIDIA显卡、CUDA工具包、Python环境及众多第三方库,本地手动安装过程相当劝退。而通过Docker部署,我们则可以跳过所有这些复杂的步骤,一步到位。


实战部署:在Ubuntu下通过Docker启动WebUI服务器

好了,理论学习到此为止。现在,请确保你有一台安装了Ubuntu(推荐LTS版本,如20.04或22.04)并配备了NVIDIA显卡的电脑或服务器。让我们卷起袖子,开始动手!

第一步:安装NVIDIA显卡驱动

Docker容器需要通过宿主机(也就是你的Ubuntu系统)来调用GPU资源,因此,一个正确安装的NVIDIA官方驱动是所有工作的前提。

  • 检查你的显卡型号:

    lspci | grep -i nvidia

    这条命令会列出你的NVIDIA显卡具体型号,记下它。

  • 添加官方驱动PPA源并安装: 为了确保安装的是最稳定、最合适的驱动版本,推荐使用 graphics-drivers PPA。

    sudo add-apt-repository ppa:graphics-drivers/ppa
    sudo apt update

    然后,打开 软件和更新 应用,在 附加驱动 选项卡里,系统会自动为你推荐最合适的驱动版本。选择那个标记为 (proprietary, tested) 的版本,点击“应用更改”即可。

    或者,你也可以通过命令行查看推荐的驱动版本并安装:

    ubuntu-drivers devices

    系统会列出推荐的驱动,比如 driver : nvidia-driver-535 – third-party free recommended。然后执行安装命令:

    sudo apt install nvidia-driver-535

  • 验证驱动安装: 安装完成后,务必重启你的电脑。重启后,在终端输入以下命令:

    nvidia-smi

    如果你能看到一个类似GPU信息列表的表格,里面包含了驱动版本、CUDA版本和你的显卡信息,那么恭喜你,第一步成功完成!

    (请注意,此为示例图片链接,实际应替换为真实截图)

  • 第二步:安装Docker和NVIDIA Container Toolkit

    传统Docker无法直接调用GPU,我们需要NVIDIA官方提供的NVIDIA Container Toolkit作为桥梁,让Docker容器能够“看见”并使用我们的显卡。

  • 安装Docker Engine: 我们将遵循Docker官方的安装脚本,这是最省心的方式。

    curl -fsSL https://get.docker.com -o get-docker.sh
    sudo sh get-docker.sh

    安装完成后,为了避免每次使用docker命令都需要加sudo,可以将当前用户添加到docker用户组:

    sudo usermod -aG docker $USER

    注意: 执行此命令后,你需要退出当前终端会话并重新登录(或者直接重启系统)才能让权限生效。

  • 安装NVIDIA Container Toolkit: 这部分同样遵循NVIDIA官方的安装流程。

    # 添加NVIDIA包的GPG密钥和仓库
    distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \\
    && curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg –dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \\
    && curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \\
    sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \\
    sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

    # 更新包列表并安装
    sudo apt-get update
    sudo apt-get install -y nvidia-container-toolkit

  • 配置Docker守护进程并重启: 安装完成后,我们需要配置Docker,让它知道可以使用NVIDIA的运行时。

    sudo nvidia-ctk runtime configure –runtime=docker
    sudo systemctl restart docker

  • 验证GPU在Docker中是否可用: 这是至关重要的一步,用于检验我们前面的所有工作是否正确。

    sudo docker run –rm –gpus all nvidia/cuda:12.1.1-base-ubuntu22.04 nvidia-smi

    如果这条命令的输出和你在宿主机上直接运行 nvidia-smi 的结果完全一样,那么恭喜你,你的Docker环境已经成功打通了GPU!

    参数解释:

    • –rm: 容器退出后自动删除,用于临时测试,避免留下垃圾。
    • –gpus all: 这是关键参数,由NVIDIA Container Toolkit提供。它告诉Docker将宿主机上所有可用的GPU都分配给这个容器。你也可以指定具体的GPU,如 –gpus '"device=0,1"'。
    • nvidia/cuda:12.1.1-base-ubuntu22.04: 这是一个NVIDIA官方提供的基础CUDA镜像,我们用它来快速启动一个包含nvidia-smi命令的环境进行测试。
  • 第三步:准备数据目录和模型文件

    为了方便管理模型、输出图片和配置文件,我们不会把这些数据放在容器内部(否则容器一删除,数据就全没了)。正确的做法是在宿主机上创建好目录,然后将它们“挂载”到容器里。

    在你的用户主目录下创建一个工作区,例如sd-webui:

    cd ~
    mkdir -p sd-webui/models/Stable-diffusion
    mkdir -p sd-webui/models/VAE
    mkdir -p sd-webui/models/Lora
    mkdir -p sd-webui/outputs
    mkdir -p sd-webui/configs

    • models/Stable-diffusion: 用于存放你的基础大模型(.ckpt或.safetensors文件)。
    • models/VAE: 存放VAE模型,用于改善图像色彩和细节。
    • models/Lora: 存放LoRA微调模型。
    • outputs: WebUI生成的所有图片、网格图等都会保存在这里。
    • configs: 用于存放WebUI的配置文件,如config.json和ui-config.json。

    现在,去Hugging Face、Civitai(C站)等社区下载你喜欢的模型,并把它们放到对应的文件夹里。例如,将下载的基础模型文件放入 ~/sd-webui/models/Stable-diffusion/。

    第四步:运行Stable Diffusion WebUI容器

    万事俱备,只欠东风。现在,我们将使用一条docker run命令来启动我们的WebUI服务器。这里我们选用一个社区维护良好、更新及时的Docker镜像,例如 ghcr.io/automatic1111/stable-diffusion-webui-docker:latest 或其他你信任的镜像源。

    docker run -d \\
    –name stable-diffusion-webui \\
    –gpus all \\
    -p 7860:7860 \\
    -v ~/sd-webui/outputs:/home/user/outputs \\
    -v ~/sd-webui/models:/home/user/models \\
    -v ~/sd-webui/configs/ui-config.json:/home/user/ui-config.json \\
    -v ~/sd-webui/configs/config.json:/home/user/config.json \\
    –env CLI_ARGS="–xformers –enable-insecure-extension-access –listen" \\
    ghcr.io/automatic1111/stable-diffusion-webui-docker:latest

    让我们来逐行拆解这条堪称“天书”的命令,这部分是全文的精髓:

    • docker run -d:

      • run: 运行一个新容器。
      • -d (detach): 以“分离模式”在后台运行容器,这样你关闭终端后,服务也不会中断。
    • –name stable-diffusion-webui:

      • 给你的容器起一个好记的名字,方便后续管理(如停止、启动、删除)。
    • –gpus all:

      • 再次强调,这是让容器使用GPU的关键。
    • -p 7860:7860:

      • -p (publish): 端口映射,格式为 宿主机端口:容器端口。WebUI默认在容器的7860端口上运行,我们把它映射到宿主机的7860端口。这样,我们就可以通过访问宿主机的IP地址和7860端口来打开WebUI界面了。
    • -v ~/sd-webui/…:/home/user/… (四行):

      • -v (volume): 数据卷挂载,格式为 宿主机绝对路径:容器内绝对路径。这是实现数据持久化的核心。
      • 第一行: 将宿主机的outputs目录挂载到容器内的outputs目录。你在WebUI里生成的图片,会直接出现在宿主机的~/sd-webui/outputs下。
      • 第二行: 将宿主机的整个models目录挂载到容器内的models目录。容器启动时,WebUI会自动扫描这个目录加载所有模型。
      • 第三、四行: 分别将两个重要的配置文件挂载出来。这样你对UI的布局修改、对WebUI的参数设置都会被保存在宿主机上,下次重启容器时配置不会丢失。
    • –env CLI_ARGS="…":

      • –env (environment): 设置环境变量。这里的CLI_ARGS是这个特定Docker镜像设计好的一个变量,它允许我们向WebUI的启动脚本传递命令行参数。
      • –xformers: 强烈推荐开启!它是一个能大幅提升NVIDIA显卡生成图片速度、降低显存占用的优化库。
      • –enable-insecure-extension-access: 允许WebUI通过URL直接安装插件,方便扩展功能。
      • –listen: 让WebUI监听所有网络接口,而不仅仅是localhost。这样,局域网内的其他设备(比如你的iPad或另一台电脑)才能通过你服务器的IP地址访问WebUI。如果你只在本地使用,可以去掉这个参数。
    • ghcr.io/automatic1111/stable-diffusion-webui-docker:latest:

      • 要使用的Docker镜像名称和标签(tag)。latest通常指向最新版本。

    执行完这条命令后,Docker会开始从网络上拉取镜像(第一次会比较慢)。拉取并启动成功后,你可以使用以下命令查看容器的运行日志:

    docker logs -f stable-diffusion-webui

    当你看到日志输出中出现 Running on local URL: http://0.0.0.0:7860 时,就代表WebUI服务器已经成功启动了!

    现在,打开你的浏览器,访问 http://你的服务器IP地址:7860。熟悉的AUTOMATIC1111界面应该已经展现在你眼前了。享受AI创作的乐趣吧!


    结语与展望

    通过Docker,我们把一个原本极其复杂的环境部署过程,简化成了一套标准、可复现的流程。这套流程不仅适用于Stable Diffusion WebUI,也同样适用于ComfyUI等其他AI工具,甚至是你自己开发的任何Web应用。它为你带来的,是前所未有的部署效率和环境自由。

    希望这篇超详细的教程能帮到正在为此苦恼的你。掌握Docker,就像是为你的技术武器库增添了一件瑞士军刀,无论是在设计、开发还是运维的道路上,它都将成为你强大的助力。

    持续关注我,每天学习几个实用的设计与开发的小技巧。一段时间之后,你会发现自己的技能树悄然生长;假以时日,这必将转化为你职业道路上不可或缺的竞争力。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 告别繁琐,一键封神!用Docker在Ubuntu上部署WebUI服务器的终极保姆级教程
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!