漢なら Parallella(ARM Linaro) でも Docker 動かしたいですね! Raspberry Pi で動いている報告があるので, Parallella でも動くはず!
現時点では動かない
が, 現時点ではカーネルをリコンパイルしないとまずは動かないことが判りました. カーネルリコンパイルをする旅に出ます. 果報は寝て待ちましょう.
パッケージのインストール
Docker は go 言語で記述されているので, go コンパイラをインストールします.
なぜか go 言語での websocket のパッケージで hg(mercurial) が求められるので, mercurial も忘れずにインストールしておきましょう.
$ sudo apt-get install lxc
$ sudo apt-get install bridge-utils
$ sudo apt-get install mercurial
invoke-rc.d: initscript lxc-net, action "start" failed.
と出たりしますがとりあえず無視して進めます.
ARM 版 go 1.2 コンパイラを http://dave.cheney.net/unofficial-arm-tarballs から取得します. Parallella の場合は arm7 multiarch 版を使いましょう.
GOROOT, GOPATH を適切に設定しておきます.
Docker のビルド.
Docker のソースを持ってきてビルドします. 現在は x86 版以外は
The docker runtime currently only supports amd64 (not %s)
と実行時エラーを出すようになっているので, 無理矢理パッチを当てて解決します.
以下を参考に,
engine/engine.go
で GOARCH="arm" を通すようにしておきます.
- if runtime.GOARCH != "amd64" {
+ if runtime.GOARCH != "amd64" && runtime.GOARCH != "arm" {
log.Fatalf("The docker runtime currently only supports amd64 (not %s). This will change in the future. Aborting.", runtime.GOARCH)
}
$ git clone https://github.com/dotcloud/docker.git
$ cd docker
$ go get
$ cd docker
$ go get
$ go build
$ file docker
ブリッジインターフェイス
docker0 ネットワークが無いと言われるので, インターフェイスをマニュアルで作ります.
sudo brctl addbr bridge0
add bridge failed: Package not installed
なんたるちや! パッケージが無いというエラーとなりました. これは調べてみると Linux カーネルで bridge が有効になっていないのが原因のようです.
カーネルのビルドパラメータを調べてみます.
$ zcat /proc/config.gz | grep BRIDGE
# CONFIG_ARCH_FOOTBRIDGE is not set
# CONFIG_BRIDGE is not set
bingo. 残念ながら BRIDGE 機能が有効になっていませんでした. というわけで, まずはカーネルのリコンパイルが必要になります.
To be continued…