文章目录
-
- [1. 确认系统和网络](#1. 确认系统和网络)
- [2. 更新软件包索引](#2. 更新软件包索引)
- [3. 安装 Docker 与工具](#3. 安装 Docker 与工具)
- [4. 把 Docker 数据放到 userdata](#4. 把 Docker 数据放到 userdata)
- [5. 验证容器能力](#5. 验证容器能力)
1. 确认系统和网络
登录后执行:
bash
cat /etc/os-release
ip -br addr
ip route
第一条确认正在操作 Ubuntu;后两条确认网卡、IP 和默认网关。安装 Docker 要下载软件包,没有默认路由时后续的 apt-get update 会失败。
本机实际结果是 Ubuntu 22.04.5 LTS,eth1 为 192.168.0.102/24,默认网关为 192.168.0.1。
2. 更新软件包索引
执行:
bash
apt-get update
它只下载"可安装的软件版本"列表,不会安装软件。输出 Get: 表示正在下载;完成时应出现 Reading package lists... Done。
本机对 ROS 2 软件源出现:
text
EXPKEYSIG F42ED6FBAB17C654 Open Robotics <info@osrfoundation.org>
这是 ROS 2 源签名过期。Docker 不依赖该源,Ubuntu 官方源仍可用,所以不要关闭签名校验。未来需要 ROS 2 时,再单独更新其签名密钥。
3. 安装 Docker 与工具
执行:
bash
apt-get install -y docker.io docker-compose zram-tools jq smartmontools
docker.io是运行容器的 Docker Engine。docker-compose用一个 Compose 文件管理多个容器。zram-tools、jq、smartmontools分别用于内存压缩、JSON 检查和磁盘健康检查。-y表示自动确认;首次学习时可去掉它,先看 APT 准备安装什么。
启动 Docker 并设为开机启动:
bash
systemctl enable --now docker
systemctl is-enabled docker
systemctl is-active docker
docker --version
docker-compose --version
本机实际返回:
text
enabled
active
Docker version 29.1.3, build 29.1.3-0ubuntu3~22.04.2
docker-compose version 1.29.2, build unknown
Ubuntu 22.04 源没有 docker-compose-plugin,因此当前使用 docker-compose,不是 docker compose。后续 Compose 文件暂时保持 1.29 兼容语法。
4. 把 Docker 数据放到 userdata
先确认 /userdata 已是独立分区:
bash
findmnt /userdata
再创建 Docker 配置:
bash
mkdir -p /etc/docker /userdata/docker
printf '%s\n' \
'{' \
' "data-root": "/userdata/docker",' \
' "log-driver": "local",' \
' "log-opts": {"max-size": "10m", "max-file": "3"}' \
'}' > /etc/docker/daemon.json
systemctl restart docker
data-root 决定镜像、容器和卷的保存位置;把它放在 /userdata 可避免根分区被 HA 数据填满。日志设置限制每个容器的日志为 3 个、每个最多 10MB,避免 eMMC 被日志耗尽。
验证:
bash
docker info --format 'root={{.DockerRootDir}} driver={{.Driver}} logging={{.LoggingDriver}}'
本机实际返回:
text
root=/userdata/docker driver=overlayfs logging=local
若仍显示 /var/lib/docker,先用 cat /etc/docker/daemon.json 检查 JSON,再用 systemctl status docker 查看错误。
5. 验证容器能力
通常执行:
bash
docker run --rm hello-world
成功时会下载测试镜像并输出 Hello from Docker!。本机未能下载,因为:
text
curl: (28) Failed to connect to registry-1.docker.io port 443
这不是 Docker 服务故障,而是 Docker Hub 网络不可达。灾备机不应依赖在线拉取镜像:应从 3588 导出已验证镜像,再导入 RK3576:
bash
# 在 3588:
docker image save -o roomedge-images.tar <镜像1> <镜像2> <镜像3> <镜像4>
# 在 RK3576:
docker load -i roomedge-images.tar
docker image ls