该项目提供了一个docker镜像,可以将虚拟桌面系统(xfce4桌面)运行于ubuntu headless主机上的docker容器中,并且可以使用ssh或远程桌面访问,你几乎可以把容器当作虚拟机使用。
它可以当作ubuntu虚拟开发环境使用,适合教研室公共主机共享使用。相比虚拟机,容器是轻量级的(虽然把容器当作虚拟使用不符合容器的哲学:一个容器运行一个APP),其优点如下:
- 通过隔离功能,可以在一台主机上快速部署多个不同开发环境
- 容器之间可以方便进行共享(文件共享,网络共享)
- 迁移方便(导出镜像,可在不同主机上迁移环境)
xfce4(远程)桌面示意图

镜像TAG:
支持的镜像TAG对应Github Tag,具有两类:
18.04, 20.04, 22.04, 24.04nvidia/cuda基础镜像)的TAG:18.04-cu11.0.3, 20.04-cu11.0.3等, 命名规则为{UBUNTU VERSION}-cu{CUDA VERSION}, 其中cuda的版本号支持列表见Docker Image <nvidia/cuda>目前支持CUDA版本号:
- Ubuntu18.04:
11.0.3,11.1.1,11.2.2- Ubuntu20.04:
11.0.3,11.1.0,11.2.2,11.3.1,11.4.3,11.5.2,11.6.2,11.7.1- Ubuntu22.04:
11.7.1,11.8.0,12.0.1,12.1.1,12.2.2,12.3.2,12.4.1,12.5.1- Ubuntu24.04:
12.5.1,12.6.2
注意nvidia版本驱动,过老的版本驱动不支持新版本的cuda容器.
docker pull: 拉取镜像
docker pull gezp/ubuntu-desktop:20.04-cu11.0.3
# 国内用户可使用阿里云仓库
# docker pull registry.cn-hongkong.aliyuncs.com/gezp/ubuntu-desktop:20.04-cu11.0.3
docker run: 创建并运行容器
# create container with nomachine
docker run -d --restart=on-failure \
--name my_workspace \
--cap-add=SYS_PTRACE \
--gpus all \
--shm-size=1024m \
-e USER=ubuntu \
-e PASSWORD=ubuntu \
-e GID=$(id -g) \
-e UID=$(id -u) \
-p 10022:22 \
-p 14000:4000 \
-p 15000:5000 \
gezp/ubuntu-desktop:20.04-cu11.0.3
# create container with kasmvnc/novnc
docker run -d --restart=on-failure \
--name my_workspace \
--gpus all \
--shm-size=1024m \
-e USER=ubuntu \
-e PASSWORD=ubuntu \
-e GID=$(id -g) \
-e UID=$(id -u) \
-e REMOTE_DESKTOP=kasmvnc \
-p 10022:22 \
-p 14000:4000 \
-p 15000:5000 \
gezp/ubuntu-desktop:20.04-cu11.0.3
ssh连接容器
#ssh访问容器
ssh ubuntu@host-ip -p 10022
访问远程桌面 (nomachine方式)
访问远程桌面 (kasmvnc/novnc方式)
https://<host-ip>:14000 (推荐chrome)访问网页版VS Code (基于code-server)
https://<host-ip>:15000 (推荐chrome)在创建容器时可使用环境变量自定义REMOTE_DESKTOP, VNC_THREADS配置
REMOTE_DESKTOP: nomachine (default) , kasmvnc, novnc.VNC_THREADS: 仅当 REMOTE_DESKTOP = kasmvnc时有效,用于设置vncserver的RectThread num. 默认是2, 设置0表示自动选择.测试VirtualGL
vglrun glxinfo | grep -i "opengl"
运行3D软件时,需要加上vglrun命令前缀,如vglrun gazebo。
需要在.bashrc文件中加入以下语句更新环境变量
export CUDA_HOME=/usr/local/cuda
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
nvidia/cudaDocker镜像的说明。例如
git clone https://github.com/gezp/docker-ubuntu-desktop.git
cd docker-ubuntu-desktop
# for 20.04
./docker_build.sh 20.04
# for 20.04-cu11.0.3 (based on nvidia/cuda)
./docker_build.sh 20.04-cu11.0.3