読者です 読者をやめる 読者になる 読者になる

うさがにっき

読書感想文とプログラムのこと書いてきます

OS X上でDockerを動かそうとした話(失敗)

概要

OS X上でDockerを動かす
将来的にはAndroid開発環境をDockerで構築して簡単に配布できるようにしたい
けど32bit OSだとうまくできないよという失敗談

詳細

必要になるアプリケーション

Dockerインストール

DockerにはDockerコンテナを実行するソフトウェアであるDocker Engineと、Dockerイメージを共有するWebサービスであるDocker Hubがある
ここではDocker Engineのインストール方法と基本的な使い方をまとめる

Docker EngineはDockerコンテナを実行する、Dockerコマンドを実行するDockerクライアントで構成される

DockerサーバはDockerコンテナを実行するためにLinuxカーネルの機能を利用するため、Linux OSでのみ動作する
DockerクライアントはLinux, Max OS X, Windows用の実行ファイルが提供されている
DockerサーバとDockerクライアントは同じマシンにインストールすることもできるし、別々のマシンにインストールし、ネットワーク経由でDockerサーバを制御する構成も可能
厳密に言うとDockerサーバとDockerクライアントはRESTfulなHTTPSで通信をするため、Dockerクライアント以外のアプリケーションやWebサービスと連携させることも可能

VirtualBox

Downloads – Oracle VM VirtualBox
から自分の環境のVirtualBoxをダウンロード、インストール

Boot2Docker

Release v1.7.1 · boot2docker/osx-installer · GitHub
からBoot2Dockerをダウンロード、インストール

Boot2Dockerは、端末でdockerコマンドとboot2dockerコマンドを組み合わせて利用する
dockerはDockerクライアントとしてDockerコンテナを操作するコマンド
boot2dockerはDockerサーバとなるLinux仮想マシン(boot2docker-vm)を管理するコマンド

terminalで以下のコマンドを入力し、Linux仮想マシンを作成し

$ boot2docker init
Latest release for github.com/boot2docker/boot2docker is v1.7.1
Downloading boot2docker ISO image...
Success: downloaded https://github.com/boot2docker/boot2docker/releases/download/v1.7.1/boot2docker.iso
  to /Users/.boot2docker/boot2docker.iso
Generating public/private rsa key pair.
Your identification has been saved in /Users/.ssh/id_boot2docker.
Your public key has been saved in /Users/.ssh/id_boot2docker.pub.
The key fingerprint is:
16:34:03:73:42:00:55:3e:fa:8b:73:4d:30:9e:f2:3c 
The key's randomart image is:
+--[ RSA 2048]----+
|  .oo+*.=        |
|     . = o       |
|      o .        |
|     .o. .       |
|    .. +S        |
|    ..o..        |
|     +.o         |
|    ..E..        |
|    .o..         |
+-----------------+
Initialization of virtual machine "boot2docker-vm" complete.
Use `boot2docker up` to start it.

Linux仮想マシンを起動する

$ boot2docker start
Waiting for VM and Docker daemon to start...
...........................ooooooooooooooooooooooooooooooooooo
Started.
Writing /Users/.boot2docker/certs/boot2docker-vm/ca.pem
Writing /Users/.boot2docker/certs/boot2docker-vm/cert.pem
Writing /Users/.boot2docker/certs/boot2docker-vm/key.pem

To connect the Docker client to the Docker daemon, please set:
    export DOCKER_HOST=tcp://192.168.59.103:2376
    export DOCKER_CERT_PATH=/Users/.boot2docker/certs/boot2docker-vm
    export DOCKER_TLS_VERIFY=1

Or run: `eval "$(boot2docker shellinit)"`

Linux仮想マシンが正常に実行しているかは以下で確認

$ boot2docker status
running
環境変数の設定

boot2docker startコマンドの実行結果末尾には、dockerコマンドからDockerサーバに接続するための環境変数が表示されている
起動するたびに設定するのが面倒なので.bash_profileに追加しておく

$ vi .bash_profile

…
export DOCKER_HOST=tcp://192.168.59.103:2376
export DOCKER_CERT_PATH=/Users/.boot2docker/certs/boot2docker-vm
export DOCKER_TLS_VERIFY=1

確認

$ env | grep DOCKER
DOCKER_HOST=tcp://192.168.59.103:2376
DOCKER_TLS_VERIFY=1
DOCKER_CERT_PATH=/Users/.boot2docker/certs/boot2docker-vm
dockerコマンドの確認

Dockerコンテナを操作するdockerコマンドが正常に動作する確認
docker versionコマンドでDockerクライアント及びDockerクライアント及びDockerサーバのバージョン、docker infoコマンドでDocker Engine全体の環境設定が確認できる

$ docker version
Client version: 1.7.1
Client API version: 1.19
Go version (client): go1.4.2
Git commit (client): 786b29d
OS/Arch (client): darwin/amd64
Server version: 1.7.1
Server API version: 1.19
Go version (server): go1.4.2
Git commit (server): 786b29d
OS/Arch (server): linux/amd64
$ docker info
Containers: 0
Images: 0
Storage Driver: aufs
 Root Dir: /mnt/sda1/var/lib/docker/aufs
 Backing Filesystem: extfs
 Dirs: 0
 Dirperm1 Supported: true
Execution Driver: native-0.2
Logging Driver: json-file
Kernel Version: 4.0.7-boot2docker
Operating System: Boot2Docker 1.7.1 (TCL 6.3); master : c202798 - Wed Jul 15 00:16:02 UTC 2015
CPUs: 4
Total Memory: 1.955 GiB
Name: boot2docker
ID: MD3N:2PBY:FNUU:EXF6:PJRA:YZEL:562U:XR3O:WM47:M57B:WJLV:2AHB
Debug mode (server): true
File Descriptors: 9
Goroutines: 15
System Time: 2015-08-09T04:34:44.034596798Z
EventsListeners: 0
Init SHA1: 
Init Path: /usr/local/bin/docker
Docker Root Dir: /mnt/sda1/var/lib/docker
Linuxへのインストール

Docker Engineは、多くのLinuxディストリビューションで、DockerサーバとDockerクライアントがセットになったRPMパッケージやAPTパッケージで提供されており、比較的簡単にインストールできる
今回は同一マシンのDockerクライアントからDockerサーバに接続する
厳密には、DockerクライアントとDockerサーバは同一の実行ファイルで動作するため、起動時のオプションでクライアントとサーバの動作を区別する

ここではUbuntu Server 14.10 64bitでのAPTパッケージマネージャによるDocker Engineのインストール手順をまとめる

...の前にYosemiteには標準でapt-getコマンドが入っていないのでfinkなるものを使ってapt-getコマンドを取得する
Fink - Source Release Download

ここの最新版を取得し(現時点ではfink-0.38.6.tar.gz)解凍した直下のbootstrapを実行、色々聞かれたり、依存しているパッケージダウンロードしろとか言われるががよしなに色々やる
ちなみにfinkのインストールには20分くらいかかる

インストールが終わったらパスを通す

$ /sw/bin/pathsetup.sh

パスを有効にするためコンソール再起動
finkの環境設定

$ fink selfupdate-rsync
$ fink index -f

finkの確認
たくさん表示されればok

$ fink list

これでapt-getが叩けるようになる

$ sudo apt-get update
Hit http://bindist.finkmirrors.net stable/main Packages
Hit http://bindist.finkmirrors.net stable/main Release
Hit http://bindist.finkmirrors.net stable/crypto Packages
Hit http://bindist.finkmirrors.net stable/crypto Release
Reading Package Lists... Done
Building Dependency Tree... Done

しかしここで蹴られる

$ sudo apt-get install docker.io
Reading Package Lists... Done
Building Dependency Tree... Done
E: Couldn't find package docker.io

32bit OSではdocker.ioが使えない(64bit Linuxをインストールする必要があるため)

ぼ く の 冒 険 は こ こ で 終 わ っ て し ま っ た ! !

そろそろmac買い換えようかなぁ・・・