当前位置: 首页 > news >正文

【工具使用-Docker容器】构建自己的镜像和容器

1. 镜像和容器介绍

  • 镜像Image)是一个只读的模板,包含了运行某个应用所需的全部内容,比如:
    • 操作系统(比如 Ubuntu)
    • 应用程序代码
    • 运行环境(如 Python、Java、Node.js 等)
    • 库和依赖、
  • 容器Container)是镜像的一个“运行实例”(runtime instance)。
    • 当你运行一个镜像时,Docker 会基于镜像启动一个容器。
    • 容器拥有自己的文件系统、进程空间、网络等,但它们依然运行在宿主机(Host)的内核之上。
    • 一个镜像可以启动多个容器(互相独立)

2. 镜像(Image)创建与管理

2.1. Harbor镜像管理

Harbor 是一个 企业级的 Docker 镜像仓库

2.2. 构建Docker镜像(Docker Image)

1. 创建项目目录

mkdir ros2-humble-docker
cd ros2-humble-docker

2. 写Dockerfile

vim Dockerfile

# Ubuntu 22.04 + ROS2 Humble + CUDA + PyTorch Docker镜像
FROM nvidia/cuda:11.8.0-devel-ubuntu22.04# 避免交互式安装时的提示
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=Asia/Shanghai# 设置工作目录
WORKDIR /workspace# 更新系统并安装基础依赖
RUN apt-get update && apt-get upgrade -y && \apt-get install -y \curl \wget \gnupg2 \lsb-release \ca-certificates \software-properties-common \build-essential \cmake \git \vim \htop \net-tools \iputils-ping \sudo \tzdata \locales \python3 \python3-pip \python3-dev \python3-setuptools \&& rm -rf /var/lib/apt/lists/*# 设置时区和语言环境
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && \locale-gen en_US.UTF-8
ENV LANG=en_US.UTF-8
ENV LANGUAGE=en_US:en
ENV LC_ALL=en_US.UTF-8# 安装ROS2 Humble
RUN curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg && \echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | tee /etc/apt/sources.list.d/ros2.list > /dev/null# 安装ROS2基础包(不包含有问题的cyclonedx包)
RUN apt-get update && \apt-get install -y \ros-humble-desktop \ros-humble-rmw-fastrtps-cpp \ros-dev-tools \python3-colcon-common-extensions \python3-rosdep \python3-vcstool \&& rm -rf /var/lib/apt/lists/*# 初始化rosdep(处理网络超时问题)
RUN rosdep init || echo "rosdep init failed, continuing..." && \rosdep update --include-eol-distros || echo "rosdep update failed, continuing..."# 安装Python依赖(调整PyTorch版本以匹配CUDA 11.8)
RUN pip3 install --no-cache-dir \torch==1.13.1+cu117 \torchvision==0.14.1+cu117 \torchaudio==0.13.1 \--extra-index-url https://download.pytorch.org/whl/cu117RUN pip3 install --no-cache-dir \numpy \opencv-python \matplotlib \scipy \scikit-learn \pandas \pillow \requests \pyyaml \tqdm# 设置ROS2环境变量
RUN echo "source /opt/ros/humble/setup.bash" >> /root/.bashrc && \echo "export ROS_DOMAIN_ID=0" >> /root/.bashrc && \echo "export RMW_IMPLEMENTATION=rmw_fastrtps_cpp" >> /root/.bashrc# 创建ROS2工作空间
RUN mkdir -p /workspace/ros2_ws/src
WORKDIR /workspace/ros2_ws# 设置环境变量
ENV ROS_DISTRO=humble
ENV ROS_VERSION=2
ENV ROS_PYTHON_VERSION=3# 暴露常用端口
EXPOSE 11311# 设置启动脚本
RUN echo '#!/bin/bash\nsource /opt/ros/humble/setup.bash\nexec "$@"' > /entrypoint.sh && \chmod +x /entrypoint.shENTRYPOINT ["/entrypoint.sh"]
CMD ["/bin/bash"]

3. 构建镜像

sudo docker build -t ubuntu22.04-ros2-humble-cuda11.8-pytorch1.13 .

4. 验证镜像

# 查看构建的镜像
sudo docker images | grep ros2# 测试运行
sudo docker run -itd --shm-size=16g -v /mnt:/mnt --name test-ros2 --network host ubuntu22.04-ros2-humble-cuda11.8-pytorch1.13# 进入容器测试
sudo docker exec -it test-ros2 bash# 在容器内测试ROS2
source /opt/ros/humble/setup.bash
ros2 --help

2.3. 推送到Harbor仓库

1. 本地镜像打标签(Tag)

  • 本地镜像名字是:ubuntu22.04-ros2-humble-cuda11.8-pytorch1.13
  • 推送到 Harbor 的项目xxx下的仓库 ros2_humble,标签为 ubuntu22.04-ros2-humble-cuda11.8-pytorch1.13,命令如下:
docker tag ubuntu22.04-ros2-humble-cuda11.8-pytorch1.13 xx:8888/library/ros2_humble:latest# xx:8888 是 Harbor 的地址和端口。
# library/ros2_humble 是你 Harbor 上的项目和仓库。
# :latest 是镜像标签,可以改成任何你需要的版本号。

2. 登录 Harbor

如果是第一次推送,需要先登录:

docker login xx:88888

系统会提示你输入用户名和密码(Harbor 的账户)。
登录成功后会显示 Login Succeeded。

3. 推送镜像

  • 执行 push 命令:
docker push xxx:8888/library/ros2_humble:latest

这个过程可能需要几分钟,取决于镜像大小和网络速度。

  • 验证:可以在 Harbor Web 页面中看到新推送的镜像。

3. Docker安装与使用

3.1. Ubuntu安装Docker

在 Ubuntu 20.04 上安装 Docker 的步骤如下

1. 更新系统包索引

sudo apt-get update

2. 安装必要的依赖

sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common

3. 添加 Docker 的GPG 密钥

添加阿里云 GPG 密钥
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyringscurl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

4. 添加 Docker 的 APT 源

# 写入阿里云软件源
echo \"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \$(lsb_release -cs) stable" | \sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

5. 再次更新包索引

sudo apt-get update

6. 安装 Docker CE(Community Edition)

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

7. 验证 Docker 是否安装成功

sudo docker --version

输出类似 Docker version 20.x.x, build xxxxxxx 表示安装成功。

8. 设置非 root 用户运行 Docker

默认情况下,Docker 需要 root 权限。若想以非 root 用户运行:

sudo usermod -aG docker $USER

然后注销并重新登录,或者运行:

newgrp docker

9. (可选)设置 Docker 开机自启并启动服务

sudo systemctl enable docker
sudo systemctl start docker

10. 配置 Docker 镜像加速器

编辑或新建配置文件:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<EOF
{"registry-mirrors": ["https://docker.m.daocloud.io","https://mirror.baidubce.com","https://docker.mirrors.ustc.edu.cn","https://registry.docker-cn.com"]
}
EOF

保存后重启 Docker:

sudo systemctl daemon-reexec
sudo systemctl restart docker

11. 测试 Docker 安装

运行一个简单的容器验证:

docker run hello-world

如果输出包含 “Hello from Docker!” 的信息,说明安装成功。

http://www.dtcms.com/a/340791.html

相关文章:

  • GO环境变量中GO111MODULE到底是干啥的?
  • ES常用查询命令
  • HTML应用指南:利用POST请求获取全国刘文祥麻辣烫门店位置信息
  • 无人机图传 便携式5G单兵图传 HDMI图传设备 多卡5G单兵图传设备详解
  • 极其简单二叉树遍历JAVA版本
  • PDF如何在Adobe Acrobat 中用OCR光学识别文档并保存可编辑文档
  • 【开源项目】高效入门视觉强化学习,告别零散资料,一个开源项目搞定500+资源
  • Java 15 新特性及具体应用
  • 从导航工具到空间智能体,高德用AI寻找出路
  • 大数据毕业设计选题推荐-基于大数据的1688商品类目关系分析与可视化系统-Hadoop-Spark-数据可视化-BigData
  • ios开发 -- 八股 -- UI视图
  • 51单片机与stm32单片机,先学习哪一个?
  • 牛津大学xDeepMind 自然语言处理(3)
  • 翻译记忆库(TMX)与机器翻译的结合应用
  • 【国内电子数据取证厂商龙信科技】隐私增强技术
  • 论函数指针
  • 深入分析Linux kobject 的工作原理与实现机制
  • 【C语言16天强化训练】从基础入门到进阶:Day 4
  • K8S-Pod资源对象——Pod探针
  • 基于深度学习CenterPoint的3D目标检测部署实战
  • MySQL的简单介绍
  • PyTorch API 5
  • 通过uniapp将vite vue3项目打包为android系统的.apk包,并实现可自动升级功能
  • PyTorch API 7
  • PiscCode集成Hand Landmarker:实现高精度手部姿态检测与分析
  • 查看文件内容
  • kotlin 协程笔记
  • 手机 浏览器调用摄像头扫描二维码Quagga
  • RAG系统文本检索优化:Cross-Encoder与Bi-Encoder架构技术对比与选择指南
  • 时序数据库IoTDB的列式存储引擎