Docker基礎 -- Ubuntu 22.04 AArch64 交叉編譯 Docker 鏡像構建指南

Ubuntu?22.04?AArch64?交叉編譯 Docker 鏡像構建指南

作者:?(填寫作者)??
發布日期:?2025?05?26


1?背景與目標

在企業內網(需要代理)環境下,我們需要一套可靠、可復用的 Ubuntu?22.04 交叉編譯鏡像,用于 ARM64 (AArch64) 固件和內核構建。本文檔從零梳理鏡像構建全過程,并總結常見坑點與加固方案,便于團隊后續快速復制實踐。


2?目錄結構

.
├── Dockerfile                # 鏡像構建文件
└── sources.list.tuna         # 清華 Ubuntu 鏡像源(HTTP/HTTPS 可選)

3?TUNA 源文件(sources.list.tuna

版本一定要用?jammy(22.04),勿用?bionic(18.04)!

# 建議使用 HTTP,HTTPS 需先安裝 ca-certificates
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse

如需源碼倉庫或 proposed,請自行取消注釋并添加 deb-src/-proposed


4?Dockerfile(HTTPS 方案示例)

FROM ubuntu:22.04ENV DEBIAN_FRONTEND=noninteractive \LANG=C.UTF-8# 1?? 先更新官方源,安裝 TLS 根證書
RUN apt-get update && \apt-get install -y --no-install-recommends ca-certificates && \rm -rf /var/lib/apt/lists/*# 2?? 覆蓋為清華鏡像并刷新索引
COPY sources.list.tuna /etc/apt/sources.list
RUN apt-get update# 3?? 安裝交叉工具鏈與常用構建環境(已刪 gcc?multilib / g++?multilib,gpgv 替代 gpgv2)
RUN apt-get install -y --no-install-recommends \build-essential git openssh-client make \gcc-aarch64-linux-gnu g++-aarch64-linux-gnu \cpp-aarch64-linux-gnu binutils-aarch64-linux-gnu \libssl-dev liblz4-tool libgmp-dev libmpc-dev \libexpat1-dev libgucharmap-2-90-dev ncurses-dev \bison flex fakeroot cmake unzip bc \device-tree-compiler patchelf chrpath gawk texinfo diffstat \qemu-user-static binfmt-support live-build \expect lz4 gpgv python-is-python3 python2 \&& apt-get clean && rm -rf /var/lib/apt/lists/*# 4?? 啟用 qemu-aarch64(宿主內核支持時)
RUN update-binfmt --enable qemu-aarch64 || trueCMD ["/bin/bash"]

HTTP 方案:直接把 sources.list.tuna 中的 https:// 改為 http://,并刪除第一階段安裝 ca-certificates 的步驟即可。


5?構建與使用

5.1?構建鏡像

# 推薦開啟 BuildKit 提升速度
export DOCKER_BUILDKIT=1docker build -t cross-aarch64:22.04 .

5.2?本地使用示例

# 映射當前源代碼目錄進入容器docker run --rm -it -v "$(pwd)":/workspace cross-aarch64:22.04 bash# 容器中編譯內核示例
cd /workspace/linux-source
export CROSS_COMPILE=aarch64-linux-gnu-
make ARCH=arm64 defconfig
make -j$(nproc) ARCH=arm64

5.3?多平臺構建(可選)

# 推送到私有 Harbor 并同時生成 x86_64/arm64 兩架構鏡像
docker buildx build --platform linux/amd64,linux/arm64 \-t harbor.example.com/base/cross-aarch64:22.04 --push .

6?常見報錯與排查

錯誤現象根因解決方案
Certificate verification failed鏡像源為 HTTPS,但鏡像內無 ca-certificates先安裝 ca-certificates 或改用 HTTP 源
gcc-multilib conflicts with gcc?*-aarch64-linux-gnu兩者互斥刪除 multilib 或使用多階段 Dockerfile 分離
Package gpgv2 has no installation candidate22.04 已廢棄 gpgv2改裝 gpgvgnupg
TLS handshake timeout公司代理或網絡慢apt 命令加 -o Acquire::Retries=3 -o Acquire::http::Timeout=30

7?最佳實踐

  1. BuildKit 緩存:在 CI/CD 中使用 --cache-from 與共享緩存卷,顯著減少二次構建耗時。
  2. 鏡像瘦身:如果只需運行環境,使用多階段將產物拷貝到 FROM scratchalpine
  3. 安全:盡量使用非 root 用戶運行編譯腳本;定期用 trivy 掃描漏洞。
  4. 代理:在公司代理環境,需同時配置 Docker daemon 與容器內部 apt 代理,避免 407 錯誤。
  5. 版本鎖:給 Dockerfile 固定包版本 (e.g. gcc-aarch64-linux-gnu=11.*) 以保證可重現性。

8?引用與參考

  • Tsinghua Tuna 鏡像站說明
  • Ubuntu 22.04 Jammy 官方倉庫
  • Docker 官方 BuildKit 文檔
  • GNU Arm Embedded Toolchain (Ubuntu cross packages)

版權聲明:本文檔為原創,遵循?CC?BY?SA?4.0?協議;轉載請注明出處。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/81421.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/81421.shtml
英文地址,請注明出處:http://en.pswp.cn/web/81421.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【ISP算法精粹】ISP算法管線的預處理算法有哪些?

1. ISP預處理算法有哪些? 在圖像信號處理(ISP)流程中,預處理階段主要針對圖像傳感器(如CMOS/CCD)輸出的原始圖像數據(通常為拜耳格式的RAW圖像)進行初步處理,以校正硬件…

華為OD機試真題——字符串加密 (2025B卷:100分)Java/python/JavaScript/C/C++/GO最佳實現

2025 B卷 100分 題型 本專欄內全部題目均提供Java、python、JavaScript、C、C++、GO六種語言的最佳實現方式; 并且每種語言均涵蓋詳細的問題分析、解題思路、代碼實現、代碼詳解、3個測試用例以及綜合分析; 本文收錄于專欄:《2025華為OD真題目錄+全流程解析+備考攻略+經驗分…

視頻存儲開源方案

項目成熟度 GitHub - ceph/ceph: Ceph is a distributed object, block, and file storage platform GitHub - minio/minio: MinIO is a high-performance, S3 compatible object store, open sourced under GNU AGPLv3 license. GitHub - seaweedfs/seaweedfs: SeaweedFS i…

典型城市工況數據(Drive Cycle)用于車輛仿真

典型城市工況數據(Drive Cycle)用于車輛仿真 在車輛仿真過程中,使用典型的城市工況數據(Drive Cycle)是評估車輛性能、能耗和排放的關鍵步驟。以下是一些常用的典型城市工況數據及其來源,這些數據可以幫助…

深度解析新能源汽車結構與工作原理

一、核心系統架構 新能源汽車主要由三大核心系統構成: 電力驅動系統:包含永磁同步電機、電機控制器(MCU)及減速器,采用三合一集成設計實現輕量化。永磁同步電機通過電磁感應原理將電能轉化為機械能,其效率可…

跳板問題(貪心算法+細節思考)

首先直接看題&#xff1a; 這題直接貪心其實問題不大&#xff1a; 下面先展示我的一個錯誤代碼&#xff1a; # include<iostream> # include<vector> # include<algorithm>using namespace std;int main() {int N,M;cin>>N>>M;vector<vecto…

pgsql 一些用法

要查詢PostgreSQL數據庫中剩余的磁盤空間&#xff0c;可以使用以下方法&#xff1a; 使用SQL查詢函數&#xff1a; 可以通過pg_size_pretty函數來查看數據庫的總磁盤使用情況&#xff0c;例如&#xff1a; SELECT pg_size_pretty(pg_database_size(‘your_database_name’)); …

【三維重建】【3DGS系列】【深度學習】3DGS的理論基礎知識之如何形成高斯橢球

【三維重建】【3DGS系列】【深度學習】3DGS的理論基礎知識之如何形成高斯橢球 文章目錄 【三維重建】【3DGS系列】【深度學習】3DGS的理論基礎知識之如何形成高斯橢球前言高斯函數一維高斯多維高斯 橢球基本定義一般二次形式 3D高斯橢球3D高斯與橢球的關系各向同性(Isotropic)和…

unix的定時任務和quartz和spring schedule的cron表達式區別

一、核心區別對比表 對比項Unix CrontabQuartzSpring Scheduled表達式位數5 位6 位或 7 位6 位秒級支持? 不支持&#xff08;最小單位是分鐘&#xff09;? 支持? 支持年字段? 無? 可選第7位? 不支持特殊符號支持較少&#xff08;如 *, ,, -, /&#xff09;很豐富和 Quar…

C++基礎算法————遞推

C++遞推:初學者的進階之旅 一、引言 在計算機編程的世界里,C++ 以其強大的功能和高效性受到眾多開發者的青睞。遞推作為一種重要的編程思想,在解決各種復雜問題時發揮著關鍵作用。對于初學者來說,理解并掌握遞推不僅可以提升編程能力,還能培養邏輯思維和問題解決能力。本…

QTabWidget垂直TabBar的圖標和文本水平顯示

一般情況下,我們可以通過QTabWidget的setTabPosition方法來設置TabBar的位置,比如設置在左邊 ui->tabWidget->setTabPosition(QTabWidget::West); 但是此時圖標和文字都是垂直的,如果讓它們水平顯示呢? 一.效果 二.原理 在繪制TabBar時,順時針旋轉90度 三.實現 …

HCIP-AI培養計劃,成為新時代AI解決方案架構高級工程師

01 華為認證是什么&#xff1f; 華為認證&#xff08;Huawei Certification&#xff09;是面向數字化時代構建的ICT人才培訓與認證體系。 當前超過68萬來自全球180多個國家和地區的各行業精英已經取得華為認證&#xff0c;如今全球每年超過10萬名學員通過考試獲得華為認證。 華…

【RabbitMQ】基于Spring Boot + RabbitMQ 完成應用通信

文章目錄 需求描述創建項目訂單系統(生產者)完善配置聲明隊列下單接口啟動服務 物流系統(消費者)完善配置監聽隊列啟動服務 格式化發送消息對象SimpleMessageConverter定義一個對象生產者代碼消費者運行程序 JSON定義一個對象生產者代碼定義轉換器消費者代碼運行程序 需求描述 …

OpenGL Chan視頻學習-7 Writing a Shader inOpenGL

bilibili視頻鏈接&#xff1a; 【最好的OpenGL教程之一】https://www.bilibili.com/video/BV1MJ411u7Bc?p5&vd_source44b77bde056381262ee55e448b9b1973 函數網站&#xff1a; docs.gl 說明&#xff1a; 1.之后就不再整理具體函數了&#xff0c;網站直接翻譯會更直觀也會…

Vue 3.0中復雜狀態如何管理

在現代前端應用中&#xff0c;狀態管理扮演著至關重要的角色。一個良好的狀態管理方案能夠&#xff1a; 1. 保持應用數據的一致性和可預測性&#xff1b; 2. 簡化組件間的通信和數據共享&#xff1b; 3. 提高代碼的可維護性和可測試性&#xff1b; 4. 優化應用性能&#xf…

AGI大模型(33):LangChain之Memory

大多數的 LLM 應用程序都會有一個會話接口,允許我們和 LLM 進行多輪的對話,并有一定的上下文記憶能力。但實際上,模型本身是不會記憶任何上下文的,只能依靠用戶本身的輸入去產生輸出。而實現這個記憶功能,就需要額外的模塊去保存我們和模型對話的上下文信息,然后在下一次…

leetcode513. 找樹左下角的值:層序遍歷中的深度與順序控制之道

一、題目深度解析與核心訴求 在二叉樹的眾多問題中&#xff0c;尋找最深層最左節點的值是一個兼具趣味性與代表性的問題。題目要求我們在給定的二叉樹中&#xff0c;找到深度最大的那一層中最左邊的節點值。如果存在多個最深層&#xff0c;只需返回最左邊節點的值即可。 這個…

制作一款打飛機游戲54:子彈編輯UI

今天&#xff0c;我們將繼續工作在我們的子彈模式系統上&#xff0c;創建一些簡單的子彈&#xff0c;并為其設計用戶界面&#xff08;UI&#xff09;。 自動保存功能的重要性 首先&#xff0c;我想提一下自動保存功能。這個功能在編輯器中非常重要&#xff0c;因為我們經常犯…

線程封裝與互斥

目錄 線程互斥 進程線程間的互斥相關背景概念 互斥量mutex 互斥量的接口 初始化互斥量有兩種方法&#xff1a; 銷毀互斥量 互斥量加鎖和解鎖 改進售票系統 互斥量實現原理探究 互斥量的封裝 線程互斥 進程線程間的互斥相關背景概念 臨界資源&#xff1a;多線程執行流共…

【系統設計】2WTPS生產級數據處理系統設計Review

歡迎來到啾啾的博客&#x1f431;。 記錄學習點滴。分享工作思考和實用技巧&#xff0c;偶爾也分享一些雜談&#x1f4ac;。 有很多很多不足的地方&#xff0c;歡迎評論交流&#xff0c;感謝您的閱讀與評論&#x1f604;。 目錄 反正能用的系統問題分析方案一&#xff1a;簡單多…