在 Opensource.com,我在日常工作中学习到许多真正有趣的新兴技术。但我并非总是有机会深入探索它们。上周末,我抽出一些时间来做这件事。
几年来,我一直是 Raspberry Pi 的爱好者,我使用 Pi 更多的是作为一个学习新事物的平台,而不是一个工具,无论是微电子学还是仅仅是尝试新的软件。通常情况下,我的实验包括擦除我的 SD 卡,并重新开始安装我感兴趣的任何发行版的全新安装。这很有效,并且保留几张额外的 SD 卡也很有帮助,但最终,我想,一定有更好的方法。
解决方案
进入 Docker。Docker 是一个用于使用 Linux 容器的工具,容器本身就是一个有趣的话题。简而言之,您可以将它们视为非常轻量级的虚拟机,可以在主机上以接近原生速度并排运行。实际上,Docker 容器根本不是虚拟机,而是进程,这些进程(几乎)完全与其他主机上的进程隔离运行,并且随身携带完整的实用程序和库包,以帮助该进程运行;基本上,一个精简的操作系统,仅用于您选择的应用程序。
关于容器还有很多要说的,您阅读到的大部分内容都与它们在数据中心的使用有关,在数据中心中,它们可以帮助应用程序安全地并排运行,并且比专用虚拟机使用更少的资源。Docker 对于开发人员来说也是一个很棒的工具,就像 Vagrant、Puppet、Ansible 等工具通过让您在代码中定义您的操作环境,而不是手动编辑大量配置文件,并让您对其进行版本控制、复制并轻松复制到其他机器,从而帮助使用传统虚拟机一样。
作为 Raspberry Pi 的爱好者,这种轻松复制我的环境的方式对我很有吸引力,并且在 Raspberry Pi 的内存和处理限制内工作排除了虚拟机作为实现它的手段,因此我想看看我是否可以在我的 Raspberry Pi 上启动并运行 Docker,然后尝试一下。
局限性
在我们开始之前,请允许我发出一个警告:这个实验是关于玩耍和学习的。如果您计划在您碰巧拥有的旧型号 Raspberry Pi 上在 Docker 中运行任何关键任务...好吧,我不会告诉您这是不可能的,但请确保您进行研究并充分了解您在做什么。
我遇到的第一个挑战,对于任何花时间使用 Raspberry Pi 的人来说都是显而易见的,那就是您需要一些耐心。我的旧 Raspberry Pi B 型号以 700 MHz 的速度运行,只有 512 MB 的内存。曾经,这似乎快得不可思议,但由于我已经习惯了拥有速度快得多的台式机和笔记本电脑,所以让我们说与您习惯的相比,构建容器可能会显得很慢。
第二个挑战也相当明显,但值得记住。虽然您可能在您的计算机上运行 x86 处理器,但您的 Raspberry Pi 的处理器使用 ARM 芯片组,因此如果您不打算将容器从您的主计算机复制到您的 Pi 并使其工作。您当然可以在本地编写您的 Dockerfile(定义容器内容的文本文件)并将其复制过来,并且您始终可以将您的容器内容建模为类似的 x86 容器,但您必须在 Pi 上实际构建它,除非您碰巧有一台更快的基于 ARM 的计算机在手边。
开始入门
首先,我需要安装 Docker。我按照一个 有用的教程 来完成此操作,并建议您也这样做,因为自己构建它可能是一个很大的挑战。该教程基于 Raspberry Pi 版本的 Arch Linux 作为主机操作系统,我选择了它以保持简单。由于我习惯在桌面上使用 Fedora,并且有一段时间没有玩我的 Pi 了,所以我花了几分钟搜索,提醒自己如何使用 ifconfig
而不是 ip
来设置网络,以及类似地,使用 pacman
而不是 yum/dnf
来更新系统,但这些都是小障碍。
实际上,安装 Docker 很容易,因为它在默认存储库中。在 pacman -S docker
安装和 systemctl enable docker
启动守护进程后,我就启动并运行了。
我找到了一个基于 Raspbian 的 基础镜像,看起来是一个不错的起点,然后我创建了一个简单的 Dockerfile 来启动一个基于我找到的模板的基本 Web 服务器,启动了 docker build
,然后...看着它失败了。好吧,也许我第一次尝试做得过火了,让我尝试更简单的东西。
接下来,我将其简化,再次尝试,但仍然失败,并抱怨证书。在花了一些时间搜索后,我意识到证书失败可能是由于时间问题。果然,快速使用 date
命令检查告诉我,我的 Pi 认为现在是 1 月 1 日,并且是几年前。在使用 timedatectl set-time
更正问题后,我再次尝试,它成功了!我的容器已构建并成功启动。使用 docker ps
我可以看到我的容器正在工作,并且我可以连接到我指定的端口。
下一步
既然它正在工作,我接下来应该尝试什么?我发现自己不断回到我的 Pi 上的一个项目是 Node-RED,它被自我描述为“一个用于连接物联网的可视化工具”。您可以将其视为 IFTTT 的开源版本,它允许更高程度的自定义,特别是如果您愿意编写少量 JavaScript。
果然,我不是第一个有这个想法的人。我在 GitHub 上找到了一个有用的 Dockerfile,它为我设置了一切。有一些额外的节点我想添加,经过一些修改后,我也启动并运行了它。
在这一点上,值得问一下,那又怎样?我不能直接在我的 Pi 上安装 Node-RED 吗?当然,我可以。但是现在,当我想“保存”一个项目时,我只需要保存 Dockerfile,我就可以在任何 Pi 上运行它,并且安装非常容易。如果我有自定义代码要导入到 Pi 上,可能是为了与 Arduino 通信或闪烁一系列灯,我可以在容器启动时拉入该代码。我可以轻松地在代码中修改它,并保存该修订版。我可以为我的 Pi 尝试不同的 Linux 发行版,而无需擦除卡。我可以与全国各地的朋友分享想法,他们可以快速轻松地复制这些想法,而无需移动大型文件。
对我来说,这是一个很棒的工具。
您怎么看?您是否曾经在 Raspberry Pi 上尝试过 Docker?请在下面的评论中告诉我们。
11 条评论