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

相关文章

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

Linux搭建ftp服务器的步骤

《Linux搭建ftp服务器的步骤》本文给大家分享Linux搭建ftp服务器的步骤,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录ftp搭建1:下载vsftpd工具2:下载客户端工具3:进入配置文件目录vsftpd.conf配置文件4:

基于Java开发一个极简版敏感词检测工具

《基于Java开发一个极简版敏感词检测工具》这篇文章主要为大家详细介绍了如何基于Java开发一个极简版敏感词检测工具,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录你是否还在为敏感词检测头疼一、极简版Java敏感词检测工具的3大核心优势1.1 优势1:DFA算法驱动,效率提升10

Python开发简易网络服务器的示例详解(新手入门)

《Python开发简易网络服务器的示例详解(新手入门)》网络服务器是互联网基础设施的核心组件,它本质上是一个持续运行的程序,负责监听特定端口,本文将使用Python开发一个简单的网络服务器,感兴趣的小... 目录网络服务器基础概念python内置服务器模块1. HTTP服务器模块2. Socket服务器模块

Java 与 LibreOffice 集成开发指南(环境搭建及代码示例)

《Java与LibreOffice集成开发指南(环境搭建及代码示例)》本文介绍Java与LibreOffice的集成方法,涵盖环境配置、API调用、文档转换、UNO桥接及REST接口等技术,提供... 目录1. 引言2. 环境搭建2.1 安装 LibreOffice2.2 配置 Java 开发环境2.3 配

Python38个游戏开发库整理汇总

《Python38个游戏开发库整理汇总》文章介绍了多种Python游戏开发库,涵盖2D/3D游戏开发、多人游戏框架及视觉小说引擎,适合不同需求的开发者入门,强调跨平台支持与易用性,并鼓励读者交流反馈以... 目录PyGameCocos2dPySoyPyOgrepygletPanda3DBlenderFife