Skip to content

Gabriel-lin/docker-ubuntu-desktop-1

 
 

Repository files navigation

Ubuntu Desktop based on Docker

DockerHub

1.简介

该项目提供了一个docker镜像,可以将虚拟桌面系统(xfce4桌面)运行于ubuntu headless主机上的docker容器中,并且可以使用ssh或远程桌面访问,你几乎可以把容器当作虚拟机使用。

注意,如果需要使用GPU硬件加速的OpenGL渲染,这里的宿主机需要安装Ubuntu Desktop系统(自带桌面系统,不支持宿主机为Ubuntu Server系统),可使用HDMI欺骗器代替显示器。

ubuntu-desktop Docker镜像特性:

  • 支持ssh远程访问,支持xfce4远程桌面访问。
  • 支持软件模拟的OpenGL渲染,可运行3D渲染软件 (如gazebo, blender)。
  • 支持GPU硬件加速的OpenGL渲染(需要Nvidia GPU支持,宿主机必须是桌面系统)
  • 自带Chrome浏览器。
  • 自带CUDA, 支持深度学习训练 (如pytorch, tensorflow)。

它可以当作ubuntu虚拟开发环境使用,适合教研室公共主机共享使用。相比虚拟机,容器是轻量级的(虽然把容器当作虚拟使用不符合容器的哲学:一个容器运行一个APP),其优点如下:

  • 启动快(秒级别)。
  • 通过隔离功能,开启多个容器,满足不同开发环境需求(避免不同软件包版本冲突)。
  • 容器之间可以方便进行共享(文件共享,网络共享)
  • 迁移方便(导出镜像,可在不同主机上迁移环境)。
  • 支持远程桌面与ssh,几乎满足大部分开发需求。

xfce4(远程)桌面示意图

实现原理:

采用nvidia/opengl为基础镜像 + xfce4桌面软件 + nomachine远程桌面软件(支持VirtualGL),从而实现3D GUI程序运行,替换基础镜像为nvidia/cudagl,从而实现支持cuda的能力。

镜像TAG:

支持的镜像TAG对应Github Tag,具有两类:

  • 基本镜像(基于nvidia/opengl基础镜像)的TAG:18.04, 20.04
  • 支持CUDA的镜像(基于nvidia/cudagl基础镜像)的TAG:18.04-cu10.1, 20.04-cu11.0, 20.04-cu11.2.0等, 命名规则为{UBUNTU VERSION}-cu{CUDA VERSION}, 其中cuda的版本号支持列表见Docker Image <nvidia/cudagl>

目前支持CUDA版本号:

  • Ubuntu18.04支持的CUDA版本号:10.1, 10.2, 11.0, 11.1, 11.2.0, 11.3.0, 11.4.0
  • Ubuntu20.04支持的CUDA版本号:11.0, 11.1, 11.2.0, 11.3.0, 11.4.0

2.基本使用

2.1 准备工作

  • 安装nvidia驱动
  • 安装docker和nvidia-container-runtime.

注意nvidia版本驱动,过老的版本驱动不支持新版本的cuda容器.

2.2 创建容器

docker pull: 国内用户可使用阿里云仓库

docker pull registry.cn-shenzhen.aliyuncs.com/gezp/ubuntu-desktop:20.04-cu11.0
# 重命名镜像
docker image tag registry.cn-shenzhen.aliyuncs.com/gezp/ubuntu-desktop:20.04-cu11.0 gezp/ubuntu-desktop:20.04-cu11.0
docker rmi registry.cn-shenzhen.aliyuncs.com/gezp/ubuntu-desktop:20.04-cu11.0

docker run: 创建并运行容器

# 宿主机需要运行xhost允许所有用户访问X11服务(运行一次即可),宿主机环境变量$DISPLAY必须为0
xhost +
# 支持ssh和 3D GUI
docker run -d --restart=on-failure \
    --name my_workspace \
    --cap-add=SYS_PTRACE \
    --gpus all  \
    --shm-size=1024m \
    -v /tmp/.X11-unix:/tmp/.X11-unix:rw \
    -p 10022:22  \
    -p 14000:4000  \
    gezp/ubuntu-desktop:20.04-cu11.0

可以运行在云服务器(如阿里云,腾讯云等)上,但是不支持GPU 3D加速。

2.3 连接容器

ssh连接

#ssh访问容器
ssh ubuntu@host-ip -p 10022
  • 用户名和密码均为ubuntu
  • 可使用vscode + remote ssh插件访问

远程桌面连接

  • 下载nomachine软件,ip为主机ip,端口为14000,进行连接即可

2.4 3D硬件渲染加速

测试VirtualGL

vglrun glxinfo | grep -i "opengl"
  • 显示包含NVIDIA GPU型号,则表示正确

host主机上的DISPLAY必须为:0 .

运行3D软件时,需要加上vglrun命令前缀,如vglrun gazebo

2.4 CUDA使用说明

需要在.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镜像的说明。

3. 本地镜像构建

例如

git clone https://github.com/gezp/docker-ubuntu-desktop.git
cd docker-ubuntu-desktop
# for 20.04 (基于nvidia/opengl基础镜像)
./docker_build.sh 20.04
# for 20.04-cu11.0  (基于nvidia/cudagl基础镜像)
./docker_build.sh 20.04-cu11.0

About

Docker Image for Ubuntu Desktop which support HW GPU accelerated GUI apps. you can access the Container with ssh or remote desktop, just like Cloud VM.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Dockerfile 44.2%
  • Scheme 32.1%
  • Shell 23.7%