1. 项目概述
最近在折腾泰山派3M-RK3576开发板,发现官方文档里关于Docker安装的部分写得比较简略。作为一个在嵌入式领域摸爬滚打多年的老司机,今天就来分享下我在RK3576上部署Docker的完整实战经验,包括几个官方没提到的关键配置和性能优化技巧。
RK3576这颗芯片很有意思,四核Cortex-A55搭配Mali-G52 GPU,性能足以跑起轻量级容器。但ARM架构的Docker安装和x86平台有些不同,特别是在存储驱动和内核参数调优方面需要特别注意。下面就把我从系统准备到容器编排的完整过程拆解给大家。
2. 系统环境准备
2.1 基础系统要求
首先确认你的泰山派运行的是基于Debian的Linux系统(推荐官方提供的Ubuntu 20.04镜像)。关键检查点:
- 内核版本 ≥ 5.10(
uname -r查看) - 存储空间 ≥ 8GB(
df -h检查) - 已连接稳定的网络(建议有线连接)
注意:RK3576的默认镜像可能未启用cgroup v2,需要修改/boot目录下的环境配置文件添加
systemd.unified_cgroup_hierarchy=1参数
2.2 依赖包安装
执行以下命令更新并安装基础工具链:
bash复制sudo apt update && sudo apt upgrade -y
sudo apt install -y \
ca-certificates \
curl \
gnupg \
lsb-release \
apt-transport-https
特别提醒:ARM架构需要额外安装libseccomp2的backports版本:
bash复制sudo apt install -y libseccomp2/libseccomp2_2.5.1-1_arm64.deb
3. Docker引擎安装
3.1 添加官方仓库
不同于x86平台,ARM64需要指定正确的仓库源:
bash复制curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \
"deb [arch=arm64 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
3.2 安装Docker CE
执行标准安装流程:
bash复制sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
安装后关键验证步骤:
- 检查服务状态:
sudo systemctl status docker - 测试基础命令:
sudo docker run --rm hello-world
常见问题处理:
- 若出现
Failed to start docker.service错误,尝试:bash复制sudo mkdir -p /etc/systemd/system/docker.service.d sudo systemctl daemon-reload
4. 存储驱动优化
4.1 选择适合的驱动方案
RK3576推荐使用overlay2驱动,修改配置文件/etc/docker/daemon.json:
json复制{
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
}
4.2 挂载点优化
由于开发板eMMC性能有限,建议将Docker数据目录挂载到高速存储设备(如外接SSD):
bash复制sudo mkdir -p /mnt/docker_data
sudo rsync -aqxP /var/lib/docker/ /mnt/docker_data
sudo mv /var/lib/docker /var/lib/docker.bak
sudo ln -s /mnt/docker_data /var/lib/docker
5. 容器网络配置
5.1 启用IPv6支持
编辑/etc/docker/daemon.json添加:
json复制{
"ipv6": true,
"fixed-cidr-v6": "fd00::/80"
}
重启服务后测试:
bash复制sudo docker run --rm -it alpine ping6 google.com
5.2 优化桥接网络
创建自定义网络提高性能:
bash复制sudo docker network create \
--driver=bridge \
--opt "com.docker.network.bridge.name"="docker1" \
--opt "com.docker.network.bridge.enable_ip_masquerade"="true" \
--subnet 172.18.0.0/16 \
mybridge
6. 性能调优实战
6.1 内存限制配置
针对RK3576的4GB内存,建议在/etc/docker/daemon.json中添加:
json复制{
"default-ulimits": {
"memlock": {
"Name": "memlock",
"Hard": -1,
"Soft": -1
}
},
"oom-score-adjust": -500
}
6.2 CPU调度优化
创建容器时指定CPU亲和性:
bash复制sudo docker run -it --cpuset-cpus="0-3" --cpu-shares=1024 ubuntu
监控命令:
bash复制sudo docker stats --no-stream
7. 常见问题排查
7.1 容器启动失败
典型错误:failed to create shim task
解决方案:
bash复制sudo apt install linux-modules-extra-$(uname -r)
sudo modprobe overlay
7.2 存储空间不足
清理无用镜像和容器:
bash复制sudo docker system prune -a --volumes
查看详细磁盘使用:
bash复制sudo docker system df
8. 进阶部署示例
8.1 部署Portainer管理界面
ARM64兼容版本安装:
bash复制sudo docker volume create portainer_data
sudo docker run -d \
-p 9000:9000 \
--name=portainer \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:linux-arm64
8.2 运行ARM64版MySQL
优化配置示例:
bash复制sudo docker run --name mysql8 \
-e MYSQL_ROOT_PASSWORD=yourpass \
-v /mnt/mysql_data:/var/lib/mysql \
--memory=1g \
--cpus=2 \
-p 3306:3306 \
-d mysql:8-oracle \
--performance-schema=OFF \
--default-authentication-plugin=mysql_native_password
9. 安全加固建议
9.1 用户权限管理
创建docker用户组并授权:
bash复制sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker
9.2 启用内容信任
在/etc/docker/daemon.json中添加:
json复制{
"content-trust": {
"mode": "enforced"
}
}
验证镜像签名:
bash复制export DOCKER_CONTENT_TRUST=1
docker pull alpine
10. 监控与维护
10.1 资源监控方案
安装cAdvisor容器:
bash复制sudo docker run \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:ro \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--publish=8080:8080 \
--detach=true \
--name=cadvisor \
--privileged \
--device=/dev/kmsg \
gcr.io/cadvisor/cadvisor:v0.47.0-arm64
10.2 日志管理技巧
配置日志轮转:
bash复制sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
EOF
查看容器日志:
bash复制sudo docker logs --tail 50 -f 容器名
在RK3576这样的ARM开发板上运行Docker,最关键的其实是存储I/O和内存管理。实测发现,将docker数据目录放在外接SSD上,容器启动速度能提升3-5倍。另外建议在内存不足时及时清理停止的容器,这个开发板的swap性能比较有限