当前位置: 首页 > news >正文

【Docker】【03.使用docker搭建ubuntu20.04 Qt5.12 开发环境】

一、目标

讨论如何使用 docker 搭建 qt5.12 开发环境。

二、Docker

Dockerfile

FROM ubuntu:20.04ENV DEBIAN_FRONTEND=noninteractive
ENV QT_VERSION=5.12.12
ENV WORKSPACE=/workspace
ENV HOME=/home/docker_qt_userENV TZ=Asia/ShanghaiRUN apt-get update && \apt-get install -y tzdata sudo vim wget curl net-tools dbus-x11 x11-apps && \apt-get install -y xfce4 xfce4-terminal tightvncserver && \apt-get clean && rm -rf /var/lib/apt/lists/*# 更新并安装基础工具
RUN apt-get update && apt-get install -y \software-properties-common \wget \curl \git \ninja-build \python3 \python3-pip \sudo \&& rm -rf /var/lib/apt/lists/*# 安装主机编译工具链
RUN apt-get update && apt-get install -y \build-essential \cmake \gcc \g++ \gdb \clang \clang-tools \make \pkg-config \&& rm -rf /var/lib/apt/lists/*# 安装 ARM 交叉编译工具链
RUN apt-get update && apt-get install -y \gcc-arm-linux-gnueabihf \g++-arm-linux-gnueabihf \binutils-arm-linux-gnueabihf \&& rm -rf /var/lib/apt/lists/*# 安装 ARM64 交叉编译工具链
RUN apt-get update && apt-get install -y \gcc-aarch64-linux-gnu \g++-aarch64-linux-gnu \binutils-aarch64-linux-gnu \&& rm -rf /var/lib/apt/lists/*# 安装 Qt 5.12 依赖
RUN apt-get update && apt-get install -y \libgl1-mesa-dev \libglu1-mesa-dev \libx11-dev \libxext-dev \libxfixes-dev \libxi-dev \libxrender-dev \libxcb1-dev \libx11-xcb-dev \libxcb-glx0-dev \libxcb-keysyms1-dev \libxcb-image0-dev \libxcb-shm0-dev \libxcb-icccm4-dev \libxcb-sync-dev \libxcb-xfixes0-dev \libxcb-shape0-dev \libxcb-randr0-dev \libxcb-render-util0-dev \libfontconfig1-dev \libfreetype6-dev \libxml2-dev \libxkbcommon-dev \libxkbcommon-x11-dev \libssl-dev \libpng-dev \libjpeg-dev \libicu-dev \libpcre2-dev \libdbus-1-dev \libatspi2.0-dev \&& rm -rf /var/lib/apt/lists/*# 安装 Qt 5.12 和 Qt Creator
RUN apt-get update && apt-get install -y \qt5-default \qtbase5-dev \qtdeclarative5-dev \qttools5-dev \qttools5-dev-tools \qtmultimedia5-dev \qtquickcontrols2-5-dev \qtwebengine5-dev \qtcreator \&& rm -rf /var/lib/apt/lists/*# 安装 Clang 相关工具(解决 Clang Code Model 错误)
RUN apt-get update && apt-get install -y \clang-10 \clangd-10 \libclang-10-dev \llvm-10-dev \valgrind \clang-format \cppcheck \gdbserver \file \&& rm -rf /var/lib/apt/lists/*# 创建 Clang 符号链接
RUN update-alternatives --install /usr/bin/clang clang /usr/bin/clang-10 100 && \update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-10 100 && \update-alternatives --install /usr/bin/clangd clangd /usr/bin/clangd-10 100# 创建普通用户
RUN useradd -m -s /bin/bash docker_qt_user && \echo "docker_qt_user ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers# 提前创建 Qt Creator 配置目录并设置正确权限
RUN mkdir -p /home/docker_qt_user/.config/QtProject && \chown -R docker_qt_user:docker_qt_user /home/docker_qt_user && \chmod -R 755 /home/docker_qt_user/.configUSER docker_qt_user
WORKDIR /home/docker_qt_user# 设置 VNC 密码
RUN mkdir -p /home/docker_qt_user/.vnc && \echo "1234" | vncpasswd -f > /home/docker_qt_user/.vnc/passwd && \chmod 600 /home/docker_qt_user/.vnc/passwd# 设置环境变量
ENV PATH="/usr/lib/qt5/bin:${PATH}"
ENV QT_DIR="/usr/lib/x86_64-linux-gnu/qt5"
ENV QTDIR="/usr/lib/x86_64-linux-gnu/qt5"
ENV QT_SELECT=5
ENV CLANGD_PATH=/usr/bin/clangd-10# 创建默认的 Qt Creator 配置
RUN mkdir -p /home/docker_qt_user/.config/QtProject/qtcreator# 验证安装
RUN qmake --version && \gcc --version && \arm-linux-gnueabihf-gcc --version && \aarch64-linux-gnu-gcc --version && \clang --version# 创建 xstartup 启动 XFCE
RUN echo '#!/bin/bash\n\
xrdb $HOME/.Xresources\n\
startxfce4 &' > /home/docker_qt_user/.vnc/xstartup && \chmod +x /home/docker_qt_user/.vnc/xstartup# 修正启动脚本(含 USER 环境变量 + 等待日志文件)
RUN echo '#!/bin/bash\n\
export USER=docker_qt_user\n\
export HOME=/home/docker_qt_user\n\
export DISPLAY=:1\n\
mkdir -p $HOME/.vnc\n\
vncserver :1 -geometry 1280x800 -depth 24\n\
echo "VNC server started on :1 (port 5901)"\n\
echo "To connect: vncviewer localhost:5901"\n\
# 等待日志文件创建\n\
for i in {1..10}; do\n\log_file=$(ls -1 $HOME/.vnc/*.log 2>/dev/null | head -n 1)\n\if [ -n "$log_file" ]; then\n\echo "Tailing log file: $log_file"\n\tail -f "$log_file"\n\exit 0\n\fi\n\sleep 1\n\
done\n\
echo "Warning: no VNC log file found."\n\
exec bash' > /home/docker_qt_user/start_vnc.sh && \chmod +x /home/docker_qt_user/start_vnc.sh#CMD ["/home/docker_qt_user/start_vnc.sh"]
CMD ["startxfce4"]

build.sh

docker stop qt5.12_ubuntu20.04_env 2>/dev/null || true
docker rm qt5.12_ubuntu20.04_env 2>/dev/null || truedocker build -t qt5.12_ubuntu20.04_env .

run_xfce.sh

#!/bin/bash
docker stop qt5.12_ubuntu20.04_xfce_docker 2>/dev/null || true
docker rm qt5.12_ubuntu20.04_xfce_docker 2>/dev/null || true
set -e# 允许 X11 显示(可选)
xhost +local:root# 启动容器
docker run -it --rm \--name qt5.12_ubuntu20.04_xfce_docker \--network host \-e DISPLAY=$DISPLAY \-v /tmp/.X11-unix:/tmp/.X11-unix \-v $HOME:/home/dockeruser/host_home \qt5.12_ubuntu20.04_env startxfce4

run_vnc.sh

#!/bin/bash
docker stop qt5.12_ubuntu20.4_vnc_docker 2>/dev/null || true
docker rm qt5.12_ubuntu20.4_vnc_docker 2>/dev/null || trueset -edocker run -it --rm \--name qt5.12_ubuntu20.4_vnc_docker \-p 5901:5901 \qt5.12_ubuntu20.04_env

kill_xfce.sh

pkill -f xfce; pkill xfce4-session; ps aux | grep xfce

三、镜像

编译生成的 docker 镜像: 下载

http://www.dtcms.com/a/548581.html

相关文章:

  • uni-app 上架 iOS 应用全流程 从云打包到开心上架(Appuploader)免 Mac 上传发布指南
  • 深圳公司网站设计公司wordpress春菜
  • 广东省省考备考(第一百三十七天10.30)——资料分析、数量关系(强化训练)
  • 【SpringMVC】SpringMVC 小案例:加法计算器初步理解前后端接口交互与数据处理
  • 微软全球服务中断:Azure、365、Xbox及Minecraft等多平台受影响
  • 【QT常用技术讲解】可拖拽文件的Widget--QListWidget
  • 手机网站标准家政公司怎么注册
  • 上海网站建设500元wordpress在线支付表单
  • 厦门市小学生信息学竞赛(C++)初赛总复习(第二章 算法知识与数据结构 -第二节 数据结构 第三节 栈)
  • 【OD刷题笔记】- 5G网络建设
  • 基于毫米波雷达的汽车变道辅助系统(LCA)原理与实现
  • 赋能智慧货运:视频汇聚平台EasyCVR打造货运汽车安全互联网视频监控与管理方案
  • 数图科技赋能长春欧亚:构建零售 “智慧大脑”,让陈列调整、决策响应快人一步
  • MongoDB 正则表达式
  • 【超级详细】正点原子RK3588安装和编译SDK
  • AI 图像生成技术发展时间脉络:从 GAN 到多模态大模型的知名模型概略解析
  • “一网通办”查询响应优化:金仓索引如何支撑政务高效服务
  • 微信小程序(H5)上传文件到阿里云 OSS(使用 STS 临时凭证)
  • 建设局网站打不开是什么原因先做网站先备案
  • Bootstrap 按钮
  • Qt 外观之Qt样式表(QSS)
  • Adobe Lightroom安卓版(手机调色软件)绿色版
  • 服务器 Web 安全:Nginx 配置 X-Frame-Options 与 CSP 头,防御 XSS 与点击劫持
  • 嵌入式AI Arm_linux_第一个Demo_让IPU跑起来
  • Solon 项目升级 JDK 25
  • 手写自己的小型react
  • 3秒传输GB级文件:FastSend让P2P共享告别云存储依赖
  • 【Docker】P2 Docker 命令:从Nginx部署到镜像分享的全流程指南
  • VLAN协议简介
  • 递归专题1 - 递归基础与思维方法