我们来试试 Docker 的官方 Alpine Linux 镜像 arm32v6 / alpine。 Alpine Linux 是一个非常紧凑的 1.8MB 下载。
$ docker run -ti arm32v6/alpine:3.5 /bin/sh
/ # cat /etc/os-release
NAME="Alpine Linux"
ID=alpine
VERSION_ID=3.5.2
PRETTY_NAME="Alpine Linux v3.5"
HOME_URL="http://alpinelinux.org"
BUG_REPORT_URL="http://bugs.alpinelinux.org"
/ # echo "Hi, this is a tiny Linux distribution!" | base64
SGksIHRoaXMgaXMgYSB0aW55IExpbnV4IGRpc3RyaWJ1dGlvbiEK
/ # echo "SGksIHRoaXMgaXMgYSB0aW55IExpbnV4IGRpc3RyaWJ1dGlvbiEK" | base64 -d
Hi, this is a tiny Linux distribution!
/ # exit
完成后,尝试镜像并键入 exit。
我们推出了一个 BusyBox shell,但是我们可以直接启动任何命令。
这是另一个例子,没有使用 shell - 我们只是直接运行 date binary:
$ docker run arm32v6/alpine:3.5 date
Sun Mar 12 21:00:45 UTC 2017
其他基本镜像
由 Resin.io 制作的镜像由当前的 Docker 构建过程用于创建一个可用于所有支持的 Raspberry Pi 版本的基本镜像。它是一个轻量级的 Raspbian Jessie,这使它成为一个不错的选择。
我将本指南放在一起,以帮助你使用 Raspberry Pi 上的Docker 1.12(或更新版本)。为了简单起见,我们将使用默认的操作系统为Pi - 称为Raspbian。本指南目前适用于大多数型号的 Raspberry Pi,我建议使用 B 2/3 型或零型。![](https://img.alicdn.com/tfs/TB1I_PHc3MPMeJjy1XdXXasrXXa-378-378.jpg)
现在不知道 Docker 是什么或者可以做什么?可以从官方文档了解 Docker。
准备好在你的树莓派上使用 Docker 了吗?
如果你已经准备好了,可以直接跳过 Live Swarm Deep Dive, 我们将多个Raspberry Pis连接在一起,创建一个 Docker Swarm。
准备SD卡
从 https://www.raspberrypi.org/downloads/raspbian/ 下载最新的 Raspbian Jessie Lite 镜像。
我曾经给出在 Mac 和 Linux 上使用 dd 的说明,第三个选项是Windows。现在我推荐 Etcher.io ,它将以与你在PC /笔记本电脑上使用的操作系统相同的方式使用闪存 SD 卡。
在这里下载 Etcher。
现在按照 Etcher 中的说明刷新 SD 卡。在弹出 SD 卡之前还需要做一件事。
为了防止全球范围内的 Raspberry Pis 被黑客入侵,RPI 基金会现在已经在镜像中默认禁用了 SSH。只需在/ boot / ssh 中创建一个文本文件,可以是空白的,或者你可以在其中输入任何内容。
确保它没有扩展名,如 ssh.txt - 它必须只是 ssh。
现在插入SD卡,网络和电源等
安装 Docker
一旦您启动了 Raspberry Pi,您将能够通过 bonjour / avahi 服务在网络上找到它。
用 SSH 连接
密码是 raspberry.
出于安全考虑,建议使用 passwd 命令更改用户 pi 的密码。
可选自定义
此时您可能需要编辑 Pi 的主机名。使用编辑器,在下面文件中将 raspberrypi 这个词改为其他的词:
如果您将 Pi 用于无头应用程序,则可以将 GPU 与系统其余部分之间的内存分配减少到 16mb。
编辑 /boot/config.txt 并添加以下行:
启动 Docker 安装程序
由 Docker 项目维护的自动脚本将创建一个 systemd 服务文件,并将相关的 Docker 二进制文件复制到 /usr/bin/ 中。
直到最近在 Pi 上安装 Docker 是一个非常手动的过程,通常意味着不得不在非常低功耗的设备上从头构建 Docker(这可能需要几个小时)。ARM 爱好者们的辛勤工作 Hipriot 已经帮助 .deb 在 Docker 自己的 CI 进程中成为一流的公民。
如果您想选择使用测试版本,请将 test.docker.com 替换为 get.docker.com。这将会降低一个较新的版本,但仍可能会出现一些与之相关的开放问题。
配置 Docker
需要几个手动步骤才能获得最佳体验。
将 Docker 设置为自动启动。
您现在可以重新启动 Pi,或者通过以下方式启动 Docker 守护程序:
启用 Docker 客户端
Docker 客户端只能由 root 或 docker 组的成员使用。将 pi 或您的等效用户添加到 docker 组:
进行此更改后,注销并重新连接到 ssh。
使用 Docker
支持 ARM 和 Raspberry Pi 是一项正在进行的项目,这意味着你应该知道几件事情。
从 Hub 中拉取镜像
如果从 Docker 集线器下拉 busybox 镜像,它将无法正常工作。这是因为内容是为常规 PC 或 x86_64 架构设计的。在将来版本的 Docker 中,正在为此修复此问题。
我们应该只尝试使用我们知道设计为在 ARM 上工作的镜像。目前没有严格的官方镜像,但 Docker 团队在前缀 arm32v6 下维护了一些实验镜像。
运行你的第一个 ARM 镜像
我们来试试 Docker 的官方 Alpine Linux 镜像 arm32v6 / alpine。 Alpine Linux 是一个非常紧凑的 1.8MB 下载。
完成后,尝试镜像并键入 exit。
我们推出了一个 BusyBox shell,但是我们可以直接启动任何命令。
这是另一个例子,没有使用 shell - 我们只是直接运行 date binary:
其他基本镜像
由 Resin.io 制作的镜像由当前的 Docker 构建过程用于创建一个可用于所有支持的 Raspberry Pi 版本的基本镜像。它是一个轻量级的 Raspbian Jessie,这使它成为一个不错的选择。
构建一个新的镜像
像普通的 Docker 镜像一样构建你的镜像,但使用 resin/ rpi-raspbian 作为您的基础。我们添加 curl 和 ca 证书,并创建一个可以访问 docker.com 的镜像。
逐行细分:
所以构建这样的镜像,然后运行它:
使用 Docker 构建镜像后,你将在库中看到它。使用 docker images 命令可以查看到目前为止所建立的所有镜像。
如果要删除 curl_docker 镜像类型,请执行以下操作:
docker rmi curl_docker
。与 Alpine Linux 相同
Alpine Linux 不使用 apt-get 打包它的包,而是一个名为 apk 的工具,这里是如何实现同样的事情:
要构建和运行 Alpine 容器,你可以做完全相同的事情或使用不同的镜像名称:
创建一个 Node.js 应用程序
这个 Docker文 件使用 Resin.io 的 Raspbian 镜像作为基础,并从 Node.js 站点下拉 Node 4.5 LTS。
构建和运行镜像
您现在可以测试一些 Node.js 指令,或者在 Github 上分配我的简单的 hello-world 微服务器来进一步。
使用 GPIO
为了使用额外的硬件和附加板,您需要访问 GPIO引 脚。这些需要在 --privileged 的运行时附加标志,以允许容器写入管理 GPIO 的内存的特殊区域。
标准的 RPi.GPIO 库将通过 Docker 进行工作,包括几个硬件制造商的库。
这是一个使用d efacto RPi.GPIO 库的 Docker 文件示例。
构建此镜像作为以后添加 GPIO 脚本的基础。
可以使用以下 Python 代码将闪烁连接到 GPIO 引脚18的 LED。
只需使用 ADD 将脚本传输到从 gpio-base 中传输到新映像:
您需要以 --privileged 模式运行此容器才能访问 GPIO 引脚
如果你喜欢,那么如何使一个启用互联网的蜂鸣器或 cheerlight?以下是使用 Python Flask 库创建控制 GPIO 引脚的 Web 服务器的示例:
更多关于与 GPIO 交互的 Raspberry Pi 基金会入门物理计算工作表。
反馈和问题
通过 Twitter @alexellisuk 或下面的评论部分与我联系。你想在博客上看到什么?你试过了吗?让我们知道
参考:
原文链接:https://blog.alexellis.io/getting-started-with-docker-on-raspberry-pi/