在Docker容器中執行GUI圖形應用的開源專案

banq發表於2022-04-01

如果我們想在 Docker 容器中執行桌面 GUI 應用程式以將它們用作更大系統中的元件怎麼辦?例如,如果我們在 Docker 中執行 Firefox,我們可以在容器之間明確分離瀏覽器狀態。
假設我們在 macOS 或其他 Unix/Linux 系統上安裝了 Docker。我們如何在 Docker 容器中執行 Firefox?作為第一次嘗試,讓我們考慮以下 Dockerfile:

FROM ubuntu:latest
RUN apt-get update && apt-get install -y firefox x11vnc xvfb
RUN echo "exec firefox" > ~/.xinitrc && chmod +x ~/.xinitrc
CMD ["x11vnc", "-create", "-noxrecord", "-noxfixes", "-noxdamage", "-forever", "-passwd", "trustno1"]


我們使用ubuntu基礎映象並安裝 Firefox 有兩個額外的東西:
  • x11vnc - 用於遠端訪問基於 X11 的桌面環境的 VNC 伺服器。將其視為窮人 TeamViewer。
  • xvfb - X11 伺服器的一個版本,它不需要任何實際的顯示硬體,而是將影片渲染到 RAM 中。

我們將 X11 配置為在啟動時執行 Firefox,並使用允許在客戶端與 macOS 互操作的確切引數啟動 x11vnc。
構建和執行這個容器相當簡單:

$ docker build -t firefox-test-1 . $ docker run -p 5900:5900 --rm firefox-test-1


讓我們也來看看一些致力於在Docker容器內執行GUI應用的開源專案:

x11docker

x11docker是一個在Linux主機系統中執行GUI應用程式的解決方案,它在某些方面更先進(GPU訪問、外圍裝置支援、安全改進),但受限於現有的Linux桌面環境,不能正確支援Linux以外的作業系統。

要透過x11docker啟動GUI應用程式,就必須為該應用程式構建或拉動Docker容器,並以與x11docker相容的方式編寫(Github和Docker Hub上有一些例子),然後透過x11docker CLI工具啟動它。

Kasm Workspaces

Kasm Workspaces是一個開源平臺,它將這一想法進一步推進,甚至提供了一個SaaS版本,由他們為你託管。

像x11docker一樣,它為Firefox(和其他瀏覽器)、Slack、Discord、VS Code等常見應用提供了一堆預先開發的Docker映象。整個Linux桌面環境可以透過管理介面上的一鍵安裝來實現。與前面的例子一樣,遠端桌面也是透過網路瀏覽器來實現的。然而,Kasm Workspaces使用的是KasmVNC--一個由同一家公司開發的VNC解決方案。

docker-android
到目前為止,我們談到了在容器內執行Linux GUI應用程式。但是,執行Android應用程式呢?事實證明,可以在Docker容器內執行整個安卓模擬器,並透過novnc介面,使用名為docker-android的解決方案,將其暴露出來。儘管它警告說不完全支援巢狀式虛擬化,但我還是能夠透過以下命令執行它。

$ docker run --privileged -d -p 6080:6080 -p 5554:5554 -p 5555:5555 -e DEVICE="Samsung Galaxy S6" --name android-container budtmo/docker-android-x86-8.1



 

相關文章