ARM 安裝 Docker 與 Docker Compose(Debian/Ubuntu 一次性搞定)
面向 ARM(<span style="color:red">arm64/aarch64</span>、<span style="color:red">armhf</span>)服務器與開發板,我們追求的是:最短路徑上線、版本可控、可複製到 CI/CD 與生產。以下方案採用 <span style="color:red">發行版官方倉庫</span> 的穩定包,開箱即用;企業內網可用相同指令對接鏡像倉庫,降低外網依賴。🚀
一、環境自檢(確保硬件&內核匹配)
uname -m && lsb_release -sd || cat /etc/os-release
dpkg --print-architecture
getconf LONG_BIT
-
解釋:
uname -m:查看硬件架構(期望aarch64/arm64或armv7l)。lsb_release -sd:打印發行版版本,便於選包策略。dpkg --print-architecture:輸出arm64或armhf;和鏡像拉取架構一一對應。getconf LONG_BIT:確認 64 位系統以便選用 <span style="color:red">arm64</span> 生態。
二、快速安裝(官方倉庫,穩定可審計)✅
適用於 Debian 12+/Ubuntu 20.04+,獲得 <span style="color:red">docker</span>、<span style="color:red">buildx</span>、<span style="color:red">Compose v2</span>(docker compose 子命令)。
sudo apt update
sudo apt install -y docker.io docker-buildx-plugin docker-compose-plugin
sudo systemctl enable --now docker
sudo usermod -aG docker $USER
newgrp docker
docker version
docker compose version
-
解釋:
apt install docker.io:安裝守護進程與 CLI。docker-buildx-plugin:開啓 <span style="color:red">多架構構建</span>(ARM 常用)。docker-compose-plugin:安裝 <span style="color:red">Compose v2</span>,使用docker compose。systemctl enable --now docker:設置開機自啓並立即啓動。usermod -aG docker $USER:將當前用户加入 <span style="color:red">docker 組</span>,免 sudo。newgrp docker:即時生效,無需重登。docker version / docker compose version:驗證安裝結果。
明確立場:優先使用<span style="color:red">docker compose</span>(Compose v2 插件),避免舊版docker-compose二進制帶來的維護成本與兼容風險。
三、ARM 專項優化(讓性能與兼容都對齊)
1)啓用 BuildKit(更快、更省)
echo '{ "features": { "buildkit": true } }' | sudo tee /etc/docker/daemon.json
sudo systemctl restart docker
- 解釋:開啓 <span style="color:red">BuildKit</span>,加速構建並改善緩存複用;ARM 設備普遍 CPU 資源有限,收益明顯。
2)多架構鏡像構建(arm64 + amd64 一把梭)
docker buildx create --use --name multiarch
docker buildx inspect --bootstrap
# 示例:同時產出 arm64/amd64
docker buildx build --platform linux/arm64,linux/amd64 -t your.registry/app:1.0 --push .
- 解釋:通過 <span style="color:red">buildx</span> 一次構建多平台鏡像,方便在 ARM 開發、x86 生產同時複用。
3)Raspberry Pi/嵌入式內核參數(如需內存與 cpuset 管控)
# 僅供需要時:在 /boot/cmdline.txt 末尾追加(注意與現有參數空格分隔)
# cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory
- 解釋:為部分 ARM 開發板開啓 <span style="color:red">cgroup</span> 相關能力,容器資源控制更穩定。⚙️
四、Compose 最小可行例(跨平台無感拉起)
mkdir -p ~/apps/ng && cd ~/apps/ng
cat > docker-compose.yml <<'YML'
services:
web:
image: nginx:stable
ports:
- "8080:80"
deploy:
resources:
limits:
cpus: "0.50"
memory: "256M"
YML
docker compose up -d
docker compose ps
-
解釋:
nginx:stable提供 ARM 與 x86 多架構鏡像,ARM 上直接拉起。ports映射到宿主 8080,瀏覽器訪問驗證。deploy.resources.limits:給輕量 ARM 設備設置 <span style="color:red">資源上限</span>,避免“拖垮全機”。
五、常用運維基線(生產可複用)🧩
# 自啓動與健康狀態
sudo systemctl status docker
docker info
# 開啓日誌輪轉(避免小盤 ARM 被日誌吃滿)
sudo mkdir -p /etc/docker
cat | sudo tee /etc/docker/daemon.json <<'JSON'
{
"features": { "buildkit": true },
"log-driver": "json-file",
"log-opts": { "max-size": "10m", "max-file": "3" }
}
JSON
sudo systemctl restart docker
# 清理舊鏡像/容器/網絡(定期)
docker system prune -af
- 解釋:日誌輪轉對小存儲 ARM 主機極其關鍵;
prune建議在 CI 或運維巡檢中定期執行。
六、升級與回滾(版本治理不翻車)
sudo apt update
sudo apt install -y docker.io docker-buildx-plugin docker-compose-plugin
# 升級後驗證
docker --version && docker compose version
# 如遇回滾需求:apt 支持安裝歷史版本(結合企業鏡像倉庫的快照策略)
- 解釋:基於發行版倉庫的版本控制更穩,便於 <span style="color:red">合規審計</span> 與 <span style="color:red">可追溯</span>。
七、安裝路徑對比(為決策者準備)
| 方案 | 適用場景 | 優點 | 注意點 |
|---|---|---|---|
| <span style="color:red">apt 安裝 docker.io + 插件</span> | 生產/內網、強調穩定 | 易維護、無外鏈、版本管理清晰 | 可能略慢於上游的最新特性 |
| 二進制手工部署 | 極端離線、強定製 | 可完全自控 | 運維複雜、需自建更新流程 |
| 容器內套容器(DinD) | CI/隔離場景 | 強隔離 | ARM 設備資源佔用偏高,謹慎評估 |
八、工作流程圖(vditor/Markdown 可視化)
九、故障排查熱點(ARM 場景高頻)
- <span style="color:red">鏡像拉取慢/失敗</span>:優先配置企業鏡像倉庫;核對
dpkg --print-architecture與鏡像平台匹配。 - <span style="color:red">內存吃緊</span>:限制
deploy.resources.limits,啓用日誌輪轉並定期prune;對構建類任務使用 <span style="color:red">BuildKit</span>。 - <span style="color:red">編譯鏈不兼容</span>:多架構鏡像用 <span style="color:red">buildx</span>;本機僅跑容器,編譯在 CI 上完成更穩。
- <span style="color:red">權限問題</span>:確認用户在
docker組,或在 CI 中顯式使用sudo docker ...。
結論:在 ARM 設備上,用發行版倉庫安裝 docker.io + buildx + compose,再打開 <span style="color:red">BuildKit</span> 與日誌輪轉,就是一套可規模複製、可指標閉環的企業級落地方案。小設備也能跑出大組織的交付速度與穩定性。💼✨