Sourcetrail 如何构建、运行并发布 Linux Docker 开发镜像
【免费下载链接】SourcetrailSourcetrail - free and open-source interactive source explorer项目地址: https://gitcode.com/GitHub_Trending/so/Sourcetrail
Sourcetrail 的 Linux 构建依赖一套预装好 Qt、LLVM/Clang、Boost 等工具链的 Docker 镜像,镜像的构建、运行与发布流程记录在 deployment/dockerfiles/README.md 中。本文面向需要维护这套 Linux 开发镜像的读者:按仓库提供的三层 Dockerfile 构建镜像,用docker run进入容器验证可用,再通过docker login/docker push发布到镜像仓库,供 CI 构建 Sourcetrail 时直接复用。适用环境是安装了 Docker 的 Linux 主机;镜像底层为centos:7。
镜像分层与内容
仓库在deployment/dockerfiles/linux/下提供三个可构建目录,自底向上依次是:
- 基础层
centos7_64_base(Dockerfile):基于centos:7,通过 yum 安装 devtoolset-7-gcc、wget、git、libxcb 系列、libxkbcommon、sqlite 等构建依赖,并手动安装 cmake 3.8.2、maven 3.5.0、Ninja(release分支自编译);设置M2_HOME=/opt/maven、JAVA_HOME=/usr/lib/jvm/java-openjdk等环境变量。README 列出的软件清单为 Openjdk 1.8.0、Imagemagick、vim、lftp、git、python 2.7、cmake 3.8.2、maven 3.5.0。 - 工具链层
centos7_64(Dockerfile):FROM coatisoftware/centos7_64_base,在其上从源码构建 Qt(QTVERSION=5.12.6,安装到/opt/qt5.12.6)、LLVM/Clang(ARG LLVM_VERSION=11.0.0,安装到/opt/llvm)、Boost(1.67.0,静态链接,安装到/opt/boost)以及 linuxdeployqt(AppImage 解压到/opt/linuxdeployqt),并设置Qt5_DIR=/opt/qt5.12.6、Clang_DIR=/opt/llvm、BOOST_ROOT=/opt/boost、LD_LIBRARY_PATH=$Qt5_DIR/lib/环境变量;最后创建 uid 为 1000 的builder用户并切换为当前用户,WORKDIR为/home/builder。README 记录的软件版本为 Qt 5.12.6、LLVM/Clang 10.0.0、Boost 1.67.0、Ninja。 - CI 层
travis_ci(Dockerfile):FROM coatisoftware/centos7_64_qt_llvm:qt5126-llvm1100,复制 ApplicationSettings.xml 到/home/builder/.config/sourcetrail/,复制 entrypoint.sh 作为ENTRYPOINT。
两处版本描述不一致,按文档实际情况并列说明,不擅自统一:
- centos7_64/README.md 写 LLVM/Clang 为10.0.0,而 centos7_64/Dockerfile 中
ARG LLVM_VERSION=11.0.0,travis_ci 的基础镜像 tag 也是qt5126-llvm1100。以 Dockerfile 实际构建值 11.0.0 为准,README 应属未同步。 - centos7_64_base/README.md 写
devtoolset4 (gcc 5.3.1),而 centos7_64_base/Dockerfile 实际安装的是devtoolset-7-gcc/devtoolset-7-gcc-c++。
构建镜像
deployment/dockerfiles/README.md 给出的通用构建命令为:
docker build -t <account>/<reponame>:<tag> <Dockerfile>其中<account>是镜像仓库账号名,<reponame>是镜像仓库名,<tag>是版本标签,<Dockerfile>是构建上下文目录。该文档的 Update Guide 给出了工具链镜像的具体示例(tag 以qt591-llvm500这类“qt版本-llvm版本”形式命名,构建时替换成你要发布的 tag):
cd deployment/dockerfiles/linux/centos7_64 docker build -t coatisoftware/centos7_64_qt_llvm:<tag> .构建耗时较长,因为 Dockerfile 会从download.qt.io、github.com/llvm/llvm-project/releases、sourceforge.net下载 Qt、LLVM、Boost 源码现场编译。构建过程本身包含一层内置检查:centos7_64_base/Dockerfile 和 centos7_64/Dockerfile 都有RUN make --version、RUN cmake --version、RUN mvn --version、RUN ninja --version等步骤,任一工具缺失会让构建在早期失败。
构建完成后,本地多出一个打了 tag 的镜像,可以用docker image ls确认它存在且大小符合预期。
运行镜像
README 给出的运行方式为进入交互式 shell:
docker run -it <image> /bin/bash将<image>换成上一步的完整镜像名(如coatisoftware/centos7_64_qt_llvm:<tag>)。容器内当前用户是builder(uid 1000),工作目录为/home/builder,Qt5_DIR、Clang_DIR、BOOST_ROOT等环境变量已由镜像设置,可直接在其中执行 Sourcetrail 的 CMake 配置与编译(仓库自身的 script/buildonly.sh 就是在这类容器环境里用-DDOCKER_BUILD=ON配置build/Debug与build/Release两个 CMake 目录的脚本)。
此外仓库还有 script/docker/ 一组本地开发脚本:createImage.sh 用nvidia-docker启动容器并挂载~/dev/sourcetrail_docker_64到容器内/home/builder/sourcetrail,startDev.sh 在容器已存在时直接nvidia-docker start -i sourcetrail_dev、否则调用 createImage.sh(执行前后各调用一次xhost +/xhost -开放和收回 X 访问),deleteDev.sh 用docker rm sourcetrail_dev删除容器,restartDocker.sh 执行sudo systemctl restart docker重启 Docker 服务。这套脚本引用的是旧镜像名coatisoftware/centos6_64_dev,且使用--privileged、-u 0等特权参数,与当前 centos7_64 系列镜像名不匹配,只可作为参考路径,实际使用需自行替换为当前镜像名并评估权限影响。
发布镜像
README 的发布流程只有两步:
docker login docker push <account>/<reponame>:<tag>文档给出的完整更新流程(Update Guide)顺序为:
# 1. 查看现有镜像 docker image ls # 2. 删除本地旧 tag 的镜像(会删除本地镜像,仅对已由新 tag 替代的旧 tag 执行) docker rmi coatisoftware/centos7_64_qt_llvm:<tag> docker rmi coatisoftware/centos7_32_qt_llvm:<tag> # 3. 清理 Docker 无用数据(会移除未被使用的镜像/缓存等资源) docker system prune # 4. 修改 Dockerfile 中的库版本号后,用新 tag 构建并发布 cd deployment/dockerfiles/linux/centos7_64 docker build -t coatisoftware/centos7_64_qt_llvm:<tag> . docker login docker push coatisoftware/centos7_64_qt_llvm:<tag>docker rmi与docker system prune均为破坏性/清理类操作,执行前先用docker image ls核对要删除的 tag 确实是旧版本。文档最后两步是“更新 .gitlab-ci.yml 中 linux 镜像的 ”和“commit 并发布变更”,但当前仓库的 CI 配置文件是 .travis.yml 而非.gitlab-ci.yml,说明该 Guide 部分内容未随仓库同步;同理,Guide 中提到的centos7_32目录在当前deployment/dockerfiles/linux/下也不存在(现仅有centos7_64、centos7_64_base、travis_ci),docker rmi coatisoftware/centos7_32_qt_llvm:<tag>一步按现状应跳过。
CI 层镜像的构建与产物验证
travis_ci镜像是整套流程的落地验证:.travis.yml 中install阶段先chmod 777 deployment/dockerfiles/linux/travis_ci/entrypoint.sh,再构建镜像:
docker build -t coatisoftware/local deployment/dockerfiles/linux/travis_ciscript阶段用当前提交哈希运行容器并把产物拷出:
COMMIT_HASH=$(git rev-parse HEAD) docker run --name builder coatisoftware/local ${COMMIT_HASH} docker cp builder:/home/builder/Sourcetrail/release $TRAVIS_BUILD_DIR/releaseentrypoint.sh 接收$1作为要构建的 commit,依次执行git clone(Sourcetrail 仓库)→git checkout $1→./script/buildonly.sh all→./script/build.sh release test→./setup/Linux/createPackages.sh,然后把生成的Sourcetrail*.tar.gz和Sourcetrail*.AppImage拷入release/目录。能走到docker cp成功拷出这两个产物,即说明镜像内的工具链可用、一次完整构建成功;.travis.yml的deploy部分则只在打 tag 时把这些 tar.gz 与 AppImage 发布到 release。
限制与核对要点
- 版本信息以 Dockerfile 为准:工具链镜像实际构建的是 Qt 5.12.6 + LLVM 11.0.0 + Boost 1.67.0,
centos7_64与centos7_64_base的 README 各有一处过期描述(见上文分层部分)。 - 镜像构建依赖外网下载 Qt/LLVM/Boost 源码,构建上下文即各目录本身(
docker build ... <目录>),无需额外挂载。 - Update Guide 中
.gitlab-ci.yml与centos7_32相关内容已与当前仓库状态不符;实际 CI 使用.travis.yml与deployment/dockerfiles/linux/travis_ci/。 script/docker/下的本地开发脚本基于旧镜像名coatisoftware/centos6_64_dev和nvidia-docker,与本文主路径(构建/发布 centos7_64 系列镜像)不是同一套镜像,仅在有 NVIDIA 驱动环境和 X 服务的前提下可作参考。
【免费下载链接】SourcetrailSourcetrail - free and open-source interactive source explorer项目地址: https://gitcode.com/GitHub_Trending/so/Sourcetrail
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考