OSX
vmware
Docker
Docker_Machine
VMware_ESXi

Docker Machineを使ってDockerホストを立てる(VMware ESXi 5.5 Update2編)

More than 3 years have passed since last update.


はじめに

先日発表のあった、Dokcer 社公式のオーケストレーションツールである Docker Machine を使って、 VMware ESXi 5.5 Update 2 へ Docker ホストを立ててみました。

Docker Machine と各環境向けドライバを組み合わせる事で、パブリッククラウドから手元のノートパソコンまで、統一的な操作で自動的に Docker ホストを構築する事が出来ます。

osx_yosemite+docker+vmware_vsphere_5.5.png


構築環境


  • 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)


事前準備

% 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用バイナリを確認


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