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

相关文章

IntelliJ IDEA 中配置 Spring MVC 环境的详细步骤及问题解决

《IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决》:本文主要介绍IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决,本文分步骤结合实例给大... 目录步骤 1:创建 Maven Web 项目步骤 2:添加 Spring MVC 依赖1、保存后执行2、将新的依赖

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

Windows Docker端口占用错误及解决方案总结

《WindowsDocker端口占用错误及解决方案总结》在Windows环境下使用Docker容器时,端口占用错误是开发和运维中常见且棘手的问题,本文将深入剖析该问题的成因,介绍如何通过查看端口分配... 目录引言Windows docker 端口占用错误及解决方案汇总端口冲突形成原因解析诊断当前端口情况解

Python如何自动生成环境依赖包requirements

《Python如何自动生成环境依赖包requirements》:本文主要介绍Python如何自动生成环境依赖包requirements问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录生成当前 python 环境 安装的所有依赖包1、命令2、常见问题只生成当前 项目 的所有依赖包1、

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S

Redis在windows环境下如何启动

《Redis在windows环境下如何启动》:本文主要介绍Redis在windows环境下如何启动的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Redis在Windows环境下启动1.在redis的安装目录下2.输入·redis-server.exe

Pytest多环境切换的常见方法介绍

《Pytest多环境切换的常见方法介绍》Pytest作为自动化测试的主力框架,如何实现本地、测试、预发、生产环境的灵活切换,本文总结了通过pytest框架实现自由环境切换的几种方法,大家可以根据需要进... 目录1.pytest-base-url2.hooks函数3.yml和fixture结论你是否也遇到过

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

浅谈配置MMCV环境,解决报错,版本不匹配问题

《浅谈配置MMCV环境,解决报错,版本不匹配问题》:本文主要介绍浅谈配置MMCV环境,解决报错,版本不匹配问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录配置MMCV环境,解决报错,版本不匹配错误示例正确示例总结配置MMCV环境,解决报错,版本不匹配在col