2017年1月14日土曜日

VMware Integrated Container 上に docker コンテナを作成してみた

概要

前回 VMware Integrated Container (VIC) に必要な virtual container host (VCH) を vCenter が動作する仮想化環境にデプロイしました
今回はこの VCH 上に docker コンテナを立てるところまでやってみました

環境

仮想環境

  • ESXi 5.5.0
    • CPU: Xeon E5-2690 (Sandy Bridge 世代)
    • Memory: 400GB
  • VMware vCenter Server 5.5.0
  • VMware Integrated Contaier v0.8.0

クライアント側

  • Ubuntu 16.04
  • docker 1.11.2

事前作業

docker コマンドを実行できるクライアント用のマシンを作成します
当然ですが、ネットワーク的に VCH にアクセスできる環境に作成してください
今回は Ubuntu 16.04 を構築し docker をインストールしました
参考: http://hawksnowlog.blogspot.jp/2016/12/install-docker-on-ubuntu1604lts.html

一点ポイントなのですが、VCH 0.8.0 は docker API 互換のエンドポイントを持っているのですが、バージョンが「API version 1.23」までしか対応していません
執筆時点での docker の最新バージョンが 1.12.6 となっており、これをインストールしてしまうとクライアント側の API version が 1.24 になってしまい動作しません

Error response from daemon: client is newer than server (client API version: 1.24, server API version: 1.23)

なので、クライアント側の docker は 1.11 台の最新版をインストールします

Ubuntu でインストールする場合簡単にバージョンを落とせるので apt-get install する際に以下のコマンドを実行することで docker 1.11 をインストールすることができます

  • apt-get install docker-engine=1.11.2-0~xenial

VCH に接続できるか確認する

無事 docker コマンドがインストールできたら docker コマンドを使って VCH にアクセスできるか確認してみます
ちなみに Ubuntu に docker をインストールした際に docker デーモンが起動してしまいますが今回は VCH 上にコンテナを立てるので停止しておいて問題ないです

VCH の IP アドレスは 192.168.10.10 とします
以下のコマンドで docker の情報が返却されれば OK です

  • docker -H 192.168.10.10:2376 --tls info
Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 0
Server Version: v0.8.0-7315-c8ac999
Storage Driver: vSphere Integrated Containers v0.8.0-7315-c8ac999 Backend Engine
VolumeStores:
vSphere Integrated Containers v0.8.0-7315-c8ac999 Backend Engine: RUNNING
 VCH mhz limit: 199374 Mhz
 VCH memory limit: 1.819 TiB
 VMware Product: VMware vCenter Server
 VMware OS: win32-x64
 VMware OS version: 5.5.0
Execution Driver: vSphere Integrated Containers v0.8.0-7315-c8ac999 Backend Engine
Plugins:
 Volume:
 Network: bridge
Operating System: win32-x64
OSType: win32-x64
Architecture: x86_64
CPUs: 199374
Total Memory: 1.819 TiB
Name: virtual-container-host
ID: vSphere Integrated Containers
Docker Root Dir:
Debug mode (client): false
Debug mode (server): false
Registry: registry-1.docker.io

イメージをダウンロードする

では docker pull でイメージをダウンロードしてみます

  • docker -H 192.168.10.10:2376 --tls pull nginx

でイメージのダウンロードが始まります
VCH が docker hub からダウンロードしているので、 VCH がインターネットに接続できる必要があります
問題なくダウンロードが完了すれば OK です

  • docker -H 192.168.10.10:2376 --tls images

でダウンロードしたイメージが確認できると思います

コンテナを起動する

ではコンテナを起動してみましょう
普通に run コマンドを実行すれば OK です

  • docker -H 192.168.10.10:2376 --tls run -d -p 10080:80 nginx

やや run 時に詰まる印象でしたがすぐに起動すると思います
ps でコンテナの状態を確認しましょう

  • docker -H 192.168.10.10:2376 --tls ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                         NAMES
a9878655a5ce        nginx               "nginx -g daemon off;"   32 minutes ago      Up 32 minutes       192.168.10.10:10080->80/tcp   cocky_mirzakhani

コンテナが起動してるのが確認できたら vCenter 側でもコンテナが作成されているか確認してみましょう
一番てっとり早いのは virtual-container-host がある vApp 配下を見ることです
run_container_on_vch1.png

コンテナ用の VM は「コンテナ名-コンテナID」という名前で起動していると思います
stop すると VM も停止し ps からも消えると思います

コンテナを削除したい場合には rm で OK です

  • docker -H 192.168.10.10:2376 --tls rm big_khorana

最後に

VCH 上に docker コンテナを立ち上げてみました
既存の docker コマンドの向き先をローカルではなく VCH 上に向けるだけで使えるようになるので簡単に移行はできると思います

また触っていて他にも気づいたことがあるのでメモしておきます

  • docker exec が使えない

Error response from daemon: vSphere Integrated Containers does not implement container.ContainerExecCreate となりエラーとなる
コンテナは VM なのでログインしてしまえば良いといのもあるがそれはご法度だと思う

  • docker-compose に対応しているのか
  • docker-swam 的なことができるのか

あたりでしょうか
VCH (Photon OS) 上の動きも気になるのでやはりログインできたほうが開発的には楽かもしれません
あと VCH の管理用のポート 2378 で run したらどうなるか試してみました

  • docker -H 192.168.10.10:2376 --tls run -d -p 2378:443 nginx

どうやらこの場合はエラーとなるようです、nginx の画面も表示されませんでした
コンテナは普通に起動していたようですが、もう少し VCH のログとかを見てみたらどこかにエラーログとか出ているかもしれません

0 件のコメント:

コメントを投稿