|
2026 在树莓派/JetsonNano安装docker

2026 在树莓派/JetsonNano安装docker

docker是一款流行的应用程序开发,发布和运行平台。Docker 能够帮助你将应用程序与基础架构分离,以便快速交付软件。使用了Docker,你可以不用担心应用软件和操作系统不兼容或者缺少某些特定的库文件的问题,因此它特别适合在微型电脑上使用。本文介绍通用的安装Docker方法,在树莓派和Jetson Nano上都测试过,能成功安装。

第一步,更新apt repository

sudo apt-get -y update && sudo apt-get -y upgrade

第二步,从官网下载脚本并运行

curl -s https://get.docker.com | bash

运行成功是这个样子的

第三步,检查docker版本

sudo docker version

安装正常的话应该是这样子的 运行docker info获得更详细的系统信息

sudo docker info

第四步,设置开机自动运行docker,并且启动它

sudo systemctl enable docker
sudo systemctl start docker

检查是否运行成功

sudo docker ps

成功的样子是这样的

第五步,从docker hub下载hello-world来测试一下

sudo docker pull hello-world

成功的样子是这样的 如果出现这样的提示,“Error response from daemon: toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit” ,你可以尝试在docker hub注册一个账号,然后登录后再pull,因为docker hub现在限制了匿名pull的频率。

sudo docker login

登录成功是这样子的,

第六步,运行hello-world

sudo docker run hello-world

成功运行是这样子的, 看看我们的image list里面是否有这个hello world

sudo docker images

第七步,清理hello-world

虽然这个hello world只有几k,但有最求整洁的我要把它删掉

sudo docker image rm --force 1ec996c686eb

再看看images

安装成功了!

接下来让我们深入了解一些常用的Docker概念和命令,帮助你更好地在树莓派和Jetson Nano上使用Docker。

Docker 与 Docker Compose 的区别

很多初学者会混淆Docker和Docker Compose,简单来说:

  • Docker:是一个容器化平台,用于创建、运行和管理单个容器。你通过docker run命令启动容器,通过命令行参数来配置端口映射、环境变量等。
  • Docker Compose:是一个用于定义和运行多容器Docker应用的工具。通过一个YAML文件(docker-compose.yml)来配置应用的所有服务,然后使用一条命令就能启动所有服务。

当你需要在设备上运行多个服务(比如同时运行数据库、Web服务器和消息队列)时,Docker Compose能大大简化你的工作流程。

安装Docker Compose:

sudo apt-get install -y docker-compose-plugin

常用Docker命令速查

以下是日常使用中最常见的Docker命令:

命令说明示例
docker run运行容器docker run -d -p 8080:80 nginx
docker ps查看运行中的容器docker ps -a(包括已停止的)
docker stop停止容器docker stop container_id
docker rm删除容器docker rm container_id
docker images列出本地镜像docker images -a
docker logs查看容器日志docker logs -f container_id
docker exec在运行中的容器里执行命令docker exec -it container_id bash
docker pull下载镜像docker pull ubuntu:latest

一个典型的工作流程:

# 启动一个nginx容器,后台运行,映射8080端口
sudo docker run -d --name my-nginx -p 8080:80 nginx

# 查看运行中的容器
sudo docker ps

# 查看容器日志
sudo docker logs my-nginx

# 停止并删除容器
sudo docker stop my-nginx
sudo docker rm my-nginx

ARM架构特别说明

树莓派和Jetson Nano都是ARM架构的处理器,与常见的x86(Intel/AMD)处理器不同。在选择Docker镜像时需要注意:

  • 树莓派(32位):使用arm32v7/前缀的镜像,例如arm32v7/nginx
  • 树莓派4(64位系统)Jetson Nano:使用arm64v8/前缀的镜像,例如arm64v8/nginx
  • 很多官方镜像现在支持多架构(multi-arch),会自动识别你的平台并拉取对应版本,比如nginxpythonnode

查看当前系统架构:

uname -m
# 输出 aarch64 表示64位ARM,armv7l 表示32位ARM

查找支持ARM架构的镜像,可以到Docker Hub上搜索时留意”ARM”标签。

常见问题解决

问题1:permission denied(权限被拒绝)

如果每次运行docker命令都需要加sudo,非常不方便。解决方法是将当前用户加入docker用户组:

# 创建docker用户组(通常安装时已自动创建)
sudo groupadd docker

# 将当前用户加入docker组
sudo usermod -aG docker $USER

# 重新登录或执行以下命令使组权限生效
newgrp docker

# 测试是否生效(不需要sudo)
docker run hello-world

问题2:Docker pull速度太慢

由于Docker Hub服务器在国外,国内用户拉取镜像速度可能很慢。可以配置镜像加速器:

# 创建或编辑daemon.json配置文件
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": [
    "https://mirror.ccs.tencentyun.com",
    "https://docker.mirrors.ustc.edu.cn"
  ]
}
EOF

# 重启docker服务
sudo systemctl daemon-reload
sudo systemctl restart docker

问题3:容器时间不正确

ARM设备有时会出现容器内时间与宿主机不一致的问题,可以挂载本地时区文件:

docker run -v /etc/localtime:/etc/localtime:ro -d nginx

一个简单的docker-compose.yml示例

下面是一个使用Docker Compose搭建简单Web服务的例子,包含一个nginx Web服务器和一个Redis缓存服务:

version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html
    restart: always

  redis:
    image: redis:alpine
    ports:
      - "6379:6379"
    restart: always

创建一个html文件夹,放入一个index.html文件:

<!DOCTYPE html>
<html>
<head><title>Hello Docker</title></head>
<body><h1>Hello from Docker on ARM!</h1></body>
</html>

然后启动所有服务:

docker-compose up -d

查看运行状态:

docker-compose ps

停止所有服务:

docker-compose down

Docker Compose非常适合在嵌入式设备上部署多服务应用,通过一个文件就能管理所有依赖关系和配置。希望这篇教程能帮助你更好地在树莓派和Jetson Nano上使用Docker!