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 をインストールしてある場合は
不要な混乱を避けるため一旦削除しておく。
- Homebrew でインストールした場合の例
$ 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
- boot2docker/boot2docker ~/.boot2docker/profile について記述あり
- boot2docker/doc/WORKAROUNDS.md at master · boot2docker/boot2docker
- boot2docker/doc/BUILD.md at master · boot2docker/boot2docker
- boot2dockerでdockerを試す - @znz blog
0 件のコメント:
コメントを投稿