Webtops——用docker運行Linux桌面
容器的大流行讓很多東西虛擬化、容器化變成了現(xiàn)實。很多人還希望更多,想在容器中跑整個OS,將容器當虛擬機用。一般來說這個想法不是推薦的做法,但并非是無法實現(xiàn)。今天蟲蟲就給大家介紹一個項目Webtops,通過它可以讓用戶在其Web瀏覽器中運行Linux桌面以容器化方式部署。
概述
Webtops項目和一般的短小精悍,單一功能Docker哲學背道而馳,但是要實現(xiàn)功能就必須如此。該項目需要在容器中運行以下的服務:
(1) Guacamole Server:Apache基金會下的無客戶端一個遠程桌面網(wǎng)關。這是實現(xiàn)Web(瀏覽器)訪問遠程桌面的關鍵。
(2) xrdp Server:提供使用RDP(Microsoft遠程桌面協(xié)議)的遠程計算機的圖形登錄。xrdp接受來自各種平臺RDP客戶端的連接,包括reeRDP,rdesktop,NeutrinoRDP和Microsoft遠程桌面客戶端。
(3) Pulseaudio:一個跨平臺的、可通過網(wǎng)絡工作的聲音服務。
(4) Custom nodejs frontend:
(5) Webtops項目可以做到:
- 像素渲染的完美分辨率
- 基本的窗口管理器
- 音頻支持
- 使用RDP協(xié)議
- 剪貼板支持
- 屏幕鍵盤支持
- 遠程文件上傳/下載管理
Webtops設計時候考慮了容器化,以構建基本鏡像的設計理念進行了開發(fā),所以支持應用擴展,可以輕松地將任何Linux GUI應用程序嵌入進來。在桌面環(huán)境中,用戶可以通過需求安裝特定的軟件包并根據(jù)需要自定義。
安裝部署
由于基于容器化部署,安裝非常簡單,直接一個docker命令就可以完成部署:
- docker run -d \
- --name=webtop \
- -e PUID=1000 \
- -e PGID=1000 \
- -e TZ=Europe/London \
- -p 3000:3000 \
- -v /path/to/data:/config \
- --shm-size="1gb" \
- --restart unless-stopped \
- ghcr.io/linuxserver/webtop
然后通過瀏覽器訪問:localhost:3000,就可以訪問,這是Alpine XFCE桌面環(huán)境:
屏幕的左側是一個箭頭,該箭頭可以用來擴展某些內置的遠程交互功能的菜單,也可以使用ctrl + alt + shift組合鍵打開和關閉此菜單:
在彈出菜單中,可以啟動文件瀏覽器,彈出式軟鍵盤(手機或者觸摸板用)以及將剪貼板。
文件瀏覽器中,直接實現(xiàn)用戶當前系統(tǒng)和遠程系統(tǒng)的文件上傳下載和其他一些操作。
用戶當前剪貼板中的內容,先復制到該剪貼板框中,后續(xù)才能在遠程機器中使用。
偏好設置
目前除了Alpine外也支持Ubuntu,支持的桌面系統(tǒng)包括:
- XFCE
- KDE
- MATE
- i3
- Openbox
- IceWM
訪問認證
默認情況下,鏡像啟用abc用戶,無需認證就可以訪問。abc用戶默認密碼也是 abc。如果要更改此密碼并在訪問界面時啟用身份驗證,需要通過在服務器上執(zhí)行:
- docker exec -it webtop passwd abc
然后通過localhost:3000/?login=true訪問
默認會打開xrdp登錄管理器,可以在其中輸入用戶名和密碼。
更新
如前已經(jīng)說過容器化的Linux桌面環(huán)境實際上與經(jīng)典Docker哲學相悖,因此強烈建議不要使用通過Docker來處理鏡像來更新??梢允褂貌僮飨到y(tǒng)的包管理更新系統(tǒng)
對于Alpine用apk:
- sudo apk upgrade
Ubuntu則使用apt:
- sudo apt-get update && sudo apt-get dist-upgrade –y
自定義
編譯鏡像
為了讓基礎鏡像中嵌入所需的的APP,比如要添加Firefox容器時候示例Dockerfile:
- FROM lsiobase/rdesktop-web:alpine
- RUN \
- echo "**** install packages ****" && \
- apk add --no-cache \
- firefox-esr && \
- echo "**** cleanup ****" && \
- rm -rf \
- /tmp/*
- # add local files
- COPY /root /
- # ports and volumes
- EXPOSE 3000
- VOLUME /config
除了安裝應用程序外,還需要在啟動文件中/root/defaults/autostart添加firefox的啟動點。
就是這樣,當容器啟動后, Firefox將在基本的Openbox gui中啟動:
還有一個LibreOffice應用的Dockerfile文件如下:
- FROM lsiobase/rdesktop-web:alpine
- # set version label
- ARG BUILD_DATE
- ARG VERSION
- ARG LIBREOFFICE_VERSION
- LABEL build_version="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DATE}"
- LABEL maintainer="thelamer"
- RUN \
- echo "**** install packages ****" && \
- apk add --no-cache --virtual=build-dependencies \
- curl && \
- if [ -z ${LIBREOFFICE_VERSION+x} ]; then \
- LIBREOFFICE_VERSION=$(curl -sL " dl-cdn.alpinelinux.org/alpine/v3.13/community/x86_64/APKINDEX.tar.gz" | tar -xz -C /tmp \
- && awk '/^P:libreoffice$/,/V:/' /tmp/APKINDEX | sed -n 2p | sed 's/^V://'); \
- fi && \
- apk add --no-cache \
- libreoffice==${LIBREOFFICE_VERSION} \
- tint2 && \
- echo "**** openbox tweaks ****" && \
- sed -i \
- 's/NLMC/NLIMC/g' \
- /etc/xdg/openbox/rc.xml && \
- echo "**** cleanup ****" && \
- apk del --purge \
- build-dependencies && \
- rm -rf \
- /tmp/*
- # add local files
- COPY /root /
- # ports and volumes
- EXPOSE 3000
- VOLUME /config
自啟動
默認只有當用戶登錄Web界面時才會啟動桌面應用程序,如果需要在容器啟動時運行應用程序,則需要設置環(huán)境變量:
- -e GUIAUTOSTART=true
如果用戶將默認容器中的密碼更改為abc,還需要設置密碼選項以確保應用程序自動啟動:
- -e PASSWORD=yourpassword
總結
Webtops項目,給了我們一個下容器中運行Linux桌面的選擇,可以做一個演示、臨時系統(tǒng)中使用,當然更多的使用場景還需要大家去嘗試探索,由于是基于容器部署,非常便捷,嘗試也幾乎沒有任何的成本。