【Docker】ubuntu20.04 X86机器搭建NVIDIA ARM64 TX2的Docker镜像

文章目录

  • [1. 设置ubuntu为清华源](#1. 设置ubuntu为清华源)
    • [1.1 备份源文件](#1.1 备份源文件)
    • [1.2 替换清华源](#1.2 替换清华源)
    • [1.3 更新清华源](#1.3 更新清华源)
  • [2. Ubuntu Docker 安装](#2. Ubuntu Docker 安装)
  • [3. 安装qemu](#3. 安装qemu)
  • [4. 安装Nvidia TX2 Docker镜像](#4. 安装Nvidia TX2 Docker镜像)
  • [5. 如何使用TX2容器](#5. 如何使用TX2容器)
  • [6. 参考资料](#6. 参考资料)

1. 设置ubuntu为清华源

为了后面ubuntu下载安装软件快些,需要使用国内的源,比如清华源。

(备注:已经更新过或者不太关心下载速度可以跳过此步)

1.1 备份源文件

  • 进入到源文件sources.list目录:

    shell 复制代码
    cd  /etc/apt/

    目录展示如下:

  • source.list备份到source.list.bak,为了防止修改失误,万一出现问题可以使用备份文件source.list.bak进行还原。

    shell 复制代码
    sudo  cp sources.list sources.list.bak

    输入命令后的效果如下:

1.2 替换清华源

打开清华源官网,选择自己使用的ubuntu的版本,例如:Ubuntu 20.04
https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/

使用vim打开源文件,删除原来所有的内容,然后将网站上的内容复制粘贴到源文件:

shell 复制代码
sudo vim sources.list

效果如下:

然后保存退出。

1.3 更新清华源

更新系统源命令如下:

shell 复制代码
sudo apt-get update

更新过程中出现了错误如下:

这里需要安装/更新证书ca-certificates,命令如下:

shell 复制代码
sudo apt-get install --reinstall ca-certificates

证书更新成功后,再次更新源:

shell 复制代码
sudo apt-get update

没有任何错误,更新成功。效果如下:

2. Ubuntu Docker 安装

  1. 安装 apt 依赖包,用于通过HTTPS来获取仓库:

    shell 复制代码
    sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
  2. 添加 Docker 的官方 GPG 密钥:

    shell 复制代码
    curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
  3. 添加Docker软件源,执行以下命令来添加Docker的软件源:

    shell 复制代码
    sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
  4. 更新 apt 包索引:

    shell 复制代码
    sudo apt-get update
  5. 安装最新版本的 Docker Engine-Community 和 containerd

    shell 复制代码
    sudo apt-get install docker-ce docker-ce-cli containerd.io
  6. 测试 Docker 是否安装成功,输入以下指令,打印出以下信息则安装成功:

    shell 复制代码
    sudo docker run hello-world

    打印出以下信息则安装成功:

3. 安装qemu

因为需要在X86架构机器模拟ARM架构来编译,这里需要用到qemu-user-staticqemu-user-static是一个用于利用当前操作系统来运行其它架构的一个仿真器,可以通过x86的机器编译出其它各个架构的docker镜像。

qemu-user-static项目的github地址:
https://github.com/multiarch/qemu-user-static

  1. ubuntu安装qemu

    shell 复制代码
    sudo apt-get install qemu
  2. 下载qemu-aarch64-static

    shell 复制代码
    wget https://github.com/multiarch/qemu-user-static/releases/download/v5.1.0-5/qemu-aarch64-static.tar.gz

    (备注:无法下载就使用windows浏览器直接下载)

  3. 解压

    shell 复制代码
    tar xzvf qemu-aarch64-static.tar.gz
  4. 配置可执行文件路径

    shell 复制代码
    sudo cp qemu-aarch64-static /usr/bin/
    sudo chmod +x /usr/bin/qemu-aarch64-static
  5. 注册qemu-user-static虚拟机

    shell 复制代码
    sudo docker run --rm --privileged multiarch/qemu-user-static --reset -p yes

    运行效果如下:

4. 安装Nvidia TX2 Docker镜像

  1. 安装TX2镜像

    shell 复制代码
    sudo docker pull nvcr.io/nvidia/l4t-base:r32.5.0

    因为TX2实际的板子使用的版本为r32.5.0,所以这里的镜像保持一直都使用r32.5.0版本。

    运行效果如下:

  2. 创建并启动TX2容器

    shell 复制代码
    sudo docker run --name=TX2_Base --platform linux/arm64 -it nvcr.io/nvidia/l4t-base:r32.5.0 /bin/bash

    成功创建容器并且进入的效果如下:

  3. 退出终端,直接输入exit

  4. 查看所有的容器命令如下:

    shell 复制代码
    sudo docker ps -a

    通过查询命令可以看到刚刚被成功创建的TX2的容器,并且容器的ID为4ee9b494d6b8,下次启动就可以直接通过容器ID来启动。

  5. 停止不使用的容器

    首先查看哪些容器正在运行,命令如下:

    shell 复制代码
    sudo docker ps

    可以看到容器4ee9b494d6b8正在运行,如下:

    然后将这个容器停止运行:

    shell 复制代码
    sudo docker stop 4ee9b494d6b8

    执行后的效果如下:

5. 如何使用TX2容器

每次当ubuntu系统重新启动之后,我们都需要重新启动一下qemu。执行如下步骤来启动前面创建的TX2容器,具体如下:

  1. 启动qemu

    shell 复制代码
    sudo docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
  2. 使用 docker start 启动一个已停止的容器,4ee9b494d6b8为前面创建的TX2容器

    shell 复制代码
    sudo docker start 4ee9b494d6b8
  3. 进入docker容器

    shell 复制代码
    sudo docker exec -it 4ee9b494d6b8 /bin/bash

    进入的效果如下:

6. 参考资料

  1. NVIDIA L4T Base官网资料
    https://catalog.ngc.nvidia.com/orgs/nvidia/containers/l4t-base
  2. 利用x86机器编译支持arm架构的docker镜像
    https://blog.csdn.net/ccgshigao/article/details/109631585
  3. Docker的使用
    https://www.runoob.com/docker/ubuntu-docker-install.html
相关推荐
明灯L6 小时前
《Kubernetes 集群搭建全指南:从核心概念到环境部署!》
云原生·容器·kubernetes
insight^tkk6 小时前
【Docker】记录一次使用docker部署dify网段冲突的问题
运维·人工智能·docker·ai·容器
江湖人称小鱼哥6 小时前
WSL + Docker 网络访问详解
网络·docker·容器·wsl
韩宏伟6 小时前
使用 Loki + Promtail + Grafana 实现 Docker 容器日志采集与可视化
docker·容器·grafana
是店小二呀7 小时前
远程办公自由:rdesktop+cpolar让Windows桌面随身而行
windows
荣光波比8 小时前
K8S(十五)—— 企业级K8s集群管理实践:Rancher安装配置与核心功能实操
容器·kubernetes·rancher
JanelSirry8 小时前
微服务是不是一定要容器化(如 Docker)?我该怎么选
docker·微服务·架构
小屁不止是运维8 小时前
k8s问题详解1:k8s集群上传文件过大导致413 Request Entity Too Large(请求文件实体过大)
docker·容器·kubernetes
油丶酸萝卜别吃9 小时前
java8中常用的工具函数
windows
Bruce_Liuxiaowei9 小时前
Win7虚拟机加入域错误排查指南:解决无法启动服务问题
运维·网络·windows·安全·网络安全