はじめに
先日発表のあった、Dokcer 社公式のオーケストレーションツールである Docker Machine を使って、 VMware ESXi 5.5 Update 2 へ 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)
- govc (@c848630)
- VMware ESXi (5.5 Update2)
事前準備
-
ネットワークアクセス可能な場所に VMware ESXi 5.5 Update 2 がセットアップ済みの状態としてください
- VMware ESXi 5.5 Update 2 のセットアップ方法が不明な方は下記記事を参考にください
-
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?
-
govc
コマンドがセットアップ済みの状態としてください-
govc
コマンドのインストールは多少面倒ですが、brew
を活用しましょう
-
govc
を動かすために、まずは go
をインストールします。
$ brew upgrade ; brew update ; brew install go
Updated Homebrew from 336017cd to 66ca49fd.
==> Updated Formulae
boot2docker docker gecode google-app-engine passenger
cabal-install ffmpeg go-app-engine-32 mapnik solr
cppcheck fossil go-app-engine-64 mesos syncthing
==> Downloading https://homebrew.bintray.com/bottles/go-1.4.2.yosemite.bottle.1.tar.gz
######################################################################## 100.0%
==> Pouring go-1.4.2.yosemite.bottle.1.tar.gz
==> Caveats
As of go 1.2, a valid GOPATH is required to use the `go get` command:
https://golang.org/doc/code.html#GOPATH
You may wish to add the GOROOT-based install location to your PATH:
export PATH=$PATH:/usr/local/opt/go/libexec/bin
==> Summary
? /usr/local/Cellar/go/1.4.2: 4566 files, 155M
$
$ go version
go version go1.4.2 darwin/amd64
$
$ export GOPATH=$HOME/src/go
$ mkdir -p $GOPATH
$ export PATH=$PATH:$GOPATH/bin
govc
をインストール
ドキュメントによると、テスト済みなのはビルド番号 c848630
との事だが、とりあず最新版をインストール
$ go install github.com/vmware/govmomi/govc
% govc version
govc version 0.0.1-dev
Dokcer Machine をセットアップ
Docker Machine のダウンロードURLを確認
GitHub の Docker Machine リポジトリ から最新版の Mac OS X用バイナリを確認
- 2015/03/08時点では下記が最新
Dokcer 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 ESXi 5.5 Update 2 で boot2docker を起動
docker-machine create
で起動出来る
マシン名は test-docker-host002
とする
引数は下記の通りとした
--driver
: vmwarevsphere
VMware ESXi 5.5 Update 2 を指定
--vmwarevsphere-vcenter
: 192.168.112.140
今回は ESXi ホストへ直接アクセスするのでIPアドレスを直接指定
--vmwarevsphere-username
: root
ESXi ホストのログインユーザー名
--vmwarevsphere-password
: hogehoge
ESXi ホストのパスワード
--vmwarevsphere-network
: 'VM Network'
boot2docker仮想マシンの接続先ネットワークラベル名
--vmwarevsphere-datastore
: 'datastore1'
boot2docker仮想マシンの配置先データストア名
--vmwarevsphere-datacenter
: ha-datacenter
ESXi ホストへ直接アクセスする際は ha-datacenter
で固定
いざ起動!
$ docker-machine create --driver vmwarevsphere --vmwarevsphere-vcenter 192.168.112.140 --vmwarevsphere-username root --vmwarevsphere-password hogehoge --vmwarevsphere-network 'VM Network' --vmwarevsphere-datastore 'datastore1' --vmwarevsphere-datacenter ha-datacenter test-docker-host002
INFO[0000] Generating SSH Keypair...
INFO[0000] Uploading Boot2docker ISO ...
INFO[0000] Creating directory boot2docker-iso on datastore datastore1 of vCenter 192.168.112.140...
INFO[0000] Uploading /Users/ysaotome/.docker/machine/cache/boot2docker-vmw.iso to boot2docker-iso on datastore datastore1 of vCenter 192.168.112.140...
INFO[0000] Creating virtual machine test-docker-host002 of vCenter 192.168.112.140...
INFO[0000] Configuring the virtual machine test-docker-host002...
INFO[0000] Powering on virtual machine test-docker-host002 of vCenter 192.168.112.140...
INFO[0039] Configuring virtual machine test-docker-host002...
INFO[0042] "test-docker-host002" has been created and is now the active machine.
INFO[0042] To point your Docker client at it, run this in your shell: $(docker-machine env test-docker-host002)
初回なので、合わせて鍵生成とかboot2dockerイメージのESXiホストへのアップロードとか行われた。
確認
% docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
test-docker-host001 * vmwarefusion Stopped tcp://192.168.112.138:2376
test-docker-host002 vmwarevsphere Running tcp://192.168.112.143:2376
boot2dockerのイメージが ESXi ホストで起動してるヨ!
ちなみに test-docker-host001
は、手元の VMware Fusion 7 で起動しているホスト
コンテナの起動確認
該当ホスト上のコンテナ一覧を確認
docker コマンドの引数に $(docker-machine config test-docker-host002)
を追加して、該当ホスト上に対してdockerコマンドを発行する
該当ホスト上のコンテナ一覧
$ docker $(docker-machine config test-docker-host002) ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
該当ホスト上では、1台もコンテナが起動していない
良くあるHello Worldをしてみる
docker $(docker-machine config test-docker-host002) 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-host002) ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7fe7e348540c busybox:latest "echo hello world" 18 seconds ago Exited (0) 17 seconds ago loving_franklin
ちゃんと残ってる
作成したホストへのログイン
sshでログインしてみる
$ docker-machine ssh test-docker-host002
## .
## ## ## ==
## ## ## ## ===
/""""""""""""""""\___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~
\______ 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-host002:~$
鍵設定済みでノーパスワードログインが出来ますね。
やっぱりこれは便利だーーーー!
直接コマンドの発行も出来る
% docker-machine ssh test-docker-host002 'uname -a'
Linux test-docker-host002 3.18.5-tinycore64 #1 SMP Wed Feb 18 09:29:51 UTC 2015 x86_64 GNU/Linux
ホストの停止と削除
作成したホストの停止
$ docker-machine stop test-docker-host002
INFO[0000] Powering off virtual machine test-docker-host002 of vCenter 192.168.112.140...
作成したホストの削除
$ docker-machine rm test-docker-host002
INFO[0000] Deleting virtual machine test-docker-host002 of vCenter 192.168.112.140...
確認
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
気づいた事とか
かなり便利。
VMware Fusion 7 と VMware ESXi 5.5 Update2 の間で殆ど差を感じる事無くDockerホストのデプロイが出来る。
コンテナイメージもレジストリ登録してあれば、どちらにでも展開出来るし、これは未來があると思う。
vCenter Serverが存在する環境でも試してみたいと思った。
起動時のオプション
ドキュメントによると設定項目は下記の通り
boot2dockerイメージをデプロイする時に使いたい様な設定はひと通り設定出来る感じ。
環境変数 | CLI引数 | 意味 |
---|---|---|
VSPHERE_USERNAME |
--vmwarevsphere-username |
vSphere/ESXi のユーザー名 |
VSPHERE_PASSWORD |
--vmwarevsphere-password |
vSphere/ESXi のパスワード |
VSPHERE_BOOT2DOCKER_URL |
--vmwarevsphere-boot2docker-url |
boot2dockerのイメージURL |
VSPHERE_COMPUTE_IP |
--vmwarevsphere-compute-ip |
接続先ESXiホストのIPアドレス |
VSPHERE_CPU_COUNT |
--vmwarevsphere-cpu-count |
boot2dockerで利用するCPU数(デフォルト:2 ) |
VSPHERE_DATACENTER |
--vmwarevsphere-datacenter |
boot2dockerを配置するデータセンター名(vCenterServerが存在しない場合は ha-datacenter と入力) |
VSPHERE_DATASTORE |
--vmwarevsphere-datastore |
boot2dockerで利用するデータストア名 |
VSPHERE_DISK_SIZE |
--vmwarevsphere-disk-size |
boot2dockerで利用するディスクサイズ(デフォルト:20000MB ) |
VSPHERE_MEMORY_SIZE |
--vmwarevsphere-memory-size |
boot2dockerで利用するメモリサイズ(デフォルト:2048MB ) |
VSPHERE_NETWORK |
--vmwarevsphere-network |
boot2dockerで利用するネットワークラベル名 |
VSPHERE_POOL |
--vmwarevsphere-pool |
boot2dockerで利用を配置するリソースプール名 |
VSPHERE_VCENTER |
--vmwarevsphere-vcenter |
接続先vCenterServerのIPアドレス(ESXi直接の場合は不要) |
2ホスト同時に起動しようとするとエラーになる
test-docker-host002
を作成している状態で test-docker-host003
を作成しようとするとエラー
v0.2.0で修正されそうな雰囲気
% docker-machine create --driver vmwarevsphere --vmwarevsphere-vcenter 192.168.112.140 --vmwarevsphere-username root --vmwarevsphere-password hogehoge --vmwarevsphere-network 'VM Network' --vmwarevsphere-datastore 'datastore1' --vmwarevsphere-datacenter ha-datacenter test-docker-host003
INFO[0000] Generating SSH Keypair...
INFO[0000] Uploading Boot2docker ISO ...
INFO[0000] boot2docker ISO already uploaded, skipping upload...
INFO[0000] Creating virtual machine test-docker-host003 of vCenter 192.168.112.140...
INFO[0000] Configuring the virtual machine test-docker-host003...
INFO[0001] Powering on virtual machine test-docker-host003 of vCenter 192.168.112.140...
INFO[0040] Configuring virtual machine test-docker-host003...
sh: can't kill pid 1314: No such process
ERRO[0042] Error creating machine: exit status 1
WARN[0042] You will want to check the provider to make sure the machine and associated resources were properly removed.
FATA[0042] Error creating machine