Chat
Ask me anything
Ithy Logo
Sign in to save

在 MTK G350 開發板上實現內建 Docker 環境的 Yocto Linux 系統

全面指南:打造支持 Docker 的 Yocto Linux 解決方案

embedded linux development board

主要收穫

  • 環境準備與依賴安裝:搭建 Yocto 和 Docker 所需的開發環境,包括必要的工具和依賴項。
  • 內核與 BSP 配置:調整內核配置以支持 Docker 所需的功能,並整合 MTK G350 的 BSP。
  • 映像構建與部署:使用 Yocto Project 構建包含 Docker 的定制映像,並部署至 MTK G350 開發板。

1. 準備開發環境

1.1 安裝必要的工具與依賴項

在開始之前,確保您的主機系統具備構建 Yocto Linux 和 Docker 所需的所有工具和依賴項。建議使用 Ubuntu 20.04 或更新版本作為開發環境。以下是基本的工具和依賴項安裝指令:


sudo apt-get update
sudo apt-get install -y gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat libsdl1.2-dev xterm python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev pylint xterm

    

這些工具將支持 Yocto Project 的構建過程,并確保 Docker 能夠在目標系統上正常運行。

1.2 安裝 Docker CE

Docker 是實現容器化應用的關鍵組件。請按照以下步驟在主機系統上安裝 Docker CE:


sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
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-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io

    

完成安裝後,驗證 Docker 是否正確運行:


docker --version
docker run hello-world

    

2. 獲取 Yocto Project 和 MTK G350 BSP

2.1 克隆 Yocto BSP 源碼

從 MediaTek 提供的官方資源中獲取 Yocto BSP(Board Support Package)源碼。執行以下命令進行克隆:


git clone https://gitlab.com/mediatek/aiot/yocto-bsp.git
cd yocto-bsp
git checkout <適用於 G350 的分支>

    

確保選擇與 MTK G350 開發板相匹配的正確分支,以避免兼容性問題。

2.2 下載 Yocto Project

下載 Yocto Project 的最新穩定版本(建議使用 Kirkstone 或更高版本)以確保獲得最新的功能和修復:


git clone git://git.yoctoproject.org/poky
cd poky
git checkout kirkstone

    

初始化 Yocto 環境:


source oe-init-build-env

    

3. 配置內核以支持 Docker

3.1 調整內核設置

Docker 依賴於內核的特定功能,如 namespaces 和 cgroups。您需要確保這些功能在內核配置中被啟用。使用以下命令打開內核配置界面:


bitbake -c menuconfig virtual/kernel

    

在配置界面中,確保啟用以下選項:

  • Namespaces 支持:啟用 CONFIG_NAMESPACES
  • 控制組設置:啟用 CPU accounting、Memory resource controller 以及其他 cgroups 功能
  • 網絡支持:啟用 Network namespaces 和 bridge 支持

保存配置後,生成內核補丁:


bitbake virtual/kernel -c compile
bitbake virtual/kernel -c deploy

    

3.2 應用內核補丁至 Yocto 配置

將生成的內核補丁文件應用於 Yocto 配方目錄。編輯相應的 .bbappend 文件以引用補丁:


FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
SRC_URI += "file://docker-support.patch"

    

然後重新構建內核:


bitbake virtual/kernel

    

4. 集成 Docker 至 Yocto 映像

4.1 添加 meta-virtualization 層

Docker 在 Yocto 中的支持需要 meta-virtualization 層。克隆並添加該層至 Yocto 項目:


git clone https://git.yoctoproject.org/meta-virtualization
bitbake-layers add-layer ../meta-virtualization

    

4.2 更新 local.conf 配置

編輯 conf/local.conf 文件,添加 Docker 相關配置:


DISTRO_FEATURES_append = " virtualization"
IMAGE_INSTALL_append = " docker docker-compose"
MACHINE = "mtk-g350"

    

4.3 自定義 Docker 配置

根據需求,您可以在 /etc/docker/daemon.json 中自定義 Docker 守護進程的配置。這可以通過 Yocto 的配方添加到根文件系統中:


# Example daemon.json configuration
{
    "storage-driver": "overlay2",
    "log-driver": "json-file",
    "log-opts": {
        "max-size": "100m"
    }
}

    

將上述配置文件添加到 Yocto 的文件系統配方中,例如通過使用 rootfs 配方。


5. 構建 Yocto 映像

5.1 執行 bitbake 構建命令

在 Yocto 的 build 環境中,運行以下命令構建包含 Docker 的映像:


bitbake core-image-minimal

    

此命令將生成一個包含 Docker CE 的最小化 Linux 映像,位於 build/tmp/deploy/images/mtk-g350/ 目錄下。

5.2 儲存空間優化

Yocto 构建可能生成较大的文件,确保您的开发主机有足够的空间。可以通过调整 Yocto 的配置文件来优化文件系统的大小:


IMAGE_ROOTFS_EXTRA_SPACE = "10240"

    

根据需要调整此值以适应 Docker 和其他应用程序的需求。


6. 部署映像至 MTK G350 開發板

6.1 燒錄映像

使用 MediaTek 提供的工具將構建好的 Yocto 映像燒錄至 MTK G350 開發板。可參考官方開發指南中的燒錄部分。常見的燒錄工具包括:

  • USB 烧录工具
  • 串口传输工具(如 etcher)

6.2 啟動並配置系統

燒錄完成後,啟動開發板。首次啟動可能需要一些時間來完成系統初始化。啟動後,檢查 Docker 服務是否自動啟動:


systemctl start docker
systemctl enable docker

    

7. 驗證 Docker 環境

7.1 檢查 Docker 版本

在開發板上運行以下命令以確認 Docker 是否正確安裝:


docker --version

    

期望輸出類似於:


Docker version 20.10.7, build f0df350

    

7.2 運行 Hello World 容器

運行一個簡單的容器來驗證 Docker 的功能:


docker run hello-world

    

成功運行後,應該會看到 Docker 的歡迎信息,如下所示:


Hello from Docker!
This message shows that your installation appears to be working correctly.
...

    

8. 高級配置與優化

8.1 儲存驅動程式配置

確保 Docker 使用高效的儲存驅動程式,如 overlay2,以提升容器性能和資源管理:


{
    "storage-driver": "overlay2"
}

    

8.2 資源管理與限制

在嵌入式系統中,資源管理尤為重要。設定 Docker 容器的 CPU 和記憶體限制,以避免資源耗盡:


docker run -d --name my_container --cpus="1.0" --memory="512m" your_image

    

8.3 自動清理機制

實現容器和鏡像的自動清理,以管理儲存空間。可以設置定時任務(Cron Job)來定期清理未使用的資源:


# Example Cron Job entry to clean up Docker every week
0 0 * * 0 docker system prune -af

    

結論

全面整合 Docker 與 Yocto 在 MTK G350 開發板上

通過上述步驟,您已成功在 MTK G350 開發板上構建並部署了一個包含內建 Docker 環境的 Yocto Linux 系統。這不僅提升了系統的靈活性和可擴展性,還為未來的應用開發和部署提供了強大的基礎。

在實踐過程中,請根據具體需求進一步優化內核配置和 Docker 設定,以達到最佳性能和資源利用率。此外,持續關注 Yocto Project 和 Docker 的最新發展,確保系統保持最新和安全。

參考資料


Last updated January 24, 2025

AI-assisted research. Sources, methodology and corrections · Source-checked guides and tools · Explore published answers

Ask Ithy AI
Download Article
Delete Article