はじめに
先日発表のあった、Docker 社公式のオーケストレーションツールである Docker Machine を使って、 VMware Fusion 7 へ Docker ホストを立ててみました。
Docker Machine と各環境向けドライバを組み合わせる事で、パブリッククラウドから手元のノートパソコンまで、統一的な操作で自動的に Docker ホストを構築する事が出来ます。
- 本記事と合わせて下記も実施すると、手元のノートパソコンから遠隔サーバまでカバー出来るのが体感出来るかと思います。
構築環境
- MacBook Pro (Retina, 13-inch, Late 2013)
- OS : Mac OS X Yosemite (10.10.2)
- CPU : 2.8 GHz Intel Core i7
- Mem : 16 GB 1600 MHz DDR3
- Docker (1.5.0)
- Docker Machine (v0.1.0)
- VMware Fusion 7 (Pro 7.1.1)
事前準備
- 対象環境に VMware Fusion 7 がセットアップ済みの状態としてください
-
docker
コマンドがセットアップ済みの状態としてください
docker
コマンドのインストールは brew
が入っていれば簡単です
% brew upgrade ; brew update ; brew install docker
Already up-to-date.
==> Downloading https://homebrew.bintray.com/bottles/docker-1.5.0.yosemite.bottle.tar.gz
Already downloaded: /Library/Caches/Homebrew/docker-1.5.0.yosemite.bottle.tar.gz
==> Pouring docker-1.5.0.yosemite.bottle.tar.gz
==> Caveats
Bash completion has been installed to:
/usr/local/etc/bash_completion.d
zsh completion has been installed to:
/usr/local/share/zsh/site-functions
==> Summary
? /usr/local/Cellar/docker/1.5.0: 9 files, 7.2M
$
$ docker version
Client version: 1.5.0
Client API version: 1.17
Go version (client): go1.4.1
Git commit (client): a8a31ef
OS/Arch (client): darwin/amd64
FATA[0000] Get http:///var/run/docker.sock/v1.17/version: dial unix /var/run/docker.sock: no such file or directory. Are you trying to connect to a TLS-enabled daemon without TLS?
Docker Machine をセットアップ
Docker Machine のダウンロードURLを確認
GitHub の Docker Machine リポジトリ から最新版の Mac OS X用バイナリを確認
- 2015/03/08時点では下記が最新
Docker Machine をダウンロード
$ sudo curl -L -o /usr/local/bin/docker-machine https://github.com/docker/machine/releases/download/v0.1.0/docker-machine_darwin-amd64
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 401 0 401 0 0 374 0 --:--:-- 0:00:01 --:--:-- 374
100 15.5M 100 15.5M 0 0 1781k 0 0:00:08 0:00:08 --:--:-- 3926k
$
$ sudo chmod +x /usr/local/bin/docker-machine
$ docker-machine -v
docker-machine version 0.1.0
Docker Machine を使ってみる
Docker Machine を使って VMware Fusion 7 で boot2docker を起動
docker-machine create
で起動出来る
--driver
で VMware Fusion 7を指定するために vmwarefusion
を選ぶ
マシン名は test-docker-host001
とする
$ docker-machine create --driver vmwarefusion test-docker-host001
INFO[0000] Creating CA: /Users/ysaotome/.docker/machine/certs/ca.pem
INFO[0000] Creating client certificate: /Users/ysaotome/.docker/machine/certs/cert.pem
INFO[0001] Downloading boot2docker.iso to /Users/ysaotome/.docker/machine/cache/boot2docker-vmw.iso...
INFO[0010] Creating SSH key...
INFO[0010] Creating VM...
INFO[0011] Waiting for VM to come online...
INFO[0036] "test-docker-host001" has been created and is now the active machine.
INFO[0036] To point your Docker client at it, run this in your shell: $(docker-machine env test-docker-host001)
初回なので、合わせて鍵生成とか行われた
確認
% docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
test-docker-host001 * vmwarefusion Running tcp://192.168.112.138:2376
boot2dockerのホストが起動してる!
コンテナの起動確認
該当ホスト上のコンテナ一覧を確認
docker コマンドの引数に $(docker-machine config test-docker-host001)
を追加して、該当ホスト上に対してdockerコマンドを発行する
該当ホスト上のコンテナ一覧
$ docker $(docker-machine config test-docker-host001) ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
該当ホスト上では、1台もコンテナが起動していない
良くあるHello Worldをしてみる
docker $(docker-machine config test-docker-host001) run busybox echo hello world
Unable to find image 'busybox:latest' locally
511136ea3c5a: Pull complete
df7546f9f060: Pull complete
ea13149945cb: Pull complete
4986bf8c1536: Pull complete
busybox:latest: The image you are pulling has been verified. Important: image verification is a tech preview feature and should not be relied on to provide security.
Status: Downloaded newer image for busybox:latest
hello world
ちゃんと表示された!
再度、該当ホスト上のコンテナ一覧を確認
$ docker $(docker-machine config test-docker-host001) ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
adb4e8f86121 busybox:latest "echo hello world" 2 minutes ago Exited (0) 2 minutes ago focused_davinci
ちゃんと残ってる
作成したホストへのログイン
sshでログインしてみる
$ docker-machine ssh test-docker-host001
## .
## ## ## ==
## ## ## ## ===
/""""""""""""""""\___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\______/
_ _ ____ _ _
| |__ ___ ___ | |_|___ \ __| | ___ ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__| < __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 1.5.0, build vmw-1.5.0 : 67fcb7d - Wed Feb 18 10:00:58 UTC 2015
Docker version 1.5.0, build a8a31ef
docker@test-docker-host001:~$
鍵設定済みでノーパスワードログインが出来て便利!
直接コマンドの発行も出来る
% docker-machine ssh test-docker-host001 'uname -a'
Linux test-docker-host001 3.18.5-tinycore64 #1 SMP Wed Feb 18 09:29:51 UTC 2015 x86_64 GNU/Linux
ホストの停止と削除
作成したホストの停止
$ docker-machine stop test-docker-host001
作成したホストの削除
$ docker-machine rm test-docker-host001
確認
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
気づいた事とか
かなり便利。
boot2docker の Mac OS X 版は VirtualBox 利用が標準になっていて、VMware Fusion で対応するのは多少面倒だったが一気に解消された。
個人的には、Vagrant + Fusionユーザーなので、VMware Fusion をバージョンアップする度に、お布施の様に Supercharged Vagrant environments. を購入してきたが、これで開放されそう。
引数のdriverを切り替える事で、様々な環境を統一的なコマンドで一元的に管理出来る破壊力を感じた。
起動時のオプション
ドキュメントによると設定項目は下記の通り
沢山コンテナを起動するのであれば、メモリやディスクは拡張したい所なので、オプションで簡単に設定出来るのは嬉しい。
環境変数 | CLI引数 | 意味 |
---|---|---|
FUSION_BOOT2DOCKER_URL |
--vmwarefusion-boot2docker-url |
boot2dockerのイメージURL |
FUSION_DISK_SIZE |
--vmwarefusion-disk-size |
boot2dockerで利用するディスクサイズ(デフォルト:20000MB ) |
FUSION_MEMORY_SIZE |
--vmwarefusion-memory-size |
boot2dockerで利用するメモリサイズ(デフォルト:1024MB ) |
2ホスト同時に起動しようとするとエラーになる
test-docker-host001
を作成している状態で test-docker-host002
を作成しようとするとエラー
v0.2.0で修正されそうな雰囲気
% docker-machine create --driver vmwarefusion test-docker-host002
INFO[0000] Creating SSH key...
INFO[0000] Creating VM...
INFO[0001] Waiting for VM to come online...
ERRO[0025] Error creating machine: dial tcp 192.168.112.139:22: connection refused
WARN[0025] You will want to check the provider to make sure the machine and associated resources were properly removed.
FATA[0025] Error creating machine