简单介绍Docker:Docker 容器中预装 Ubuntu 20.04 与 ROS Noetic

欢迎来到激动人心的 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 核心概念:

  1. 容器化:
    利用容器技术封装应用程序和依赖项,确保环境的一致性。
  2. 镜像与容器:
    镜像是轻量级、独立的包,包含运行软件所需的一切;而容器是这些镜像的运行时实例,确保了隔离性。
  3. Dockerfile:
    Dockerfile 是镜像的蓝图,它提供了构建镜像的指令,指定了依赖项并配置了环境。
  4. 可移植性:
    只要安装了 Docker,容器就可以在任何机器上无缝运行,为开发和部署提供了统一的环境。
  5. 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

假如出现图片这个错误,这个错误有两个问题需要解决:

  1. SSL连接被重置 - 网络连接问题

  2. 文件已存在 - 需要确认是否覆盖

解决方案

方法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 容器。简单明了的将卡尔曼滤波器讲清楚

  1. 构建 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

相关推荐
七七powerful2 小时前
Docker 容器化 GPU 压测工具(压测单卡)
运维·docker·容器
Henry_Wu0012 小时前
docker 安装 moltbot+dingding+deepseek
docker·clawdbot·moltbot
firstacui2 小时前
Docker compose的安装与使用
运维·docker·容器
大佐不会说日语~3 小时前
Docker Compose 部署 Spring Boot 应用 502 Bad Gateway 问题排查与解决
spring boot·docker·gateway·maven·故障排查
小二·3 小时前
Go 语言系统编程与云原生开发实战(第6篇)云原生部署实战:Docker 镜像瘦身 × K8s 部署 × Helm 一键发布
docker·云原生·golang
小陈phd16 小时前
混合知识库搭建:本地Docker部署Neo4j图数据库与Milvus向量库
数据库·docker·neo4j
Wpa.wk17 小时前
容器编排 - 了解K8s(pod, deployment,service,lable等概念)
经验分享·测试工具·docker·云原生·容器·kubernetes
Wpa.wk20 小时前
容器编排 - K8s - 配置文件参数说明和基础命令
经验分享·测试工具·docker·云原生·容器·kubernetes
LCG米1 天前
基于PyTorch的TCN-GRU电力负荷预测:从多维数据预处理到Docker云端部署
pytorch·docker·gru