在 Docker 中使用多平臺功能的最簡單方法是從命令行調用它。使用docker buildx,我們可以利用新的測試版功能。通過運行docker buildx build --pla" />
Docker 中的多平臺如何工作?
在 Docker 中使用多平臺功能的最簡單方法是從命令行調用它。使用docker buildx,我們可以利用新的測試版功能。通過運行docker buildx build --platform linux/arm/v7 -t arm-build 。此命令使用 ARMv7 仿真根據當前目錄中的“Dockerfile”構建 docker 映像。在幕后,Docker 在 QEMU 虛擬化環境(qemu-user-static準確地說)中運行整個 Docker 構建過程。通過這樣做,可以消除設置自定義 VM 的復雜性。一旦構建完成,我們甚至可以使用docker runARMv7 模式自動啟動容器。
多平臺、多階段和Qt
雖然多平臺功能是一個很棒的獨立功能,但與多階段構建結合使用時它會變得更加強大。在單個 Dockerfile 中,我們能夠混合和匹配平臺并在步驟之間進行復制。這個功能正是我們最終為 Screenly OSE 使用 Qt 構建過程所做的。
第一階段:ARM
感謝Balena的優秀人員,我們能夠在第一階段使用 Raspbian 基礎映像。我們可以使用以下方法調用此步驟:
FROM --platform=linux/arm/v7 balenalib/rpi-raspbian:buster as builder
在上述步驟之后,我們可以像往常一樣使用 Docker 并執行各種RUN命令,例如安裝包等。請注意,如果構建不是在 ARMv7 硬件上運行,則此容器正在使用 QEMU 模擬運行。在我們的例子中,我們使用命令來安裝 Qt 構建依賴項。上述步驟還允許我們完全消除從磁盤映像(這是Qt Wiki建議的)或rsync物理 Raspberry Pi 的文件復制文件的需要。
第 2 階段:x86
一旦我們在 ARM 步驟中安裝了依賴項,我們就可以切換到構建器的原生 x86 架構以避免仿真,并使用以下行進行交叉編譯:
FROM --platform=linux/amd64 debian:buster
現在,我們進入了有趣的部分。切換到 x86 后,我們可以復制上一步中的文件。我們這樣做是為了創建一個可用于 Qt 的 sysroot。我們通過運行以下命令來完成此步驟:
RUN mkdir -p /sysroot/usr /sysroot/opt /sysroot/lib
COPY --from=builder /lib/ /sysroot/lib/
COPY --from=builder /usr/include/ /sysroot/usr/include/
COPY --from=builder /usr/lib/ /sysroot/usr/lib/
COPY --from=builder /opt/vc/ sysroot/opt/vc/
我們現在擁有兩全其美的優勢。通過利用多步驟和多平臺功能,我們生成了一個可用于構建 Qt 的 sysroot。由于我們在上一步中使用了功能齊全的 Raspbian 映像,我們甚至可以讓 Qt 獲取所有現有的庫。
./configure /
-sysroot /sysroot
正如我們在介紹中提到的,編譯 Qt 遠非簡單。成功編譯它需要很多步驟。
本文鏈接:http://www.tebozhan.com/showinfo-119-2501-0.html使用Docker多階段多平臺編譯Qt
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com
上一篇: Salesforce聯合首席執行官將辭職 貝尼奧夫將再次獨掌公司
下一篇: Docker使用緩存編譯 Qt