docker搭建QtCreator开发环境

2024-05-10 14:38

本文主要是介绍docker搭建QtCreator开发环境,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

当我们在开发一个新项目或者有新员工入职时,往往会为折腾开发环境而折腾好久。但docker则可以为我们提供这样一个标准化的镜像方案,大家只需拉取开发镜像即可,而无需去从头配置开发环境。本文以配置ubuntu16.04的Qt开发环境为例加以说明,如何制作一个开发镜像。

工具准备

  1. docker
  2. Qt的安装文件Qt Downloads,该示例中使用的是:qt-opensource-linux-x64-5.12.6.run
  3. 本例中验证的宿主机环境:
    No LSB modules are available.
    Distributor ID:	Ubuntu
    Description:	Ubuntu 16.04.6 LTS
    Release:	16.04
    Codename:	xenial
    

Dockerfile

# 基础镜像
FROM ubuntu:16.04# 元数据
LABEL maintainer="fzzjoy" email="xxxxx@email.com"# 从构建上下文目录中的文件复制到新的一层的镜像内的位置
COPY qt-opensource-linux-x64-5.12.6.run /tmp/qt/# 安装依赖 (可以扩展)
RUN apt-get update \&& apt-get install -y \libxcb-keysyms1-dev \libxcb-image0-dev \libxcb-shm0-dev \libxcb-icccm4-dev \libxcb-sync0-dev \libxcb-xfixes0-dev \libxcb-shape0-dev \libxcb-randr0-dev \libxcb-render-util0-dev \libfontconfig1-dev \libfreetype6-dev \libx11-dev \libxext-dev \libxfixes-dev \libxi-dev \libxrender-dev \libxcb1-dev \libx11-xcb-dev \libxcb-glx0-dev \x11vnc \xauth \build-essential \mesa-common-dev \libglu1-mesa-dev \libxkbcommon-dev \libxcb-xkb-dev \libxslt1-dev \libgstreamer-plugins-base0.10-dev \libxkbcommon-x11-0 \&& chmod +x /tmp/qt/qt-opensource-linux-x64-5.12.6.run# 指定docker run时执行的程序
ENTRYPOINT /tmp/qt/qt-opensource-linux-x64-5.12.6.run

构建安装Qt

# Build base image (在Dockerfile的目录下执行)
docker build -t qt:base .# N.B. This is an important step any time you're running GUIs in containers
xhost local:root# Run installation wizard, save to new image, delete left over container
docker run -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY -v /dev/shm:/dev/shm --device /dev/dri --name qt_install --entrypoint /tmp/qt/qt-opensource-linux-x64-5.12.6.run qt:base
docker commit qt_install qt:latest
docker rm qt_install

运行QtCreator

docker run

  • -v:挂载宿主机路径到容器的相关路径。
  • -e:设置容器环境变量
# Then you can run QtCreator with this monster of a command
docker run -v /tmp/.X11-unix:/tmp/.X11-unix \-e DISPLAY=$DISPLAY \-v /dev/shm:/dev/shm \-v ~/src:/root \		# 挂载宿主机的~/src目录(该目录可以作为工作代码目录)到容器的root目录下。--device /dev/dri \  # 挂载宿主机的device到容器中--name qt_creator \  # 运行起来的容器名 --rm \				# 运行结束后删除容器 --entrypoint /opt/Qt5.12.6/Tools/QtCreator/bin/qtcreator \ # 指定容器运行的默认程序qt:latest			# 容器运行所采用的 镜像:TAG

可能遇到的问题

Q1:

fzz@ubuntu:~/src/docker-qt-creator$ docker run -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY -v /dev/shm:/dev/shm -v ~/src:/root --device /dev/dri --name qt_creator --rm --entrypoint /opt/Qt5.12.6/Tools/QtCreator/bin/qtcreator qt:latest
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, xcb.

A:
可以通过运行终端程序进入容器内

docker run -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY -v /dev/shm:/dev/shm -v ~/src:/root --device /dev/dri --name qt_creator -it --rm --entrypoint /bin/bash qt:latest

然后声明环境变量:

export QT_DEBUG_PLUGINS=1

运行程序查看缺少的是哪个依赖,安装对应的依赖项即可:

root@a11f632cd6b4:/# /opt/Qt5.12.6/Tools/QtCreator/bin/qtcreator

然后使用docker commit 提交镜像修改即可,或者在dockerfile中添加依赖,重新构建镜像。

优化

  • docker run启动用户使用当前宿主机登录的用户,而非root用户,避免code file权限问题。
  • 保持QtCreator配置的数据持久化
  • 封装了构建脚本和启动脚本

获取优化后的版本

参考

  1. Running QtCreator in Docker
  2. Docker中运行Qt应用程序
  3. Docker运行GUI原理
  4. Docker–从入门到实践

这篇关于docker搭建QtCreator开发环境的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/976728

相关文章

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker

SpringBoot+Docker+Graylog 如何让错误自动报警

《SpringBoot+Docker+Graylog如何让错误自动报警》SpringBoot默认使用SLF4J与Logback,支持多日志级别和配置方式,可输出到控制台、文件及远程服务器,集成ELK... 目录01 Spring Boot 默认日志框架解析02 Spring Boot 日志级别详解03 Sp

java实现docker镜像上传到harbor仓库的方式

《java实现docker镜像上传到harbor仓库的方式》:本文主要介绍java实现docker镜像上传到harbor仓库的方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 前 言2. 编写工具类2.1 引入依赖包2.2 使用当前服务器的docker环境推送镜像2.2

SQLite3 在嵌入式C环境中存储音频/视频文件的最优方案

《SQLite3在嵌入式C环境中存储音频/视频文件的最优方案》本文探讨了SQLite3在嵌入式C环境中存储音视频文件的优化方案,推荐采用文件路径存储结合元数据管理,兼顾效率与资源限制,小文件可使用B... 目录SQLite3 在嵌入式C环境中存储音频/视频文件的专业方案一、存储策略选择1. 直接存储 vs

SpringBoot开发中十大常见陷阱深度解析与避坑指南

《SpringBoot开发中十大常见陷阱深度解析与避坑指南》在SpringBoot的开发过程中,即使是经验丰富的开发者也难免会遇到各种棘手的问题,本文将针对SpringBoot开发中十大常见的“坑... 目录引言一、配置总出错?是不是同时用了.properties和.yml?二、换个位置配置就失效?搞清楚加

如何使用Haporxy搭建Web群集

《如何使用Haporxy搭建Web群集》Haproxy是目前比较流行的一种群集调度工具,同类群集调度工具有很多如LVS和Nginx,本案例介绍使用Haproxy及Nginx搭建一套Web群集,感兴趣的... 目录一、案例分析1.案例概述2.案例前置知识点2.1 HTTP请求2.2 负载均衡常用调度算法 2.

Python中对FFmpeg封装开发库FFmpy详解

《Python中对FFmpeg封装开发库FFmpy详解》:本文主要介绍Python中对FFmpeg封装开发库FFmpy,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、FFmpy简介与安装1.1 FFmpy概述1.2 安装方法二、FFmpy核心类与方法2.1 FF

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

python常见环境管理工具超全解析

《python常见环境管理工具超全解析》在Python开发中,管理多个项目及其依赖项通常是一个挑战,下面:本文主要介绍python常见环境管理工具的相关资料,文中通过代码介绍的非常详细,需要的朋友... 目录1. conda2. pip3. uvuv 工具自动创建和管理环境的特点4. setup.py5.