• 正文
  • 相关推荐
申请入驻 产业图谱

树莓派上的Docker应用:从安装到高级用法与故障排除

08/25 15:57
3260
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

Docker是一个平台,能让你将应用程序打包并在称为容器的独立环境中运行。这些容器包含了应用程序运行所需的一切——代码、运行时、库和依赖项,确保在不同计算环境中保持一致性。

树莓派上使用Docker有诸多好处,尤其是考虑到该设备的资源限制:

资源效率:

轻量级容器:Docker容器共享宿主系统的内核,因此比虚拟机轻得多。这让你能在树莓派上运行多个应用程序,而不会使其有限的CPU和内存资源过载。

简化部署:

预构建镜像:借助Docker,我们可以从Docker Hub等存储库中拉取预构建镜像,从而降低在树莓派上设置软件的复杂性。当我们想要快速部署应用程序而无需手动配置时,这一点尤其有用。

集成:

Docker与各种软件栈的兼容性使其能够与其他工具无缝集成,让树莓派成为DIY项目、家庭自动化或小型服务器任务的通用枢纽。

先决条件

● 树莓派:由于处理能力更强、内存更大,Docker在树莓派5等较新型号上运行效果最佳。

● 树莓派操作系统:为获得更好的性能,尤其是运行大型应用程序时,建议使用64位版本。

● MicroSD卡:32GB或更大容量为佳,尤其是当我们计划运行多个Docker容器时。

● 网络连接:以太网优先,但Wi-Fi也可用。设置与安装

在树莓派上设置Docker

在树莓派上安装Docker是一个简单的过程。以下是在树莓派上安装并运行Docker的分步指南:

1.更新你的树莓派。打开终端并运行:

sudo apt-get updatesudo apt-get upgrade

2.安装Docker。Docker提供了一个安装脚本,可自动化安装过程。

下载并运行Docker安装脚本:

curl -sSL https://get.docker.com | sh

该脚本将下载并安装适用于树莓派的最新版Docker。

3.将你的用户添加到Docker组**,以便无需使用sudo即可运行Docker命令:

sudo usermod -aG docker $USER

运行此命令后,我们需要注销并重新登录,或重启树莓派,以使更改生效。

4.验证Docker安装

要检查Docker是否已正确安装,我们可以运行以下命令:

docker -v

这应返回已安装的Docker版本。

树莓派上的Docker基础与命令

关键Docker概念

镜像:用于创建容器的只读模板。镜像可以包含运行应用程序所需的一切。例如,一个镜像可以包含操作系统、Web服务器和应用程序本身。

容器:镜像的可运行实例。容器是隔离的环境,同一台机器上可以运行多个容器,共享宿主操作系统内核。

Dockerfile:描述创建Docker镜像时应遵循步骤的脚本。它通过指定镜像内部应包含的内容来自动化Docker镜像的创建。

存储库:存储和共享Docker镜像的地方。Docker Hub是最常见的存储库,我们可以在其中找到数千个预构建镜像。

基本Docker命令

检查Docker系统信息

docker info

此命令提供有关Docker安装的详细信息,包括容器数量、镜像和系统资源。

-在Docker Hub上搜索镜像:

docker search <image-name>

例如:

docker search nginx

-从Docker Hub拉取镜像:

docker pull <image-name>

要拉取最新的Nginx镜像:

 docker pull nginx

-列出已下载的镜像:

 docker images

此命令列出树莓派上本地可用的所有Docker镜像。

-运行容器:

docker run <image-name>

从Nginx镜像运行容器:

docker run nginx

要在后台运行容器(分离模式)并将容器的80端口映射到宿主的8080端口:

docker run -d -p 8080:80 nginx

-列出正在运行的容器:

 docker ps

-列出所有容器(运行中和已停止的):

docker ps -a

-停止正在运行的容器:

docker stop <container-id>

我们可以从docker ps命令中获取<容器ID>。

-启动已停止的容器:

 docker start <container-id>

-移除已停止的容器:

 docker rm <container-id>

-移除镜像:

docker rmi <image-id>

我们可以从docker images命令中获取<镜像ID>。

-创建卷:

docker volume create <volume-name>

-列出卷:

docker volume ls

-检查卷:

docker volume inspect <volume-name>

-移除卷:

docker volume rm <volume-name>

树莓派上的高级Docker用法

Docker Compose:

Docker Compose是一个命令行工具,允许你定义并运行使用Docker容器化的复杂应用程序。

1.下载Docker Compose。打开终端并运行:

wget https://github.com/docker/compose/releases/download/v2.29.7/docker-compose-linux-aarch64

2.将下载的文件移动到/usr/bin:

sudo mv docker-compose-linux-aarch64 /usr/bin/Docker-compose

3.设置执行权限:

sudo chown root: /usr/bin/docker-composesudo chmod +x /usr/bin/docker-compose

4.验证Docker Compose安装:

docker-compose --version

使用docker-compose.yml创建多容器应用程序。

Nextcloud示例

services:  nc:    image: nextcloud:apache     environment:      - POSTGRES_HOST=db      - POSTGRES_PASSWORD=nextcloud      - POSTGRES_DB=nextcloud      - POSTGRES_USER=nextcloud     ports:      - 80:80    restart: always    volumes:      - nc_data:/var/www/htmldb:    image: postgres:alpine     environment:      - POSTGRES_PASSWORD=nextcloud      - POSTGRES_DB=nextcloud      - POSTGRES_USER=nextcloud      restart: always      volumes:      - db_data:/var/lib/postgresql/data      expose:      - 5432volumes:  db_data:  nc_data:

用于Docker管理的Portainer

https://www.portainer.io/

Portainer是一款轻量级的开源Docker管理工具,提供了一个用户友好的图形界面来管理Docker环境,包括容器、镜像、网络和卷。它简化了Docker管理的复杂性,允许用户通过基于Web的界面与Docker设置进行交互,而不仅依赖于命令行指令。

逐步安装

1.通过运行以下命令拉取最新的Portainer镜像:

docker pull portainer/portainer-ce:latest

此命令拉取Portainer社区版(CE)的最新版本。

2.为Portainer创建Docker卷

Portainer需要持久存储。我们可以使用以下命令创建此卷:

docker volume create portainer_data

3.部署Portainer容器

现在,你将运行Portainer容器,将其绑定到Docker并暴露在端口上,以便我们可以通过Web浏览器访问它。

4.使用以下命令运行Portainer容器:

docker run -d -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest

此命令的作用如下:

-d:后台模式。

-p 9443:9443:将树莓派上的9443端口映射到容器中的9443端口(用于HTTPS访问)。

--name portainer:将容器命名为“portainer”。

--restart=always:确保如果树莓派重启,Portainer会自动重启。

-v /var/run/docker.sock:/var/run/docker.sock:挂载Docker套接字,以便Portainer可以与Docker引擎通信

-v portainer_data:/data:附加之前创建的卷以进行持久存储。

5.访问Portainer Web界面

容器启动并运行后,我们可以访问Portainer用户界面:

1.打开Web浏览器并访问https://<你的树莓派IP>:9443。

将<你的树莓派IP>替换为树莓派5的实际IP地址。

我们可能会看到安全警告,因为连接是自签名的;我们可以安全地继续访问该站点。

树莓派上的实际用例

Home Assistant:一款流行的开源平台,用于控制智能家居设备。你可以使用Docker在树莓派上运行Home Assistant,从而更轻松地管理更新和依赖项。

https://hub.docker.com/r/homeassistant/home-assistant

docker run -d --name=home-assistant -v /path/to/your/config:/config -p 8123:8123 homeassistant/home-assistant:stable

InfluxDB和Grafana:对于需要数据收集和可视化的物联网应用,Docker可用于运行InfluxDB(时序数据库)和Grafana(数据可视化工具)。这允许用户从传感器收集数据并在仪表板上进行可视化,所有这些都可以在低功耗的树莓派上完成。

https://hub.docker.com/_/influxdb

docker run -d -p 8086:8086 --name influxdb influxdb:2

https://hub.docker.com/r/grafana/grafana

docker run -d -p 3000:3000 --name grafana grafana/grafana

监控(MotionEye):Docker允许你部署MotionEye,这是一个监控系统,可将你的树莓派变成安全摄像头枢纽。

https://hub.docker.com/r/ccrisan/motioneye

docker run -d --name=motioneye -p 8765:8765 -v /path/to/media:/media ccrisan/motion

Duplicati:使用Docker运行Duplicati,这是一款开源备份解决方案,可安排从家庭网络中的各种设备备份文件到连接到树莓派的外部驱动器

https://hub.docker.com/r/duplicati/duplicati

docker run -d --name=duplicati -v /backup/location:/backups -p 8200:8200 duplicati/duplicati

Plex:使用Docker托管一个媒体服务器,该服务器可向多个设备流式传输视频、音乐和照片。

https://hub.docker.com/r/plexinc/pms-docker/

docker run -d --name=plex -v /path/to/media:/media -p 32400:32400 plexinc/pms-docker

故障排除与维护

● 检查Docker服务状态

sudo systemctl status Docker

查找任何错误消息。如果需要,尝试重启它:

sudo systemctl restart Docker

● CPU或内存使用率过高

运行多个或资源密集型容器可能会使树莓派有限的CPU和内存不堪重负。

使用docker stats、htop或top监控系统和容器资源使用情况。

docker stats

识别并停止资源占用高的容器:

docker stop <container-id>

考虑使用镜像的轻量级版本或使用Docker的资源管理标志限制容器资源:

docker run -m 256m --cpus="0.5" <image-name>

这将容器限制为256MB内存和一个CPU核心的50%。

● 磁盘空间不足

移除未使用的容器、镜像和卷:

docker system prune -adocker volume prune

监控磁盘使用情况:

列出镜像、容器和卷,并检查它们占用了多少空间:

docker system df

将Docker数据移动到外部存储:

如果树莓派的SD卡很快填满,考虑将Docker的数据目录(/var/lib/docker)移动到外部USB驱动器:

1.停止Docker服务:

sudo systemctl stop docker

2.移动Docker的数据目录:

sudo mv /var/lib/docker /mnt/external_drive/docker

3.创建符号链接:

sudo ln -s /mnt/external_drive/docker /var/lib/dockersudo systemctl start docker

● 卷中的数据损坏:

树莓派的不当关机或断电可能会导致存储在SD卡上的卷数据损坏。

使用fsck检查并修复SD卡或外部驱动器上的文件系统:

sudo umount /dev/mmcblk0p1sudo fsck /dev/mmcblk0p1sudo mount /dev/mmcblk0p1

备份和恢复卷:

定期使用busybox等容器备份卷,以防止数据损坏时丢失数据:

docker run --rm -v my_volume:/data -v $(pwd):/backup busybox tar czf /backup/backup.tar.gz /data

使用外部存储进行持久数据存储

将Docker卷存储在外部驱动器(最好是SSD)上,而不是SD卡上,可以提高性能并降低损坏风险。

本文提供了在树莓派上设置和使用Docker的全面指南。它涵盖了从基本安装步骤到Docker Compose和Portainer等高级用法以管理容器的关键Docker概念。诸如在树莓派上运行Home Assistant或Plex等实际示例突出了实际应用。此外,它还包括针对CPU使用率过高和磁盘空间限制等常见问题的故障排除提示,它是希望优化树莓派系统上Docker的初学者和高级用户的绝佳资源。

很多人一直以为树莓派(Raspberry Pi)只是创客圈子里的小玩具——一块信用卡大小的开发板,用来点亮 LED、跑个 Python 脚本、或者给中学生上一堂入门编程课。然而,事实远比想象震撼:树莓派已经悄悄完成了从“教学演示”到“工业级主力”的华丽转身,正在产线、机房、实验室甚至外太空里 7×24 小时不间断服役。

如果觉得我们的内容不错,记得点赞+收藏+关注+转发~ 我们很乐意为您提供工业树莓派的解决方案,项目有需求请联系我们~

官方网站:www.edatec.cn/cn

 

相关推荐