在 MTK G350 開發板上實現內建 Docker 環境的 Yocto Linux 系統
全面指南:打造支持 Docker 的 Yocto Linux 解決方案
主要收穫
- 環境準備與依賴安裝:搭建 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