保姆级教程:在RK3588的Debian11上搞定Docker,从内核检测到Hello World
RK3588 Debian11 Docker实战指南:从内核适配到容器部署全解析
当你第一次拿到搭载Debian11系统的RK3588开发板时,可能会对如何在这个嵌入式平台上运行Docker产生疑问。不同于x86架构的通用服务器,ARM平台上的容器化部署需要考虑内核配置、架构兼容性等特殊因素。本文将带你完整走通从内核检测到运行第一个容器的全流程,特别针对RK3588平台上的常见陷阱提供解决方案。
1. 内核配置深度检测与调优
在RK3588这类嵌入式设备上运行Docker,首要任务是确认内核是否支持容器所需的各项功能。Docker官方提供的
check-config.sh
脚本是我们进行内核检测的利器,但需要正确理解其输出结果。
1.1 获取并运行检测脚本
首先下载检测脚本到开发板:
wget https://raw.githubusercontent.com/moby/moby/master/contrib/check-config.sh
chmod +x check-config.sh
运行脚本时需要指定内核配置文件路径。在标准Debian系统中,配置文件通常位于:
./check-config.sh /boot/config-$(uname -r)
1.2 关键配置项解读
脚本输出分为三个关键部分,需要特别关注:
必须启用的核心功能(Generally Necessary) :
-
CONFIG_CGROUPS=y- 控制组资源管理 -
CONFIG_NAMESPACES=y- 命名空间隔离 -
CONFIG_VETH=y- 虚拟以太网设备 -
CONFIG_BRIDGE=y- 网络桥接支持
存储驱动相关配置 :
-
CONFIG_OVERLAY_FS=y- OverlayFS文件系统 -
CONFIG_BLK_DEV_DM=y- 设备映射器
RK3588常见缺失配置 :
# 若发现缺失配置,可通过重新编译内核解决
CONFIG_MEMCG_SWAP=y
CONFIG_BLK_CGROUP=y
CONFIG_CGROUP_HUGETLB=y
提示:RK3588的Linux内核默认配置通常已包含大部分必需项,但可能需要手动启用某些模块。
2. Debian11系统环境准备
2.1 iptables版本切换
Debian11默认使用iptables-nft,而Docker仍依赖传统的iptables-legacy。切换命令如下:
update-alternatives --set iptables /usr/sbin/iptables-legacy
update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
验证切换结果:
iptables --version | grep legacy
# 应显示:iptables v1.8.7 (legacy)
2.2 系统依赖安装
安装基础依赖包:
sudo apt update
sudo apt install -y \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
3. Docker安装与配置
3.1 添加Docker官方源
针对ARM64架构添加Docker仓库:
curl -fsSL https://download.docker.com/linux/debian/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/debian $(lsb_release -cs) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
3.2 安装Docker引擎
更新并安装Docker组件:
sudo apt update
sudo apt install -y \
docker-ce \
docker-ce-cli \
containerd.io \
docker-compose-plugin
3.3 服务配置优化
调整Docker守护进程配置:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
重启服务使配置生效:
sudo systemctl daemon-reload
sudo systemctl restart docker
4. 验证与实战测试
4.1 基础功能验证
运行标准测试容器:
sudo docker run --rm arm64v8/hello-world
输出应包含类似信息:
Hello from Docker!
This message shows that your installation appears to be working correctly.
4.2 ARM架构镜像测试
尝试运行ARM64架构的Alpine Linux容器:
docker run -it --rm arm64v8/alpine:latest uname -a
预期输出应显示
aarch64
架构信息:
Linux 3f8b1e1d2a1a 5.10.0 #1 SMP Debian 5.10.1 aarch64 Linux
4.3 常见问题排查
问题1:权限拒绝错误
Got permission denied while trying to connect to the Docker daemon socket
解决方案:
sudo usermod -aG docker $USER
newgrp docker # 立即生效无需重新登录
问题2:存储驱动不兼容
docker: Error response from daemon: failed to create shim task: OCI runtime create failed
检查并修改存储驱动:
docker info | grep Storage
# 若不为overlay2,在/etc/docker/daemon.json中指定
5. 进阶配置与优化
5.1 容器资源限制
为RK3588设置合理的容器资源限制:
docker run -it --rm \
--memory=1g \
--cpus=2 \
arm64v8/alpine:latest
查看资源限制生效情况:
docker stats
5.2 持久化存储方案
创建volume并挂载:
docker volume create app_data
docker run -d \
--name mysql \
-v app_data:/var/lib/mysql \
arm64v8/mysql:8.0
5.3 网络配置实践
创建自定义网络:
docker network create --driver bridge my_net
docker run -d --network=my_net --name web arm64v8/nginx
验证网络连通性:
docker run --rm --network=my_net arm64v8/alpine ping -c 3 web
6. 生产环境建议
对于RK3588这类资源受限设备,建议采用以下优化策略:
内存管理 :
- 设置合理的swappiness值(建议10-30)
echo 20 | sudo tee /proc/sys/vm/swappiness
存储优化 :
- 使用SSD或高速存储卡
- 定期清理无用镜像
docker system prune -f
监控方案 :
docker stats
docker run -d --name=cadvisor \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:ro \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--publish=8080:8080 \
arm64v8/cadvisor:v0.47.0
更多推荐
所有评论(0)