Docker中运行Qt应用程序

本文档详细介绍了在Docker环境下安装、设置、运行Qt应用程序的全过程,包括选择Debian版本、安装Docker、设置国内镜像源、运行HelloWorld,以及在Docker中打包和运行Qt应用,特别强调了遇到的问题及解决方法,如容器内运行Qt应用所需的依赖和库的安装。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

目录

 

1.简介

2.环境

3.从软件包安装

(1)选择版本:

​(2)安装:

(3)设置国内镜像源:

(4)运行hello world:

 4.常用命令

(1)镜像:

(2)容器:

5.在docker中运行Qt应用程序

(1)打包Qt应用程序

(2)编写Dockfile文件

(3)创建镜像

(4)启动容器验证Qt应用程序是否打包完整

(5)在linux宿主机中运行Qt应用程序

(6)参考:


1.简介

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

参考网站:

官网:https://www.docker.com/

菜鸟:https://www.runoob.com/docker/docker-tutorial.html

中文:https://www.docker.org.cn/index.html

知乎:https://www.zhihu.com/topic/19950993/hot

QQ交流群:https://www.docker.org.cn/page/dockerqq.html

2.环境

凝思安全操作系统V6.0.80(Debian 8)

3.从软件包安装

官网教程:https://docs.docker.com/engine/install/debian/

(1)选择版本:

以我的系统Debian jessie(Debian8)为例,去https://download.docker.com/linux/debian/dists/下选择Debian的版本jessie,如下图:

然后选择pool/stable/,然后选择amd64,最终跳转到如下界面,选择最后一个下载即可:

(2)安装:

sudo dpkg -i ./docker-ce_18.06.3_ce_3-0_debian_amd64.deb

安装完成后,可以使用命令查看版本信息:

(3)设置国内镜像源:

当你想用命令获取镜像时,可能报链接超时等错误,是因为国内访问官网镜像太慢,使用加速器即可解决:

参考:https://blog.csdn.net/wudawei071193/article/details/96168172

(4)运行hello world:

获取一个镜像后,即可使用命令打印:

docker pull learn/tutorial
docker run learn/tutorial echo "hello word"

 4.常用命令

(1)镜像:

列出镜像列表:

docker images

 查找镜像:

docker search amd64/debian:8

获取镜像:

docker pull amd64/debian:8

删除镜像:

docker rmi amd64/debian:8

 运行镜像:

docker run -it amd64/debian:8 /bin/bash

从已创建的容器中提交镜像:

docker commit -m="提交的描述信息" -a="镜像作者" 容器ID  要创建的目标镜像名

使用 Dockerfile 指令来创建一个新的镜像

docker build -t debian/test .

(2)容器:

查看所有容器:

docker ps -a

从已有镜像启动一个未启动过的容器(第一次启动后该容器会保存下来,才能ps查看到,后续再启动应使用start):

docker run -it amd64/debian:8 /bin/bash

退出启动的容器:

exit

启动已存在的容器:

docker start 容器id

停止已存在的容器:

docker stop 容器id 

后台运行容器:

docker run -itd --name ubuntu-test ubuntu /bin/bash

进入后台运行的容器:

docker attach 容器id
docker exec -it 容器id /bin/bash

 第二种方式使用exit退出时,容器不会停止。

导出容器:

docker export 容器id > ubuntu.tar

导入容器:

cat docker/ubuntu.tar | docker import - test/ubuntu:v1

删除容器:

docker rm -f 容器id

5.在docker中运行Qt应用程序

(1)打包Qt应用程序

Qt应用程序的开发环境为Ubuntu 20.04.1+Qt 5.12.10,如图所示:

 我的test应用简单的使用了一个QLable显示hello world,应用名为test,如下图所示:

打包参考:https://blog.csdn.net/qq_27350133/article/details/83445258 ,这里打包后的程序不能在容器中运行,缺少一些文件,第四步会详细说明。

(2)编写Dockfile文件

文件目录结构如下图:

Dockfile文件内容如下:

#基础镜像,当前latest为Ubuntu 20.04.1
FROM amd64/ubuntu:latest

#替换阿里云镜像源,否则下载很慢
COPY ./sources.list /etc/apt/

#设置环境为非交互模式,否则在安装某个库时需要选择配置
ENV DEBIAN_FRONTEND=noninteractive

#安装依赖包
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 libxkbcommon-x11-0

#拷贝Qt应用程序
COPY ./qtdemo /usr/local/testdir/

#设置工作目录
WORKDIR /usr/local/testdir/qtdemo

#修改权限
RUN /bin/chmod -R 755 /usr/local/testdir/qtdemo

#运行脚本
CMD ./test.sh

Dockfile拷贝文件夹注意:COPY指令如果是拷贝一个文件夹,那么只会拷贝文件夹的内容。如果想要拷贝文件夹,有一个比较笨的方法,也就是改变原来的文件结构,将要拷贝的文件夹移到同一个文件夹下,然后将该文件夹COPY到容器里,容器里面就是你要拷贝的那些文件夹了。

ubuntu 20.04阿里云镜像源文件sources.list:

deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse

(3)创建镜像

docker build -t qt:base .

(4)启动容器验证Qt应用程序是否打包完整

直接运行第1步打包好的程序,会报错如下图:

直接看的话,不知道什么原因造成的,我们可以设置export QT_DEBUG_PLUGINS=1来打印详细的错误信息,如下图:

可以看出是找不到platforms文件夹,我们将Qt安装目录下的opt/Qt5.12.10/5.12.10/gcc_64/plugins/platforms文件夹拷贝到可执行文件的同级目录即qtdemo中即可,重新编译镜像,运行看到还是报错,不过是其它错误,如下图:

按照提示将缺少的库,从Qt安装目录/opt/Qt5.12.10/5.12.10/gcc_64/lib下将库拷贝到qtdemo目录下即可。我这里缺少:libQt5XcbQpa.so.5、libQt5DBus.so.5这两个库。

(5)在linux宿主机中运行Qt应用程序

docker run -it --net=host --env="DISPLAY" qt:base /usr/local/testdir/qtdemo/test.sh

参数解释:

--env="DISPLAY": 将主机的显示环境变量共享到容器;

--net=host:使用主机网络驱动程序运行容器;

最终运行效果如下图:

(6)参考:

docker中运行GUI原理:https://www.cnblogs.com/larva-zhh/p/10531824.html

docker中搭建Qt环境:https://nicroland.wordpress.com/2015/12/06/running-qtcreator-in-docker/

 

Docker中执行Qt应用程序通常涉及以下几个步骤: 1. **选择基础镜像**: 选择一个适合Qt开发的基础镜像,如Ubuntu、Debian或Alpine。Ubuntu镜像通常较常用,因为它包含了丰富的软件包支持。 2. **安装Qt**: 在Dockerfile中添加必要的apt-get命令来安装所需的Qt版本,比如 `apt-get install -y qtbase5-dev` 或者 `apt-get install -y libqt5Widgets5`. 3. **安装运行环境**: 根据你的应用程序的需求,可能还需要其他软件包,比如QMake、Git等。 4. **复制应用程序**: 将你的Qt项目文件复制到Docker镜像的工作目录,可以使用 `COPY` 或 `ADD` 命令。 5. **配置应用程序**: 确保应用程序可以在Docker环境中正常运行,这可能包括设置环境变量、修改配置文件等。 6. **指定启动命令**: 在`CMD`或`ENTRYPOINT`指令中,提供执行应用程序的命令,例如 `./my_qt_app`。 7. **映射端口**: 如果应用程序需要监听特定端口,使用 `-p` 参数暴露给主机,如 `-p 5000:5000`。 8. **构建镜像**: 使用 `docker build` 命令创建新的镜像。 下面是一个简单的Dockerfile示例: ```dockerfile # 使用官方Ubuntu基础镜像 FROM ubuntu:latest # 安装Qt和相关依赖 RUN apt-get update && \ apt-get install -y \ qt5-default \ qmake \ g++ \ && rm -rf /var/lib/apt/lists/* # 将你的Qt项目复制到容器 WORKDIR /app COPY . . # 运行应用程序 CMD ["./your_qt_app"] # 映射主机的5000端口到容器的5000端口 EXPOSE 5000 # 构建镜像 # 替换username和image-name为你想要的用户名和镜像名称 RUN docker build -t username/your-image-name . ``` 执行这些步骤后,你可以通过 `docker run -it --name my_container username/your-image-name` 启动一个新的容器,并开始执行你的Qt应用程序
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

书灯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值