欢迎来到激动人心的 Docker 世界,在这里,容器化技术为软件开发和部署开辟了新的可能性。在这段旅程中,我们将揭开 Docker 的神秘面纱,一步步引导你掌握其基础知识。但这还不是全部------请做好准备,我们将进行一次动手实践,深入探讨如何在 Ubuntu 20.04 上安装 Docker 以及 ROS Noetic。解读 PointNet:使用 Python 和 PyTorch 进行 3D 分割的实用指南
通过本文的学习,你不仅会掌握 Docker 的核心概念,还能将其与ROS Noetic 无缝集成,将容器化技术与机器人开发的强大功能结合在一起。让我们开始这段冒险,释放 Docker 在你的软件开发努力中的潜力。语义分割:基于 TensorFlow 对 FCN 与迁移学习的探究
什么是 Docker?
Docker 是一个旨在通过容器更轻松地开发、部署和运行应用程序的平台。容器允许开发人员将应用程序及其所需的所有部分(如库和其他依赖项)打包在一起,然后作为一个整体包发布。这确保了应用程序在各种计算环境中都能可靠地运行。Ubuntu 24.04 LTS 系统上树莓派摄像头模块 v2.1(IMX219)的安装配置与故障排查
Docker 核心概念:
- 容器化:
利用容器技术封装应用程序和依赖项,确保环境的一致性。 - 镜像与容器:
镜像是轻量级、独立的包,包含运行软件所需的一切;而容器是这些镜像的运行时实例,确保了隔离性。 - Dockerfile:
Dockerfile 是镜像的蓝图,它提供了构建镜像的指令,指定了依赖项并配置了环境。 - 可移植性:
只要安装了 Docker,容器就可以在任何机器上无缝运行,为开发和部署提供了统一的环境。 - Docker Hub:
作为一种基于云的注册中心服务,Docker Hub 集中管理 Docker 镜像,简化了容器化应用程序的共享和分发。

使用 Docker 的优势:
- 跨环境一致性: 确保从开发、测试到生产环境的统一性。
- 可移植性: 可在任何机器上运行,简化了在不同环境中的部署。
- 隔离性: 提供进程隔离,防止依赖项之间的冲突。
- 资源高效: 轻量级容器占用更少的资源,并能快速扩展。
- 快速部署: 利用预构建镜像实现快速且一致的部署。
- 可扩展性: 轻松实现应用程序的横向扩展,以优化资源利用率。
- 版本控制: 实现对依赖项和配置的版本控制管理。
- 依赖管理: 简化了在封装容器内的依赖项处理。
- DevOps 集成: 是 DevOps 实践中的关键工具,简化了 CI/CD 工作流程。
- 微服务支持: 支持微服务架构,实现独立开发和扩展。
- 活跃的生态系统: 活跃的社区和 Docker Hub 提供了丰富的预构建镜像库。
如果你的计算机上安装了不同版本的 Ubuntu,或者你正在使用 Windows 系统,但不想为了使用 ROS Noetic 而切换到 Ubuntu 20,本文将为你提供帮助。这一切都是为了在不更改操作系统的情况下准备好你的开发环境。那么,让我们开始安装 Docker 吧。简单介绍光束法平差与重投影误差
在 Ubuntu 上安装 Docker:
操作系统要求
要安装 Docker Engine,你需要以下 Ubuntu 版本之一的 64 位版本:
- Ubuntu Lunar 23.04
- Ubuntu Kinetic 22.10
- Ubuntu Jammy 22.04 (LTS)
- Ubuntu Focal 20.04 (LTS)
更多详细信息,请查阅 Docker 官方网站。
更新 Ubuntu:
打开终端并运行:
sudo apt update && sudo apt upgrade

安装 Docker 依赖项:
sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release

添加 Docker GPG 密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

假如出现图片这个错误,这个错误有两个问题需要解决:
-
SSL连接被重置 - 网络连接问题
-
文件已存在 - 需要确认是否覆盖
解决方案
方法1:先删除旧文件再重试
# 删除已存在的keyring文件sudo rm /usr/share/keyrings/docker-archive-keyring.gpg# 重新下载Docker GPG密钥curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
方法2:使用国内镜像源(推荐)
如果连接Docker官方源有问题,可以使用国内镜像:
# 使用阿里云镜像curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg# 或者使用清华镜像curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

方法3:分步执行
# 1. 先下载到临时文件curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /tmp/docker-gpg# 2. 检查文件是否下载成功ls -l /tmp/docker-gpg# 3. 导入GPG密钥sudo gpg --dearmor /tmp/docker-gpg -o /usr/share/keyrings/docker-archive-keyring.gpg
方法4:检查网络连接
# 测试网络连接ping download.docker.com# 检查防火墙设置sudo ufw status# 如果有代理,设置代理export https_proxy=http://your-proxy:port
我使用的是方法2
设置 Docker 软件源:
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

安装 Docker:
sudo apt updatesudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin


无需 sudo 即可运行 Docker(可选):
sudo usermod -aG docker $USER

注销并重新登录,或运行 su - $ USER 以应用组更改。
验证安装:
docker --version

此外,还可以通过以下命令进行测试:
docker run hello-world
# 使用国内镜像源直接拉取docker pull registry.cn-hangzhou.aliyuncs.com/library/hello-world:latest# 运行镜像docker run registry.cn-hangzhou.aliyuncs.com/library/hello-world:latest
在 Windows 上安装 Docker:
下载 Docker Desktop: 访问 Docker Desktop for Windows(https://www.docker.com/products/docker-desktop/) 并下载安装程序。
安装 Docker Desktop: 按照 Docker Desktop 安装程序中的说明进行安装。
运行 Docker Desktop: 安装完成后,Docker Desktop 应该会自动启动。请在系统托盘中查找 Docker 图标。
验证安装: 打开 PowerShell 并运行:
docker --version
另外,检查一下 Docker Compose:
docker-compose --version
现在一切就绪!Docker 已经成功安装在 Ubuntu 20 和 Windows 上,准备好迎接你的 ROS Noetic 开发之旅了。
为 ROS 开发构建 Docker 容器
在机器人技术和 ROS(机器人操作系统)开发领域,创建 Docker 容器可以提供一个精简且可复现的环境。让我们开始构建一个专为 Ubuntu 20.04、ROS Noetic 及其必需模块定制的 Docker 容器。简单明了的将卡尔曼滤波器讲清楚
-
构建 Dockerfile:
为Docker创建一个新文件夹cd ~mkdir ~/Docker# 进入Docker文件夹并创建Dockerfilecd ~/Dockertouch Dockerfile

这将设置目录结构,并为你的容器创建一个空的 Dockerfile。
向 Dockerfile 填充安装指令:
echo 'FROM osrf/ros:noetic-desktop-full' > Dockerfile && echo 'ARG USER=user' >> Dockerfile && echo 'ARG DEBIAN_FRONTEND=noninteractive' >> Dockerfile && echo 'RUN apt-get update && apt-get install -y ros-noetic-moveit ros-noetic-ros-controllers ros-noetic-gazebo-ros-control ros-noetic-rosserial ros-noetic-rosserial-arduino ros-noetic-roboticsgroup-upatras-gazebo-plugins ros-noetic-actionlib-tools terminator python3-pip && rm -rf /var/lib/apt/lists/*' >> Dockerfile && echo 'RUN pip install flask flask-ask-sdk ask-sdk' >> Dockerfile && echo 'WORKDIR /home/${USER}' >> Dockerfile

该 Dockerfile 基于官方的 ROS Noetic desktop-full 镜像,并添加了机器人开发所需的额外软件包和依赖项。它还安装了用于终端管理的 Terminator 和用于 Web 开发的 Flask。
构建 Docker 容器:
docker build ~/Docker -t ros-noetic-container
我自己的命令
docker build /mnt/f/linzejun01/docker_test01 -t ros-noetic-container

此命令使用 Dockerfile 构建一个名为 "ros-noetic-container" 的容器镜像。
创建共享卷:
mkdir ~/Volumes
这会在你的主机上创建一个将与 Docker 容器共享的目录。在 PC 和 Docker 容器之间共享文件夹对于无缝协作和数据持久化至关重要。这个共享卷充当了桥梁,实现了本地机器与容器之间的文件和数据交换。它确保了在容器内所做的任何更改(如代码修改或项目更新)都能反映在你的 PC 上,提供了一个同步的开发环境。这种共享文件夹方法消除了丢失重要工作的风险,并促进了流畅的开发流程,让你在利用 Docker 容器化优势的同时,保持了本地文件系统的灵活性和可访问性。如何在边缘设备构建、优化和部署人工智能模型
运行 Docker 容器:
docker run -it --rm --user=$(id -u $USER):$(id -g $USER) --env="DISPLAY" --volume="/etc/group:/etc/group:ro" --volume="/etc/passwd:/etc/passwd:ro" --volume="/etc/shadow:/etc/shadow:ro" --volume="/etc/sudoers.d:/etc/sudoers.d:ro" --net host -v /home:/home -v ~/Volumes:/home/usr/ ros-noetic-container
此命令以交互模式启动 Docker 容器,并共享主机的用户和组 ID,以避免权限问题。它还共享了必要的卷和网络配置。
启动 Terminator 应用程序:
terminator -u
Terminator 是一款终端模拟器,提供了更高级的终端窗口管理体验。
验证容器环境:
lsb_release -a

验证 ROS 安装:
roscore
运行 roscore 可检查机器人操作系统(ROS)是否在 Docker 容器内正常运行。
退出 Docker:
要退出 Docker 容器,你可以使用 exit 命令或按 Ctrl + D。这将终止容器内的交互式会话,让你回到宿主机的终端中。
启动 Docker 容器:
每当需要使用这个已构建好的容器时,你应该在终端中运行以下命令。
docker run -it --rm --user=$(id -u $USER):$(id -g $USER) --env="DISPLAY" --volume="/etc/group:/etc/group:ro" --volume="/etc/passwd:/etc/passwd:ro" --volume="/etc/shadow:/etc/shadow:ro" --volume="/etc/sudoers.d:/etc/sudoers.d:ro" --net host -v /home:/home -v ~/Volumes:/home/usr/ ros-noetic-container
Docker 容器启动并运行后,请无缝连接 Visual Studio Code 到该容器。请从 https://code.visualstudio.com/ 下载并安装 Visual Studio Code。安装完成后,前往"扩展"选项卡,并添加以下用于 C++ 和 Python 的扩展,这两种语言是 ROS 开发的首选语言:
-
ms-vscode.cpptools
-
twxs.cmake
-
ms-vscode.cmake-tools
-
ms-python.python
-
redhat.vscode-xml
-
ms-vscode-remote.remote-containers
现在,在 Visual Studio Code 中导航到"Remote Explorer"选项卡:
按回车键或单击以全尺寸查看图像

右键单击正在运行的 ros-noetic-container。

选择"Attach to Container."。
瞧!现在你的 Visual Studio Code 已与 ros-noetic-container 无缝集成,随时可以在 Ubuntu 20.04 和 ROS Noetic 环境中进行开发了。
保存 Docker 容器:
如果你对容器进行了修改(例如安装了希望在将来使用的新的软件包、工具或库),请按照以下命令有效地保存这些更改。
列出正在运行的容器:
docker ps
此命令将显示正在运行的容器列表,你需要记下想要提交(commit)的容器的 CONTAINER ID(容器 ID)或 NAME(名称)。
提交更改:
docker commit CONTAINER_ID_OR_NAME new_image_name
请将 CONTAINER_ID_OR_NAME 替换为你的容器的实际 ID 或名称,并将 new_image_name 替换为你为新镜像指定的名称。
示例:
docker commit my_container ROS-Noetic-Updated
此命令将基于指定容器中所做的更改,创建一个名为 ROS-Noetic-Updated 的新镜像。
现在,每当你想要恢复带有已保存更改的工作时,都可以基于这个更新后的镜像启动一个新的容器。
请记住,使用版本控制系统(例如 Git)来管理你的代码更改是一个很好的习惯,而 Docker 镜像则可以捕获环境和依赖项,从而提供可重复性。
Docker Hub:容器魔法的家园
Docker Hub 是容器奇迹发生的地方。它是 Docker 镜像的终极空间,让分享和查找容器变得轻而易举。需要镜像吗?Docker Hub 都有。它就像一个容器的数字图书馆,让你的软件探索之旅更加顺畅和有趣!
开启这段 Docker 探索之旅是一次相当丰富的经历,它解锁了软件开发中容器化的巨大潜力。我们揭开了 Docker 的神秘面纱,探索了其核心概念,并将其与 Ubuntu 20.04 上的机器人操作系统(ROS)Noetic 无缝集成。从环境的一致性到部署的敏捷性,Docker 已被证明是一个游戏规则的改变者。解读openAI的文本图像模型-CLIP
当我们告别本文时,请记住,Docker 不仅仅是一个工具;它是一个通往充满活力的生态系统的大门。无论你是确保跨环境的一致性、隔离进程还是水平扩展应用程序,Docker 都是你的得力助手。旅程并未在此结束,它延伸到了微服务、DevOps 集成以及 Docker Hub 上丰富的预构建镜像仓库领域。
对于使用不同版本 Ubuntu 或 Windows 的用户,请不要担心------本文证明了你无需更改操作系统即可利用 Docker 的强大功能。当你探索容器世界时,别忘了探索 Docker Hub,即容器魔法的家园。它就像你的容器数字图书馆,让软件探索变得更加顺畅和愉快。
因此,让我们致敬 Docker,致敬 ROS Noetic,致敬容器化开发的无限可能。祝你编码愉快!生成式AI vs 预测式AI:揭秘人工智能领域的两大技术
Press enter or click to view image in full siz