3.14.2014

Using Docker 0.9 in Mac

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

 

Related Posts

0 件のコメント:

コメントを投稿