4. Docker容器化部署基础

任务目标

在边缘设备(以Ubuntu 22.04 ARM64为例)上完成Docker引擎的安装,验证安装正确性,并配置Docker服务开机自启,最终通过运行hello-world容器确认容器运行时工作正常。

环境与依赖

  • 操作系统:Ubuntu 22.04 LTS(ARM64架构,适用于树莓派、RK3588等边缘设备)
  • 内核要求:Linux内核版本≥3.10(Ubuntu 22.04默认满足)
  • 网络:需能访问Docker官方APT仓库(或使用镜像源)
  • 权限:当前用户需具有sudo权限

安装与配置步骤

以下命令在设备终端中按顺序执行。使用Docker官方APT仓库安装,确保获取最新稳定版本。

# 1. 更新软件包索引并安装依赖
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg

# 2. 添加Docker官方GPG密钥
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# 3. 添加Docker APT仓库(自动检测架构)
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo $VERSION_CODENAME) stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 4. 安装Docker引擎
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 5. 将当前用户加入docker组(免sudo执行docker命令)
sudo usermod -aG docker $USER
newgrp docker   # 使组变更立即生效(或重新登录)

验证安装与运行hello-world

安装完成后,执行以下命令验证Docker引擎状态并运行测试容器:

# 检查Docker服务运行状态
sudo systemctl status docker --no-pager

# 运行hello-world容器(首次运行会自动拉取镜像)
docker run hello-world

预期输出:若安装正确,docker run hello-world会输出一段欢迎信息,包含“Hello from Docker!”字样,并说明您的安装似乎正确工作。该输出由镜像内程序直接打印,是Docker引擎正常工作的确定性标志。

配置开机自启

Docker安装后默认已启用开机自启。若需确认或重新启用,执行:

sudo systemctl enable docker.service
sudo systemctl enable containerd.service

验证自启配置是否生效:

sudo systemctl is-enabled docker.service

输出应为enabled,表示Docker服务已配置为开机自动启动。

验证方法与判定标准

  1. 安装验证:docker --version能输出版本号(如Docker version 27.x.x),且sudo systemctl status docker显示active (running)。
  2. 功能验证:docker run hello-world成功输出欢迎信息,无错误退出,即证明容器运行时正常工作。
  3. 自启验证:sudo systemctl is-enabled docker.service返回enabled。重启设备后,执行docker ps不报“无法连接”错误,说明服务已随系统自动启动。

常见问题

  • 拉取镜像超时:若网络无法访问Docker Hub,可配置镜像加速器(如编辑/etc/docker/daemon.json添加registry-mirrors字段),然后执行sudo systemctl restart docker。
  • 权限错误:若docker run提示permission denied,说明当前用户不在docker组中,重新执行sudo usermod -aG docker $USER并注销重登。
  • 架构不匹配:在ARM64设备上安装x86镜像会报exec format error,需拉取arm64v8标签或支持多架构的镜像。