转载

在Raspberry Pi上构建Docker 1.12

过去有很多用户问我们该如何构建Docker Engine和相关的Debian包。可能他们想尝试一些新特性,所以需要尽快获得最新的发布版本。

在这里我分享一下如何在Raspberry Pi上构建最新的Docker版本。但是注意,虽然难度不大但是耗时较长。

那就让我们开始,跟着我一起深入兔子洞穴里探险吧(_译者注:作者想把自己比作了爱丽丝_)。

背景

这篇教程的目的是告知你在外表酷炫、速度飞快、价值35美刀的超级计算机(即Raspberry Pi)上构建Docker Engine的所有细节。

准备构建环境

在我们开始这个艰难的任务之前,我们首先需要准备好构建环境来应付大量长时的工作量(_workload_)。

硬件和软件的要求

要使用推荐的方式来构建Docker Engine我们需要一个Linux的电脑,上面已经安装并运行着最近版本的Docker。是的,Docker Engine需要在Docker容器里面构建,这样才能得到一个一致的且可以重生成的(_reproducible_)构建环境。因为这对CPU和磁盘空间有一些要求,这里是一些硬件的最低配置要求:

  • Raspberry Pi 3 ( Pi 2也可以,但是构建需要更长的时间)
  • 16GB大小的SD卡(8GB是不够的!)
  • 启用交换空间(1GB大小的内存是不够的)
  • Docker Engine 1.11

安装构建环境

马上你就会看到,搭建构建环境非常简单,因为我们只会使用最新版本的HypriotOS,其已经预安装了Docker Engine 1.11.1。这些步骤这里是在OSX上的情形,假如是Linux或者Windows情况可能会稍稍不同。

第一步 :在SD卡上安装HypriotOS 0.8.2

$ flash https://github.com/hypriot/image-builder-rpi/releases/download/v0.8.2/hypriotos-rpi-v0.8.2.img.zip

用新的SD卡启动来启动Raspberry Pi 3。

第二步 :部署SSH Key

(注:用于登陆的用户名是 pirate ,密码是 hypriot 。)

首先, 等待Raspberry Pi启动起来并且在网络中可见,然后获取它的IP地址。

$ ping -c 1 black-pearl.local
PING black-pearl.local (192.168.2.113): 56 data bytes
64 bytes from 192.168.2.113: icmp_seq=0 ttl=64 time=5.697 ms

然后,将你的常规的SSH key部署到Raspberry Pi上。

$ ssh-add
$ ssh-keygen -R 192.168.2.113
$ ssh-copy-id pirate@192.168.2.113

现在我们可以不用密码就能登陆到Raspberry Pi里面了。

$ ssh pirate@192.168.2.113

$ uname -a
Linux black-pearl 4.4.15-hypriotos-v7+ #1 SMP PREEMPT Mon Jul 25 08:46:52 UTC 2016 armv7l GNU/Linux

第三步 :安装构建所需的依赖

$ sudo apt-get update
$ sudo apt-get install -y make

第四步 :使用swap文件

这一步会创建并且使用默认的2x1GB大小的交换文件,路径为 /var/swap

$ sudo apt-get install -y dphys-swapfile
$ ls -alh /var/swap
-rw------- 1 root root 1.8G Jul 30 17:58 /var/swap

如果我们需要更大的交换文件,可以编辑 /etc/dphys-swapfile ,但是对于我们来说,默认的1.8GB的交换文件足够了。

克隆Docker仓库

$ git clone https://github.com/docker/docker.git
$ cd docker
$ git checkout v1.12.0

如你所见,我们是基于Docker某个标签(tag)的发布版本来构建我们的版本。

如何应用一些额外的Pull Request

实话讲,现在Docker v1.12.0的构建过程将在ARM上是会失败的。这是一个已知的问题,并且有可望很快被修复。但是很幸运的是已经有一个 Pull Request 能让我们来构建Docker .deb 格式的包。借这个例子机会可以讲下如何简单地将一个pull request应用到某一个发行版本上。

首先,让我们挑选(_cherry pick_)特定的pull request

$ git fetch origin pull/25192/head:fix-manpages-on-arm
$ git cherry-pick fix-manpages-on-arm

然后让我看下git history是否正常。

commit e15322b4fcb173674fd62a329a51b0756f02d503
Author: Daniel Nephin <dnephin@docker.com>
Date: Thu Jul 28 14:53:08 2016 -0400

Fix the man/Dockerfile for arm

Signed-off-by: Daniel Nephin <dnephin@docker.com>

commit 8eab29edd820017901796eb60d4bea28d760f16f
Author: Tibor Vass <tibor@docker.com>
Date: Wed Jul 27 16:35:10 2016 -0700

Bump VERSION to v1.12.0

Signed-off-by: Tibor Vass <tibor@docker.com>

可以看到倒数第二个提交是Docker Engine官方的v1.12.0 版本的发布提交。最后一个commit来自于我们正在应用的提交。

运行构建结果

现在是见证魔法的时刻了:我们开始构建过程,然后需要等待相当长的时间才会完成。

$ time make deb


real 350m48.228s
user 0m22.140s
sys 0m4.870s

在一个快速的Raspberry Pi 3上,整个构建过程需要几乎6个小时,但是最终我们将会得到Docker Engine v1.12.0构建后得到的一些针对不同ARM操作系统的安装包。

$ ls -al ~/docker/bundles/1.12.0/build-deb/*/*.deb
-rw-r--r-- 1 root root 15933554 Jul 31 10:46 /home/pirate/docker/bundles/1.12.0/build-deb/debian-jessie/docker-engine_1.12.0-0~jessie_armhf.deb
-rw-r--r-- 1 root root 15945462 Jul 31 12:28 /home/pirate/docker/bundles/1.12.0/build-deb/raspbian-jessie/docker-engine_1.12.0-0~jessie_armhf.deb
-rw-r--r-- 1 root root 15915910 Jul 31 13:40 /home/pirate/docker/bundles/1.12.0/build-deb/ubuntu-trusty/docker-engine_1.12.0-0~trusty_armhf.deb

要在我们的Raspberry Pi上安装Docker Engine,我们会选择使用 raspbian-jessie/docker-engine_1.12.0-0~jessie_armhf.deb

这里是在HypriotOS的安装过程:

$ sudo apt-get purge -y docker-hypriot
$ sudo dpkg -i docker-engine_1.12.0-0~jessie_armhf.deb

现在我们确认在Raspberry Pi上运行了最新v1.12.0的Docker Engine。

$ docker version
Client:
Version: 1.12.0
API version: 1.24
Go version: go1.6.3
Git commit: e15322b4f
Built: Sun Jul 31 11:41:45 2016
OS/Arch: linux/arm

Server:
Version: 1.12.0
API version: 1.24
Go version: go1.6.3
Git commit: e15322b4f
Built: Sun Jul 31 11:41:45 2016
OS/Arch: linux/arm

还能使用其他的什么构建选项?

有一些 Raspberry Pi的使用者如 Alex Ellis 会在 Arch Linux for ARM (ALARM) 或者其他兼容的Linux发行版上运行Docker。对于绝大多数的非Debian发行版来说,用下面的命令来构建一个静态的二进制文件应该就可以了:

$ cd ~/docker
$ time make binary

然后你在 bundles 文件夹下面发现二进制文件,然后将他们放到 /usr/bin 或者 /usr/local/bin 目录下面。

学到了什么

在 Raspberry Pi操作系统和Docker Engine安装好之后,在标准的Raspberry Pi下构建下一个版本的Docker Engine相信就很简单了。

强烈推荐使用更快的Raspberry Pi 3,并且使用至少16GB的SD卡,因为如果SD卡容量小的话,构建可能会在几小时之后崩溃然后你又得从头再来。

请给我们反馈

跟往常一样,希望在下边留下你的评论,或者分享到Twitter或者Facebook。

请将你的反馈发送的 Gitter的channel 里面,或者在Twitter上发表你对于这个项目的想法或者意见并且 @HypriotTweets 。

原文链接: Building Docker 1.12 on a Raspberry Pi ,翻译:钟最龙

原文  http://dockone.io/article/1631
正文到此结束
Loading...