• 正文
    • 一、Docker 如何實(shí)現(xiàn)環(huán)境一致性
    • 二、構(gòu)建docker鏡像
    • 三、Docker共享
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

手把手教你搭建嵌入式容器化開發(fā)環(huán)境!

03/03 15:17
1066
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

大家好,我是雜燴君。

嵌入式開發(fā)中,我們經(jīng)常會遇到這樣的場景:

    本地開發(fā)環(huán)境正常運(yùn)行的代碼,移植到同事電腦就報(bào)錯。更換開發(fā)板后,編譯工具鏈版本不兼容導(dǎo)致構(gòu)建失敗。團(tuán)隊(duì)協(xié)作時,不同成員的依賴庫版本差異引發(fā)玄學(xué)問題。

這些問題的根源在于開發(fā)環(huán)境的不一致性。

傳統(tǒng)嵌入式開發(fā)依賴手動配置工具鏈、交叉編譯器、庫文件等,稍有疏漏就會導(dǎo)致 "環(huán)境依賴黑洞"。

Docker 容器化技術(shù)的出現(xiàn),為解決這些痛點(diǎn)提供了全新方案。

單片機(jī)開發(fā)的朋友,可能不怎么了解Docker,有必要了解一下。嵌入式Linux開發(fā)中,常常使用Docker容器進(jìn)行嵌入式開發(fā)。

有沒有朋友好奇這張長圖怎么繪制?PlantUML了解一下:嵌入式開發(fā)中PlantUML圖表的應(yīng)用!

在DevOps 與 CI/CD中,Docker 鏡像成為嵌入式開發(fā)的標(biāo)準(zhǔn)化交付單元,結(jié)合 Jenkins 等工具鏈,實(shí)現(xiàn)自動化構(gòu)建、測試和部署。

DevOps是一種文化和實(shí)踐方法,涵蓋了軟件開發(fā)周期的全過程,包括開發(fā)、測試、部署、監(jiān)控等,強(qiáng)調(diào)開發(fā)和運(yùn)維團(tuán)隊(duì)的緊密合作。

CI/CD是持續(xù)集成和持續(xù)交付的簡稱,聚焦于軟件開發(fā)的一部分流程,主要包括自動化的構(gòu)建、測試、部署等。

一、Docker 如何實(shí)現(xiàn)環(huán)境一致性

1. 容器化的三大核心優(yōu)勢

標(biāo)準(zhǔn)化封裝:將編譯器、依賴庫、腳本等打包成 Docker 鏡像

環(huán)境隔離:容器運(yùn)行時與宿主機(jī)完全隔離,避免版本沖突

跨平臺遷移:一套鏡像可在 Linux/macOS/Windows 上運(yùn)行

2. 典型容器化開發(fā)流程

上面那張長圖展示了較為全面的嵌入式容器化開發(fā)流程,包括幾個關(guān)鍵階段,比如開發(fā)環(huán)境設(shè)置、代碼管理、容器化構(gòu)建、測試、部署到硬件等。

實(shí)際上,我們搭建本地docker開發(fā)環(huán)境只需要關(guān)注如下幾個步驟:

二、構(gòu)建docker鏡像

下面我們一起搭建一個嵌入式 Linux 的 Docker 開發(fā)環(huán)境并配置交叉編譯器:

1、安裝 Docker

我們需要先在我們的主機(jī)上安裝 Docker。不同的操作系統(tǒng)安裝方法有所不同。

以Ubuntu/Debian為例。

創(chuàng)建如下腳本docker_install.sh并執(zhí)行:

# 更新系統(tǒng)軟件包列表
sudo apt update
# 安裝必要的依賴包
sudo apt install apt-transport-https ca-certificates curl software-properties-common
# 添加Docker官方GPG密鑰
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 添加Docker軟件源
echo"deb [arch=$(dpkg --print-architecture)?signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu?$(lsb_release -cs)?stable"?| sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 更新軟件包列表
sudo apt update
# 安裝Docker引擎
sudo apt install docker-ce docker-ce-cli containerd.io
# 驗(yàn)證Docker是否安裝成功
sudo docker run hello-world

2、創(chuàng)建 Dockerfile

Dockerfile 是用于構(gòu)建 Docker 鏡像的腳本文件,下面我們創(chuàng)建一個包含交叉編譯器的嵌入式 Linux 開發(fā)環(huán)境。

# 使用基礎(chǔ)鏡像
FROM?ubuntu:22.04

# 設(shè)置環(huán)境變量,避免交互提示
ENV?DEBIAN_FRONTEND=noninteractive

# 更新系統(tǒng)軟件包列表并安裝必要的工具
RUN?apt-get update && apt-get install -y 
? ? build-essential 
? ? wget 
? ? unzip 
? ? && rm -rf /var/lib/apt/lists/*

# 下載并安裝交叉編譯器
# 這里以arm-linux-gnueabihf為例,你可以根據(jù)實(shí)際需求替換
RUN?apt-get update && apt-get install -y 
? ? gcc-arm-linux-gnueabihf 
? ? g++-arm-linux-gnueabihf 
? ? && rm -rf /var/lib/apt/lists/*

# 設(shè)置工作目錄
WORKDIR?/app

# 定義默認(rèn)命令
CMD?["/bin/bash"]

3、構(gòu)建 Docker 鏡像

在包含 Dockerfile 的目錄下,執(zhí)行以下命令來構(gòu)建 Docker 鏡像:

sudo docker build -t embedded-docker:v1.0?.

-t:指定鏡像的標(biāo)簽,這里我們將鏡像命名為embedded-docker,標(biāo)簽為v1.0。

.:表示使用當(dāng)前目錄下的 Dockerfile 進(jìn)行構(gòu)建。

4、運(yùn)行 Docker 容器

構(gòu)建完成后,執(zhí)行以下命令啟動 Docker 容器:

sudo docker?run?-it -v /home/linuxzn:/app --name embedded-container embedded-docker:v1.0

-it:以交互式終端模式運(yùn)行容器。

-v:將主機(jī)目錄映射到容器內(nèi)的工作目錄(主機(jī)路徑:容器路徑)。將主機(jī)的/home/linuxzn目錄內(nèi)容映射到容器/app路徑下。

--name:指定容器的名稱為embedded-container。

embedded-docker:v1.0:指定要使用的鏡像。

在容器內(nèi)部,驗(yàn)證交叉編譯器是否配置成功:

5、退出容器

命令:exit

6、重新進(jìn)入容器

如果你需要再次進(jìn)入容器,可以使用以下命令重新啟動并進(jìn)入容器:

sudo docker start -i embedded-container

7、編譯測試

實(shí)際開發(fā)中,我們在Ubuntu主機(jī)上編寫代碼,在主機(jī)終端git管理我們的代碼,docker容器終端中進(jìn)行編譯:

通過以上步驟,我們就成功搭建了一個嵌入式 Linux 的 Docker 開發(fā)環(huán)境,并配置了交叉編譯器。

三、Docker共享

我們制作好的Docker鏡像有兩種常用的方式分享給他人。

1、導(dǎo)出鏡像文件(離線分享)

(1)導(dǎo)出鏡像為.tar 文件
docker save -o 鏡像名.tar <鏡像名:標(biāo)簽>

如:

docker save -o embedded-docker.tar embedded-docker:v1.0
(2)導(dǎo)入鏡像
docker load -i 鏡像名.tar

2、通過私有倉庫(如 Harbor)

通過私有倉庫分享,這種方式適合企業(yè)內(nèi)部或私密分享,這也是我們公司里在用的方式。

(1)搭建或使用私有倉庫

例如安裝 Harbor,配置倉庫地址(如?http://your-harbor.com)。

(2)登錄私有倉庫
docker login your-harbor.com
(3)標(biāo)記鏡像并推送
docker tag <本地鏡像名> your-harbor.com/namespace/鏡像名:標(biāo)簽
docker push your-harbor.com/namespace/鏡像名:標(biāo)簽
(4)他人拉取鏡像
docker pull your-harbor.com/namespace/鏡像名:標(biāo)簽
(5)運(yùn)行Docker
sudo docker run -it -v 主機(jī)路徑:容器工作路徑 --name embedded-container your-harbor.com/namespace/鏡像名:標(biāo)簽

最后

嵌入式系統(tǒng)中,Docker 的應(yīng)用趨勢正隨著物聯(lián)網(wǎng)(IoT)、邊緣計(jì)算和云原生技術(shù)的發(fā)展而快速演進(jìn)。

本篇文章我們只是介紹了 Docker 搭建開發(fā)環(huán)境的優(yōu)勢。

使用Docker搭建嵌入式Linux開發(fā)環(huán)境,有研究表明,大致收益如:

    開發(fā)環(huán)境標(biāo)準(zhǔn)化時間從 4 小時縮短至 5 分鐘跨平臺編譯成功率從 65% 提升至 98%新成員上手時間減少 70%

Docker技術(shù)在我們嵌入式中,還有著不少使用場景,如:

資源效率優(yōu)化:Docker 通過容器化技術(shù)實(shí)現(xiàn)應(yīng)用隔離,相比虛擬機(jī)(VM)更輕量,適合嵌入式設(shè)備的低功耗、低算力場景。例如,ARM 架構(gòu)的邊緣設(shè)備通過 Docker 運(yùn)行微服務(wù),可減少資源占用。

跨平臺部署:Docker 鏡像支持跨硬件平臺(如 x86、ARM)的可移植性,開發(fā)者可在本地開發(fā)后直接部署到嵌入式設(shè)備,降低適配成本。

與邊緣計(jì)算的深度融合:Docker 容器承載 AI/ML 模型推理任務(wù),結(jié)合邊緣設(shè)備的本地處理能力(如 NPU 加速),實(shí)現(xiàn)實(shí)時決策(如工業(yè)質(zhì)檢、自動駕駛)。

Docker 在嵌入式領(lǐng)域的核心價(jià)值在于環(huán)境一致性、跨平臺性和開發(fā)效率提升。未來將深度融入邊緣計(jì)算、AI/ML 和云原生生態(tài)。我們需要關(guān)注輕量級容器技術(shù)優(yōu)化、以充分發(fā)揮 Docker 在嵌入式場景中的潛力。

相關(guān)推薦

登錄即可解鎖
  • 海量技術(shù)文章
  • 設(shè)計(jì)資源下載
  • 產(chǎn)業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄

本公眾號專注于嵌入式技術(shù),包括但不限于C/C++、嵌入式、物聯(lián)網(wǎng)、Linux等編程學(xué)習(xí)筆記,同時,公眾號內(nèi)包含大量的學(xué)習(xí)資源。歡迎關(guān)注,一同交流學(xué)習(xí),共同進(jìn)步!