Mac で Docker 0.9 を使う
Mac 用に最適化された docker クライアントと boot2docker VM を使って Docker 0.9 環境を構築する。
2014-03-15 追記
すでに boot2docker が Docker 0.9 に対応された(Releases · boot2docker/boot2docker)ので
もはや下記手順は必要ない。
また、Homebrew でのインストールを半自動化するシェルを書いた。
環境
- ホストOS: Mac OS X 10.9 (Mavericks)
- VirtualBox: 4.3.6
事前準備
既に docker クライアントや boot2docker をインストールしてある場合は
不要な混乱を避けるため一旦削除しておく。
$ brew install docker
==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/docker-0.8.0.mavericks.bottle.tar.gz
Already downloaded: /Library/Caches/Homebrew/docker-0.8.0.mavericks.bottle.tar.gz
==> Pouring docker-0.8.0.mavericks.bottle.tar.gz
/usr/local/Cellar/docker/0.8.0: 8 files, 18M
$ docker version
Client version: 0.8.0
Go version (client): go1.2
Git commit (client): cc3a8c8d8ec57e15b7b7316797132d770408ab1a
xxxx/xx/xx xx:xx:xx Can't connect to docker daemon. Is 'docker -d' running on this host?
現時点では、まだ 0.9 に対応していないようだった。
$ brew uninstall docker
$ brew uninstall boot2docker
手順
Docker OS X Client のインストール
以下の公式ドキュメントに従って作業。
適当な作業ディレクトリに移動して、シェルで以下のコマンドを実行する。
環境変数 DOCKER_HOST は今後も使い続けるのでシェルのrcスクリプトに書いておくと良い。
$ curl -o docker https://get.docker.io/builds/Darwin/x86_64/docker-latest
$ chmod +x docker
$ sudo mv -i docker /usr/local/bin/
$ export DOCKER_HOST=tcp://127.0.0.1:4243
確認
$ docker version
Client version: 0.9.0
Go version (client): go1.2.1
Git commit (client): 2b3fdf2
xxxx/xx/xx xx:xx:xx Cannot connect to the Docker daemon. Is 'docker -d' running on this host?
この時点ではサーバ接続が失敗する。
boot2docker のインストール
引き続き作業ディレクトリで実行。
$ curl https://raw.github.com/boot2docker/boot2docker/master/boot2docker > boot2docker
$ chmod +x ./boot2docker
$ sudo mv -i boot2docker /usr/local/bin/
起動とログイン
$ boot2docker init
$ boot2docker up
$ boot2docker ssh
docker@localhost's password: <=== tcuser と入力
## .
## ## ## ==
## ## ## ## ===
/""""""""""""""""\___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\______/
_ _ ____ _ _
| |__ ___ ___ | |_|___ \ __| | ___ ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__| < __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
boot2docker: 0.6.0
docker@boot2docker:~$ docker version
Client version: 0.8.1
Go version (client): go1.2
Git commit (client): a1598d1
Server version: 0.8.1
Git commit (server): a1598d1
Go version (server): go1.2
Last stable version: 0.9.0, please update docker
バージョン 0.8.1 だった。
- SSHの問題が発生した場合は、「ssh -v -o StrictHostKeyChecking=no -o LogLevel=quiet -o UserKnownHostsFile=/dev/null -p 2022 docker@localhost」といったコマンドで原因調査。
/etc/ssh_config に以下のようにパスワード認証を優先する設定を追加することで改善する場合がある。
PreferredAuthentications password,gssapi-with-mic,hostbased,publickey,keyboard-interactive
- boot2docker コマンドには、b2d などのエイリアスを付けると便利だと思う
boot2docker のビルド
現時点(2014-03-13)では、boot2docker は Docker 0.9 に対応していない。
Issue もあるので近日中に対応するものと思われるが、今回は練習も兼ねて
自分でisoファイルをビルドし直して最新化してみる。
boot2docker 自体が Docker を利用しているので、先ほど導入した古い boot2docker 環境でビルドを行う。
$ boot2docker up
$ boot2docker ssh
docker@boot2docker:~$ git clone https://github.com/boot2docker/boot2docker.git
docker@boot2docker:~$ cd boot2docker
docker@boot2docker:~/boot2docker$ docker pull boot2docker/boot2docker:base
docker@boot2docker:~/boot2docker$ docker build -t boot2docker --rm rootfs/
docker@boot2docker:~/boot2docker$ docker rm build-boot2docker # 未作成ならエラーとなるが問題なし
docker@boot2docker:~/boot2docker$ docker run --privileged -name build-boot2docker boot2docker
docker@boot2docker:~/boot2docker$ sudo docker cp build-boot2docker:/boot2docker.iso .
docker@boot2docker:~/boot2docker$ exit
docker pull は長時間(数分〜数十分)を要する場合がある。
rootfs のビルドの過程で最新版の docker プログラムが取得される。
ISO ファイルが出来上がったら、Mac上にコピーしてくる。
boot2docker-docker-0.9.iso とリネームして保存するなら以下のようなコマンドだ。
$ scp -P 2022 docker@localhost:boot2docker/boot2docker.iso ~/.boot2docker/boot2docker-docker-0.9.iso
boot2docker VM の再作成
先ほど作成したVMは一旦削除。
$ boot2docker stop
$ boot2docker delete
boot2docker 用の profile ファイルを書くことで ISOファイルのパス、VMのメモリサイズなどを指定できる。
今回はISOのパス変更のほか、メモリ容量を 2GB に増やしてみた。
$ vi ~/.boot2docker/profile
$ cat ~/.boot2docker/profile
VM_MEM=2048
BOOT2DOCKER_ISO=${BOOT2DOCKER_CFG_DIR}/boot2docker-docker-0.9.iso
VM作成
$ boot2docker init
$ boot2docker up
$ docker version
Client version: 0.9.0
Go version (client): go1.2.1
Git commit (client): 2b3fdf2
Server version: 0.9.0
Git commit (server): 2b3fdf2
Go version (server): go1.2.1
無事、Docker 0.9 の環境が Mac + boot2docker で使えるようになった。
最後にポートフォワーディングの設定を実施。
$ boot2docker stop
$ for i in {49000..49900}; do
VBoxManage modifyvm "boot2docker-vm" --natpf1 "tcp-port$i,tcp,,$i,,$i";
VBoxManage modifyvm "boot2docker-vm" --natpf1 "udp-port$i,udp,,$i,,$i";
done
$ boot2docker start
設定には数分かかる。
運用にあたっては、コンテナ起動時に各種サービスポートをVM上の 49000-49900 ポートとバインドさせる。
その後 Mac から localhost:49000-49900 へアクセスすれば、コンテナの内部へ接続することが可能となる。
References
Related Posts