紅葉~
L
O
A
D
I
N
G
紅葉
Docker

Docker

Docker

本文记录在 Ubuntu 24.04 上安装 Docker、配置 Docker Hub 镜像源、允许非 root 用户执行 Docker 命令,以及使用 Docker 运行 ROS 1 镜像的方法。

1. 在 Ubuntu 24.04 上安装 Docker

第 1 步:更新软件包并安装必要软件

更新软件包索引,并安装添加 Docker 仓库所需的前置软件包:

1
2
sudo apt update
sudo apt install apt-transport-https curl

第 2 步:导入 Docker 官方 GPG 密钥

使用以下命令下载并导入 Docker 官方 GPG 密钥:

1
2
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

第 3 步:添加 Docker 官方仓库

将 Docker 官方仓库添加到 Ubuntu 24.04 LTS 的软件源列表:

1
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 仓库:

1
sudo apt update

第 5 步:安装 Docker

执行以下命令安装 Docker Engine 及相关组件:

1
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

安装的组件包括:

  • docker-ce:Docker Engine。
  • docker-ce-cli:用于与 Docker 守护进程通信的命令行工具。
  • containerd.io:管理容器生命周期的容器运行时。
  • docker-buildx-plugin:增强镜像构建功能的 Docker 扩展,支持多平台构建。
  • docker-compose-plugin:通过 YAML 文件管理多容器 Docker 应用的插件。

第 6 步:检查 Docker 服务状态

1
sudo systemctl is-active docker

如果输出 active,说明 Docker 服务正在运行。

第 7 步:运行测试容器

运行 hello-world 测试容器,验证 Docker 是否安装成功:

1
sudo docker run hello-world

2. 替换 Docker Hub 国内镜像源

如果拉取 Docker Hub 镜像时遇到困难,可以尝试配置国内镜像源。镜像服务的可用性可能发生变化,使用前建议先确认服务状态。

第 1 步:打开配置文件

使用文本编辑器打开 Docker 配置文件;如果文件不存在,保存时会自动创建:

1
sudo vim /etc/docker/daemon.json

第 2 步:编辑配置文件

在配置文件中添加或修改 registry-mirrors。可选地址包括:

  • DaoCloud:https://docker.m.daocloud.io
  • 百度云镜像站:https://mirror.baidubce.com
  • 网易云镜像站:http://hub-mirror.c.163.com
  • 南京大学镜像站:https://docker.nju.edu.cn

配置示例:

1
2
3
4
5
6
7
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://mirror.baidubce.com",
"http://hub-mirror.c.163.com"
]
}

第 3 步:重启 Docker 服务

保存配置文件,然后重新加载配置并重启 Docker:

1
2
sudo systemctl daemon-reload
sudo systemctl restart docker

第 4 步:验证配置

1
sudo docker info

在输出中检查 Registry Mirrors,确认镜像源是否生效。

3. 允许非 root 用户运行 Docker 命令

默认情况下,只有 root 用户或具有 sudo 权限的用户才能执行 Docker 命令。如果不加 sudo 直接运行 docker,系统可能会提示权限错误。

运行以下命令,将当前登录用户添加到 docker 用户组:

1
sudo usermod -aG docker "${USER}"

执行后需要退出并重新登录,或者重启系统,新的用户组权限才会生效。

注意:加入 docker 用户组相当于授予该用户较高的系统权限,仅应添加可信用户。

4. 卸载 Docker

第 1 步:卸载 Docker 及相关组件

1
sudo apt purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras

第 2 步:删除 Docker 数据

危险操作: 以下命令会永久删除本机所有 Docker 镜像、容器、卷及 containerd 数据。执行前请确认重要数据已经备份。

1
2
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

5. Docker 常用命令

查看本地镜像

1
docker images  # 查看全部镜像

docker images 查看本地镜像

运行容器

1
sudo docker run -it REPOSITORY:TAG

REPOSITORY:TAG 替换为实际的镜像名称和标签。

查看正在运行的容器

1
docker ps  # 获取当前容器 ID 或名称

docker ps 查看正在运行的容器

将容器提交为新镜像

可以使用容器名称:

1
docker commit ros_container my_ros_env:v1

也可以使用容器 ID:

1
docker commit a1b2c3d4e5f6 my_ros_env:v1

导出和导入镜像

将镜像保存为 tar 文件:

1
docker save -o my_ros_env_v1.tar my_ros_env:v1

在其他主机上加载镜像:

1
docker load -i my_ros_env_v1.tar

6. 使用 Docker 运行 ROS 镜像

获取 ROS 1 Docker 镜像

ROS 官方提供了 Docker 镜像,可以直接从 Docker Hub 拉取所需版本,例如 Noetic:

1
docker pull osrf/ros:noetic-desktop-full

启动 Docker 容器

使用以下命令启动容器,并进入交互式 Bash 环境:

1
docker run -it --rm osrf/ros:noetic-desktop-full

其中,--rm 表示退出容器后自动删除该容器。需要保留容器时,请去掉这个参数。

如果需要将当前目录挂载到容器的工作目录中,可以执行:

1
docker run -it --rm -v "$(pwd):/workspace" osrf/ros:noetic-desktop-full

配置 ROS 环境

进入容器后,加载 ROS Noetic 环境:

1
source /opt/ros/noetic/setup.bash

为了让配置在每次打开 Bash 时自动生效,可以写入 .bashrc

1
2
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc

测试 ROS 1 安装

1
roscore

如果 roscore 正常启动,说明 ROS 1 环境已经配置完成。

运行带图形界面的 ROS 工具

如果计划运行 Gazebo、RViz 或其他图形界面工具,需要配置 X11 共享。在宿主机中执行:

1
xhost +local:docker

然后在启动容器时传递显示环境并挂载 X11 socket,例如:

1
2
3
4
docker run -it --rm \
-e DISPLAY="${DISPLAY}" \
-v /tmp/.X11-unix:/tmp/.X11-unix \
osrf/ros:noetic-desktop-full

使用完成后,可以在宿主机撤销 Docker 的本地 X11 访问权限:

1
xhost -local:docker
本文作者:紅葉
本文链接:https://swe-et.github.io/docker/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可