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

相关文章

一篇文章彻底搞懂macOS如何决定java环境

《一篇文章彻底搞懂macOS如何决定java环境》MacOS作为一个功能强大的操作系统,为开发者提供了丰富的开发工具和框架,下面:本文主要介绍macOS如何决定java环境的相关资料,文中通过代码... 目录方法一:使用 which命令方法二:使用 Java_home工具(Apple 官方推荐)那问题来了,

vite搭建vue3项目的搭建步骤

《vite搭建vue3项目的搭建步骤》本文主要介绍了vite搭建vue3项目的搭建步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1.确保Nodejs环境2.使用vite-cli工具3.进入项目安装依赖1.确保Nodejs环境

Nginx搭建前端本地预览环境的完整步骤教学

《Nginx搭建前端本地预览环境的完整步骤教学》这篇文章主要为大家详细介绍了Nginx搭建前端本地预览环境的完整步骤教学,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录项目目录结构核心配置文件:nginx.conf脚本化操作:nginx.shnpm 脚本集成总结:对前端的意义很多

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

基于Python开发Windows自动更新控制工具

《基于Python开发Windows自动更新控制工具》在当今数字化时代,操作系统更新已成为计算机维护的重要组成部分,本文介绍一款基于Python和PyQt5的Windows自动更新控制工具,有需要的可... 目录设计原理与技术实现系统架构概述数学建模工具界面完整代码实现技术深度分析多层级控制理论服务层控制注

解决docker目录内存不足扩容处理方案

《解决docker目录内存不足扩容处理方案》文章介绍了Docker存储目录迁移方法:因系统盘空间不足,需将Docker数据迁移到更大磁盘(如/home/docker),通过修改daemon.json配... 目录1、查看服务器所有磁盘的使用情况2、查看docker镜像和容器存储目录的空间大小3、停止dock

idea+spring boot创建项目的搭建全过程

《idea+springboot创建项目的搭建全过程》SpringBoot是Spring社区发布的一个开源项目,旨在帮助开发者快速并且更简单的构建项目,:本文主要介绍idea+springb... 目录一.idea四种搭建方式1.Javaidea命名规范2JavaWebTomcat的安装一.明确tomcat

docker 重命名镜像的实现方法

《docker重命名镜像的实现方法》在Docker中无法直接重命名镜像,但可通过添加新标签、删除旧镜像后重新拉取/构建,或在DockerCompose中修改配置文件实现名称变更,感兴趣的可以了解一下... 目录使用标签(Tagging)删除旧的php镜像并重新拉取或构建使用docker Compose在Do

Java中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例解析

《Java中的分布式系统开发基于Zookeeper与Dubbo的应用案例解析》本文将通过实际案例,带你走进基于Zookeeper与Dubbo的分布式系统开发,本文通过实例代码给大家介绍的非常详... 目录Java 中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例一、分布式系统中的挑战二

k8s搭建nfs共享存储实践

《k8s搭建nfs共享存储实践》本文介绍NFS服务端搭建与客户端配置,涵盖安装工具、目录设置及服务启动,随后讲解K8S中NFS动态存储部署,包括创建命名空间、ServiceAccount、RBAC权限... 目录1. NFS搭建1.1 部署NFS服务端1.1.1 下载nfs-utils和rpcbind1.1