LoginSignup
39
45

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-03-08

はじめに

先日発表のあった、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

39
45
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
39
45