安裝docker,並設置鏡像加速器
curl -sSL https://get.daocloud.io/docker | sh
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://g5uyhrgn.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
GUI的准備工作
-
在宿主機中下載x11軟件並開放權限
sudo apt-get install x11-xserver-utils
xhost + #是開放權限,允許所有用戶,當然包括docker,訪問X11 的顯示接口,正常返回access control disabled, clients can connect from any host
xhost 是用來控制X server訪問權限的。通常當我們從宿主機登陸到docker上,運行docker上的應用程序時,做為應用程序來說,宿主機是client,但是作為圖形來說,是要在宿主機上顯示的,需要使用宿主機的Xserver,所以宿主機是server。因此在登陸到docker前,需要在宿主機上運行xhost +來使其它用戶能夠訪問宿主機的Xserver。xhost + 是使所有用戶都能訪問宿主機的Xserver.xhost + ip使ip上的用戶能夠訪問宿主機的Xserver。
有時在執行xhost會報出以下錯誤
xhost: unable to open display "XXXX"
解決方法:設置DISPLAY變量,DISPLAY用來設置將圖形顯示到何處,DISPLAY 環境變量格式如下hostname: displaynumber.screennumber
,在某些機器上,可能有多個顯示設備共享使用同一套輸入設備,例如在一台PC上連接兩台CRT顯示器,但是它們只共享使用一個鍵盤和一個鼠標。這一組顯示設備就擁有一個共同的displaynumber,而這組顯示設備中的每個單獨的設備則擁有自己單獨的 screennumber。displaynumber和screennumber都是從零開始的數字。這樣,對於我們普通用戶來說, displaynumber、screennumber就都是0。 hostname指Xserver所在的主機主機名或者ip地址, 圖形將顯示在這一機器上。
export DISPLAY=:0.0
xhost +
-
根據dockerfile創建image鏡像
docker build -f dockerfile -t 鏡像名 .
-
創建容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
docker run -dit -P -e DISPLAY=$DISPLAY --privileged --network=host -v /tmp/.X11-unix:/tmp/.X11-unix:rw -v /dev/bus/usb:/dev/bus/usb -v /home/lfxs/StudioData:/StudioData --name gui01 mydb:0.1 /bin/bash #-d: 后台運行容器,並返回容器ID #-i: 以交互模式運行容器,通常與 -t 同時使用; #-P: 隨機端口映射,容器內部端口隨機映射到主機的端口 #-p: 指定端口映射,格式為:主機(宿主)端口:容器端口 #-e:設置環境變量 #--privileged 是否允許Docker運行的容器擁有root權限 #--network指定容器的網絡連接類型,支持 bridge/host/none/container: 四種類型;常用bridge和host #-v:綁定一個卷 #--name :容器名
通過ssh 連接docker,並運行GUI程序
命令:
ssh -Y 用戶名@容器名 -p port
說明:在/etc/hosts 中指定ip和容器的對應關系,添加192.168.2.68 gui01
,由於network設置為hosts模式,容器和宿主機共用一個network namespaces,使用宿主機的IP和port。
然后通過命令/etc/init.d/ssh status
查看宿主機和容器中ssh是否是開啟的,如果沒有開啟使用命令
systemctl restart sshd.service
打開/etc/ssh/sshd_config,添加端口號
port=10002
重啟ssh服務
/etc/init.d/ssh restart
還有以下幾種方式登錄docker
ssh -Y -l 用戶名 ip -p port
ssh -Y 用戶名@ip -p port
測試docker中GUI在宿主機上顯示,在docker中下載xarclock
sudo apt-get install xarclock
xarclock
遇到的問題
- 創建容器時如果設置network為host模式時,要指定在容器中執行/bin/bash。如果不指定,可能會出現容器啟動不了的問題。
- 修改lightmd.conf導致圖形界面崩潰。
https://blog.csdn.net/u012570215/article/details/102946670