Linux docker(03)可使用GPU渲染的x11docker实战总结

2023-05-16

该系列文章的目的旨在之前的章节基础上,使用x11docker构建一个可以使用GPU的docker容器。该容器可以用于3D图形渲染/XR 等使用GPU渲染的程序调试和运行。

0 why docker

为什么非要用x11docker,而不是其他的docker呢?

因为一般的docker是不能够使用GPU来渲染3D图形化程序的,而且即便是可以运行3d图形化程序,默认也是使用CPU而不是GPU的。也就是说Docker本身是不提供允许使用图形用户界面运行应用程序的显示服务器。而x11docker 填补了空白。它运行一个X 显示服务器并将其提供给容器。X 服务器可以从主机或图像x11docker/xserver的容器中运行。此外 x11docker 还进行了一些安全设置以增强容器隔离并避免 X 安全漏洞。这允许沙盒环境很好地保护主机系统免受可能的恶意或错误软件的侵害。

1 了解和使用x11docker基础

@1 x11docker的github网址-> GitHub - mviereck/x11docker

@2 下载x11docker专属镜像。x11docker的镜像需要单下载,因为最后要使用x11docker命令来执行,不可以是任意的镜像,而是在docker hub网站上 以x11docker为前缀命名的docker镜像,检索链接如下(根据自己的实际需求下载镜像即可xfce、xserver、lxde等等。。。):

https://hub.docker.com/search?q=x11docker

@3 下载x11docker,使用如下命令:

curl -fsSL https://raw.githubusercontent.com/mviereck/x11docker/master/x11docker | sudo bash -s -- --update

@4 测试x11docker

命令有了,镜像也有了,接下来就可以执行命令看看效果了,比如执行以下命令:

x11docker --desktop --size 320x240 x11docker/lxde

就会直接显示桌面程序如下所示:

 这里的desktop命令表示桌面版程序,--size表示显示窗口的大小。

2 x11docker构建自定义的GPU运行环境

2.1 镜像操作

#1 下载镜像
$docker pull x11docker/xfce

#2 运行容器并设置好共享文件夹
$docker run -it -v /home/share/:/home/share/ --name devt3 x11docker/xfce /bin/bash

#3 开始apt update 然后按需install各种软件,执行结束后exit
$apt update
$apt install ...

#4 commit操作,将容器压缩到镜像中,这样就可以docker push提交到自己的服务器了
$docker commit c83e26ce754e x11docker/xfce:v20 //将container容器直接输出到image镜像中。

这里下载好母板镜像后 根据自己的需要install各种软件,最后exit退出并将打包好的镜像提交到自己的服务器中。

2.2 直接运行镜像导致黑屏,怎么解?

使用Dockerfile编译出可运行的x11docker镜像。这里注意,经过安装软件后的镜像无法直接再用x11docker 运行,会黑屏,这时候怎么办呢?使用Dockerfile编译出一个特殊版本 x11docker/xfce:v20。这里使用了一个Dockerfile,内容如下

# x11docker/xfce
# 
# Run XFCE desktop in docker. 
# Use x11docker to run image. 
# Get x11docker from github: 
#   https://github.com/mviereck/x11docker 
#
# Examples: 
#   - Run desktop:
#       x11docker --desktop x11docker/xfce
#   - Run single application:
#       x11docker x11docker/xfce thunar
#
# Options:
# Persistent home folder stored on host with   --home
# Shared host folder with                      --share DIR
# Hardware acceleration with option            --gpu
# Clipboard sharing with option                --clipboard
# ALSA sound support with option               --alsa
# Pulseaudio sound support with option         --pulseaudio
# Language setting with                        --lang [=$LANG]
# Printing over CUPS with                      --printer
# Webcam support with                          --webcam
#
# Look at x11docker --help for further options.

FROM /x11docker/xfce:v20

RUN apt-get update && apt-mark hold iptables && \
    env DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
      dbus-x11 \
      psmisc \
      xdg-utils \
      x11-xserver-utils \
      x11-utils && \
    env DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
      xfce4 && \
    env DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
      libgtk-3-bin \
      libpulse0 \
      mousepad \
      xfce4-notifyd \
      xfce4-taskmanager \
      xfce4-terminal && \
    env DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
      xfce4-battery-plugin \
      xfce4-clipman-plugin \
      xfce4-cpufreq-plugin \
      xfce4-cpugraph-plugin \
      xfce4-diskperf-plugin \
      xfce4-datetime-plugin \
      xfce4-fsguard-plugin \
      xfce4-genmon-plugin \
      xfce4-indicator-plugin \
      xfce4-netload-plugin \
      xfce4-places-plugin \
      xfce4-sensors-plugin \
      xfce4-smartbookmark-plugin \
      xfce4-systemload-plugin \
      xfce4-timer-plugin \
      xfce4-verve-plugin \
      xfce4-weather-plugin \
      xfce4-whiskermenu-plugin && \
    env DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
      libxv1 \
      mesa-utils \
      mesa-utils-extra && \
    sed -i 's%<property name="ThemeName" type="string" value="Xfce"/>%<property name="ThemeName" type="string" value="Raleigh"/>%' /etc/xdg/xfce4/xfconf/xfce-perchannel-xml/xsettings.xml
RUN apt-get install libxcb-xkb-dev 

使用如下命令编译Dockerfile:

$docker build -f Dockerfile -t x11docker/xfcetestXXX

这样使用x11docker 运行该镜像就不会有问题了。

2.3 窗口显示无法使用GPU,怎么配置都不行,怎么办?

在调试时遇到一个新问题:使用这几个参数 要么使用--gpu后就只能全屏显示,要么无法显示,要么即便可以显示但无法使用GPU,一个黑屏卡在那里不动。后来仔细分析了下这几个参数。

  • --gpu: 使用gpu加速
  • --desktop:桌面版
  • --xorg:在X环境中使用的选项

并未发现哪里不妥,正常情况是--desktop和 --gpu肯定是够了,但就是显示不正确。后来对x11docker/xserver这个镜像做了一些了解,发现有了x11docker/xserver这个镜像,x11docker可使用的扩展参数就多了,有--kwin --nxagent --weston --weston-xwayland --xephyr --xorg --xpra --xpra-xwayland --xvfb --xwayland。猜想weston的一些参数可解决该问题,于是尝试pull镜像x11docker/xserver,这时再使用如下命令就不会有问题了。详细命令如下:

$docker pull x11docker/xserver
$sudo x11docker --desktop x11docker/xfcetestXXX --gpu --share /home/share

这样就可以在窗口程序中直接使用GPU了。大功告成。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux docker(03)可使用GPU渲染的x11docker实战总结 的相关文章

  • freertos通信---信号量与队列

    嘿嘿 又见面了 到这里 任务的调度和切换 你已经有了深刻的理解 接下来 自然而然就是任务间的通讯咯 把相关的任务串联起来 就形成了程序的基本架构 一 队列 为什么要先讲解队列了 因为信号量就是利用队列来实现的 走 一起瞅瞅 1 1队列的创建
  • freertos通讯---信号量与队列

    哈喽 又见面了 一 信号量 1 1创建二进制信号量 define xSemaphoreCreateBinary xQueueGenericCreate UBaseType t 1 semSEMAPHORE QUEUE ITEM LENGTH
  • 关于python调用C++

    关于python调用C C 43 43 查了很多相关资料 xff0c 可以通过ctypes模块 SWIG等一些方法 简单的类似单个头文件单个cpp文件都可以实现 xff0c 但是大恒给的C 43 43 包含驱动程序 xff0c 需要在属性里
  • freertos通讯-通知

    通知是什么 xff1f 其实我们之前就见过 它就在任务结构体中 再来回顾下 if configUSE TASK NOTIFICATIONS 61 61 1 volatile uint32 t ulNotifiedValue volatile
  • freertos软件定时器

    哈喽 这篇文章是freertos解析的最后一篇文章 我们将会讲解一个利用任务延时实现的软件定时器 1 创建 timer结构体和创建一目了然 看看初始化函数 是不是有点熟悉 timer的管理有点类似任务的管理 如果是第一次创建则初始化time
  • 蓝牙5.1的ble那些事儿

    既然要说5 1的那些事儿 那么必须的聊聊蓝牙4 0 本文就不在此长篇大论班门弄斧了 要了解4 0的同学请出门左拐直接去参考蜗窝科技大佬的文章 本人觉得对于想入门全面了解4 0的同学 此文章是不二选择的经典 在此只有膜拜的份了 不是广告哈哈
  • 蓝牙5.1的ble那些事儿

    到这里 对于非连接状态应该有一些新的认识了 接下来 顺其自然当然就是连接了 你谈对象 忙活半天 当然是想干点什么事情了 当然也有老司机翻车 连接上后 一端要主动向另一端发起问候 否则长时间不联系 那么就断开好了 主动问候的一端我们称之为ma
  • Http auth认证的两种方式Basic方式和 Digest认证

    Http Basic Auth 方式 当访问一个Http Basic Auth 网站的时候需要提供用户名 xff0c 密码 xff0c 否则会返回401 without authoration Http Basic Authenticati
  • while无限循环

    无限循环写法while 1 循环体内部可以用break语句跳出循环 while 1
  • 不同操作系统下的程序入口点分析

    转自 http hi baidu com liu bin0101 blog item 03e3a9ec4e0fd5d72e2e21b9 html 程序入口与编译器没有什么关系 关键是链接链接器 UNIX的用的ld和WINDOWS下用的LIN
  • rv-player 不靠谱之rvio

    最近忽然发现为动画组写过的一个maya内置工具不能用了 xff0c 工具的作用是使用rvio hw exe转换playblast出的tif序列图 xff0c 生成带watermark的mov文件 之前在Maya2013上一直用的好好地 xf
  • 树莓派 Raspberry Pi SD卡系统备份与还原

    近半年时间用来监控陆龟的树莓派 Raspberry Pi 还算稳定 xff0c 可到了冬天龟箱里的加热灯长时间加热导致树莓派温度很高 xff0c 时不时的自动重启 如果每次都能正常起来也就罢了 xff0c 可偶尔会挂不上SD卡的文件系统直接
  • 2022-12-18 CMakelists指定CMAKE_BUILD_TYPE为Debug或者Release

    今天编译代码的时候遇到古怪的事情 xff0c 在Cmakelists txt中指定了编译版本 xff0c build的时候输出一句 xff1a cpptools The build configurations generated do n
  • 5.FreeRTOS任务切换的简易分析

    FreeRTOS任务切换的简易分析 架构 xff1a Cortex M3版本 xff1a FreeRTOS V9 0 0前言 xff1a 之前分析了创建任务 启动调度器 xff0c 在做完这些工作后 xff0c 就是该完成所有RTOS的最核
  • vue.js:634 [Vue warn]: Avoid mutating a prop directly since the value will be overwritten whenever t

    其实是前两天了解了v mdel的原理 lt v model原理 gt lt div id 61 34 demo 34 gt lt input value 61 34 value 34 64 input 61 34 price 61 even
  • vscode终端加git的方法

    记录一下 xff0c vscode添加git终端的方法 1 先打开首选项 61 gt 设置 xff0c 搜 shell window xff0c 然后找到setting json 2 添加代码 xff08 设置git的位置 xff0c 以及
  • jquery的简单介绍

    jQuery也包含了对ajax的封装 什么是jQuery jQuery是一门轻量的 免费开源的JS函数库 xff0c 主要作用是用于简化JS代码 轻量的 xff1a 代码或项目对该技术的依赖程度 xff0c 依赖程度越低 xff0c 这个技
  • 图像质量评估(2) -- 图像质量相关参数:分辨率

    分辨率 xff08 解析度 xff0c Resolution xff09 分辨率使我们经常听到的一个词 xff0c 它代表了图像的精细程度 xff0c 也代表了图像的大小 分辨率决定了在这种大小下 xff0c 输出信号是否能够包含足够多的信
  • 图像质量评估(5) -- 畸变(Distortion)

    当图像中原本应该是直线的地方看起来发生了不自然的变形或扭曲时 xff0c 我们称为图像畸变 有三种类型的镜头畸变 xff1a 桶形畸变 xff08 后文使用英文barrel xff09 xff0c 枕形畸变 xff08 后文使用pincus
  • FreeCMS视频教程 将FreeCMS导入eclipse

    项目地址 xff1a http www freeteam cn 原文地址http www freeteam cn site FreeCMS videos info 2016 5670 html

随机推荐

  • qsort的使用

    一 了解qsort xff08 1 xff09 编译器函数库万能数组排序函数排序函数 它是基于快速排序算法 xff0c 所以是q sort q 指的是 quick 快速 qsort 的函数原型是 void qsort void base s
  • 【转】粒子滤波简介以及相关技术探讨

    之前一直在做移动机器人定位算法 查来查去 xff0c 发觉粒子滤波算法 xff08 又叫MC算法 xff09 应该算是最流行的了 因此开始学习使用之 入手的是本英文书叫 probalistic robotic 很不错 xff0c 我所见到的
  • 蓝牙技术的基础知识

    1 无线电频谱 蓝牙技术使用2 4 GHz ISM频段 xff08 2400至2483 5 MHz xff09 xff0c ISM频段就是各国挪出某一段频段主要开放给工业 xff0c 科学和医学机构使用 应用这些频段无需许可证或费用 xff
  • Ubuntu下实现串口通信

    在ubuntu下使用cutecom可以接受串口消息也可以给串口发送消息 基本信息 xff1a 库 xff1a Python 的 serial 硬件 xff1a 电脑 Ubuntu18 04系统 USB Jeston AGX Xavier x
  • 4.FreeRTOS调度器的启动简易分析

    FreeRTOS调度器的启动简易分析 架构 xff1a Cortex M3版本 xff1a FreeRTOS V9 0 0前言 xff1a 上一篇我分析了关于一个任务的创建过程 xff0c 既然创建了任务 xff0c 自然是要用 那么Fre
  • ARM40-A5应用——与网络时间的同步1(概述)

    ARM40 A5应用 与网络时间的同步1 xff08 概述 xff09 2018 6 28 版权声明 xff1a 本文为博主原创文章 xff0c 允许转载 本文介绍ARM40 A5本地系统时间 硬件时间 时区 网络时间 ntpdate nt
  • 如何有效阅读《C++ Primer》那么厚的书

    我就是那种正面刚大部头的选手 xff0c 这些年读过的工作相关的 砖头 大概有 c 43 43 primer xff0c Windows核心编程 xff0c 算法导论 xff0c unix网络编程 xff0c STL源码剖析 等等吧 xff
  • 【Arduino 语法——结构体】

    Arduino 语法 结构体 1 0 项目结构 1 1 setup 1 2 loop 1 3 main 2 0 控制语句 2 1 break 2 2 continue 2 3 while 2 4 do while 2 5 for 2 6 i
  • 【MKS_GEN_L 主板使用说明书】

    MKS GEN L 主板使用说明书 1 描述2 特征3 主板封装3 1 尺寸图3 2 接线图3 2 1 MKS GEN L V1 0系统连接图3 2 2 MKSGEN L V2 1系统连接图 4 引脚排列5 GEN LV2 1驱动设置5 1
  • 【基于腾讯云的远程机械臂小车】

    基于腾讯云的远程机械臂小车 1 项目来源 1 1 项目概述 1 2 系统结构 1 3 设计原理 2 硬件搭建 2 1 CH32V307开发板 2 2 Arduino mega2560 2 3 富斯I6遥控器 2 4 机械臂小车 2 5 ES
  • 电脑之间快速传输超大文件(100GB以上)的方法

    引言 假如有这样一个场景 xff0c 你买了一台新的电脑 但是老电脑上存放着多年累积的数据 几百G之多 你要花时间把旧电脑上的数据导到新电脑上去 xff0c 这很费精力 于是你想有没有更快速的方法立马挪过去呢 xff1f 本文提供了五种方法
  • 《软件架构设计》(Yanlz Unity SteamVR 云技术 5G AI=VR云游戏=框架编程 架构设计 设计重构 游戏框架 框架入门 架构师 UML MVC ECS 立钻哥哥 ==)

    软件架构设计 软件架构设计 版本 作者 参与者 完成日期 备注 YanlzFramework 1910 V01 1 0 严立钻 2019 10 19 软件架构设计 发布说明 xff1a 43 43 43 43 软件架构设计 xff1a 是对
  • 进程的切换过程

    切换方式 进程的切换 xff0c 实质上就是被中断运行进程与待运行进程的上下文切换 从主观上来理解 只分为两步 xff1a 1 切换新的页表 xff0c 然后使用新的虚拟地址空间 2 切换内核栈 xff0c 加入新的内容 PCB控制块 xf
  • SLAM之camera(Intel RealSense D435)调试第一弹:Win10平台下getting started

    参见官方的getting started文档 https software intel com en us realsense d400 get started xff0c 这个quick start guide是Intel RealSen
  • Cmake的 debug和release

    Cmake的 debug版本和release版本 xff08 转 xff09 debug版本的项目生成的可执行文件需要有调试信息并且不需要进行优化 xff0c 而release版本的不需要调试信息但是需要优化 这些特性在gcc g 43 4
  • 【Kubernetes】K8s官方文档使用技巧

    学习K8s有很多技巧 其中一个技巧就是要多浏览官方 https kubernetes io zh 的说明文档 对于英语基础不是太好的 K8s官方还提供了中文版的页面 点击 文档 我们就进入了K8s文档的主页 主页上看起来也没多少知识点 别急
  • (六)定时器/计数器

    xff08 六 xff09 定时器 计数器 一 简介 定时器和计数器是两个名字 xff0c 但是原理上来说是一样的 xff0c 都是对脉冲进行计数 xff0c 区别在于时钟来源 xff0c 如果来自内部时钟信号 xff0c 由于内部时钟通常
  • Windows下令QProcess弹出CMD界面

    研究了快一下午 xff0c 来回看了QProcess文档中 xff0c 关于start execute statedDetached相关接口的调用说明 xff0c 然而并没有什么用处 差点就准备调用CreateProcess API的接口
  • Linux aarch64交叉编译之cJSON解析器

    对于cJSON项目的交叉编译 xff0c 该项目难度并不大 xff0c 灵活性也较强 该文章的目标是编译一套aarch64 Linux Debian嵌入式版本上可以运行的版本库 xff0c 基本无坑 老套路 xff0c 先把linux桌面版
  • Linux docker(03)可使用GPU渲染的x11docker实战总结

    该系列文章的目的旨在之前的章节基础上 xff0c 使用x11docker构建一个可以使用GPU的docker容器 该容器可以用于3D图形渲染 XR 等使用GPU渲染的程序调试和运行 0 why docker 为什么非要用x11docker