Docker 使用 GUI 应用
1. Docker 如何使用 GUI 应用
Linux 环境下的桌面应用程序通常使用 X11 或 Wayland 作为显示服务器。Docker 容器默认只能运行命令行应用程序,因此需要额外的配置才能运行 GUI 应用程序。
有一些技术可以让 Docker 容器运行 GUI 应用程序,例如 VNC、X11、Wayland 等。[1]
- 使用 X11 服务器,让远程 X11 应用运行在本地 X11 服务器上
- 使用 SSH X11 Forwarding 技术,让远程 X11 应用运行在本地 X11 服务器上
- 使用 VNC 虚拟桌面
- 使用远程桌面协议 RDP 等
- 使用 X11 Docker,这是一个专门用于运行 GUI 应用的 Docker 技术
本文介绍最简单的方式,也就是使 Docker 内的 X11 应用共享到本地 X11 服务器上。
2. 使用 X11 服务器
2.1 原生 Linux
许多 Linux 都带有 X11 服务器,安装也非常方便。以 Ubuntu 22.04 为例,安装 X11 服务器:
sudo apt install x11-xserver-utils
宿主开放 X11 服务器的权限:
xhost +
2.2 Windows
WSL2 现在支持 WSLg 技术。因此 Windows 支持通过 WSL2 运行 Linux GUI 应用程序(如 X11 和 Wayland),并且提供了完全集成的桌面体验。注意,这种方法仅适用于 WSL2,不支持 WSL1。[2]
在此之前,我们通常使用 VcXsrv 等 Windows 下的 X11 服务器来运行 Linux GUI 应用程序。如果想了解更多可以阅读 Run GUI app in linux docker container on windows host 这篇文章。
通过实际测试,发现使用 VcXsrv 比较卡顿,运行一些大的应用程序会长时间无响应。而 WSL2 直接运行更快速,但稳定性不高。
2.3 Mac OS
Mac OS 也可以使用 X11 服务器,但是需要安装 XQuartz。可以参考 在 MacOS 上运行 Docker GUI 程序 这篇文章来操作。
3. 创建一个番茄钟容器
中国大陆建议使用清华源构建镜像。
FROM ubuntu:22.04
ARG DEBIAN_FRONTEND=noninteractive
RUN apt update && \
apt upgrade -y && \
apt install gnome-shell-pomodoro -y && \
apt clean
CMD ["gnome-pomodoro"]
FROM ubuntu:22.04
ARG DEBIAN_FRONTEND=noninteractive
ENV TZ=Asia/Shanghai
RUN echo "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse" > /etc/apt/sources.list && \
echo "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse" >> /etc/apt/sources.list && \
echo "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse" >> /etc/apt/sources.list && \
echo "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse" >> /etc/apt/sources.list && \
apt update && \
apt upgrade -y && \
apt install gnome-shell-pomodoro -y && \
apt clean
CMD ["gnome-pomodoro"]
下面构建镜像:
docker build -t pomodoro .
运行容器:
docker run -it \
--rm \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e DISPLAY=unix$DISPLAY \
--name pomodoro \
pomodoro
运行后,会弹出一个番茄钟的窗口。
在 Docker for Windows 中运行 GUI 程序,https://www.cnblogs.com/larva-zhh/p/10531824.html ↩︎
在适用于 Linux 的 Windows 子系统上运行 Linux GUI 应用,微软,https://learn.microsoft.com/zh-cn/windows/wsl/tutorials/gui-apps ↩︎