2018年1月25日木曜日

VMware Admiral で docker-compose 的なことをしてみる

概要

VMware Admiral には docker-compose 的なことを実現するためにテンプレートという機能があります
今回はテンプレートを使った複数コンテナの起動方法を紹介します

環境

  • Ubuntu 16.04.3
  • docker 17.12.0-ce
  • Admiral v1.3.0

プロジェクトの作成

Admiral にはデフォルトで「default-project」というプロジェクトが用意されています
今回はそのプロジェクトを使って薦めます
なので、プロジェクトは必要であれば作成してください

作成の仕方は

管理 -> プロジェクト -> プロジェクトの追加

から新規でプロジェクトを作成できます

クラスタの登録

次にクラスタを登録しましょう
クラスタの登録には docker host or VCH が必要になります
今回は事前に Ubuntu 上に docker をインストールし tcp でのリモートコントロールを有効にしました

追加するには左メニューから

インフラストラクチャ -> クラスタ -> 新規

から追加できます
admiral_docker_compose1.png

テンプレートの登録

とりあえず空のテンプレートを作成しましょう
左メニューから

ライブラリ -> テンプレート -> テンプレートの作成

で好きな名前を入力しましょう
とりあえずこれで作成できれば OK です
admiral_docker_compose2.png

コンテナ定義の追加

テンプレートが作成できたらその中にコンテナ定義を追加していきましょう
docker-compose 的なことがしたいのでコンテナ定義はそれぞれのコンテナ分作成します
そして今回は redis + golang で書かれた Web アプリを作成したいと思います

redis

まずは redis イメージを使ってコンテナ定義を追加します
作成したテンプレート tpl1 を選択して「コンテナ追加」を選択しましょう
admiral_docker_compose3.png

次のイメージの選択です
Admiral ではデフォルトで DockerHub で公開されているイメージを検索することができます
「redis」で検索すると公式の redis イメージが表示されるのでそれを選択しましょう
admiral_docker_compose4.png

すると更にコンテナ定義の詳細を設定する画面になります
ここは所謂 docker-compose.yml に定義する link や volume、環境変数などを設定する画面になります
redis の定義では 1 つだけ設定を追加します

ネットワーク -> ホスト名

に「redis」と入力しましょう
これを設定することで別のコンテナからホスト名 redis で参照することができるようになります
admiral_docker_compose5.png

あとは「追加」すれば OK です

memo

今度は golang の Web アプリのコンテナ定義を追加します
先ほどと同様にコンテナの追加を選択しましょう
admiral_docker_compose6.png

イメージはこれを使います
該当のイメージを検索して選択しましょう
admiral_docker_compose7.png

そしてコンテナ定義の詳細設定です
まず先ほど作成した redis とリンクさせます

基本 -> リンク-> サービス

で事前に作成しておいた redis 定義を選択します
ちなみにタグですが今回のイメージに ver_golang があるのでこれを選択します
admiral_docker_compose8.png

次のコンテナホスト上で LISTEN するポートを設定します

ネットワーク -> ポートバインド

でホストポートを 80 番にしコンテナポートを 8080 番にします
Web アプリ側はホスト名の設定は不要です
admiral_docker_compose9.png

更に環境変数を設定します
今回の Web アプリは redis の URI を環境変数で設定できるので、そのための環境変数を設定します

環境 -> 環境変数

で名前に REDIS_URL を入力し値に redis://redis:6379/0 と入力します
admiral_docker_compose10.png
これで Web アプリ側の設定は完了です
「追加」で定義を作成しましょう

プロビジョニングする

tpl1 を選択すると作成した 2 つの定義があると思います
このページの右上にプロビジョニングがあるので選択してみましょう
すると作成したコンテナ定義の情報を元にクラスタ上にコンテナを作成してくれます
admiral_docker_compose11.png

動作確認

しばらくするとプロビジョニングが完了します
左メニューのコンテナを選択するとプロビジョニングしたコンテナの一覧が表示されます
admiral_agent はクラスタとして追加したホスト上に必ず作成されるコンテナになります
admiral_docker_compose12.png

memo 側のコンテナを選択するとアプリの URL にアクセスできるのでちゃんとアプリが起動しているか確認してみましょう
admiral_docker_compose13.png

ちなみに追加したクラスタ内のコンテナホストで docker ps を実行するとちゃんとコンテナが起動していることがわかります

CONTAINER ID        IMAGE                        COMMAND                  CREATED              STATUS              PORTS                     NAMES
c9be7f0cff40        kakakikikeke/memo:latest     "/bin/sh -c 'bundle …"   About a minute ago   Up About a minute   0.0.0.0:80->8080/tcp      memo-mcm410-65242387561
e4107fe01381        redis:latest                 "docker-entrypoint.s…"   4 minutes ago        Up 4 minutes        0.0.0.0:32769->6379/tcp   redis-mcm409-65242385176
cad21f08519f        vmware/admiral_agent:1.3.0   "/bin/bash /entrypoi…"   2 hours ago          Up 2 hours          0.0.0.0:32768->4200/tcp   admiral_agent

最後に

VMware Admiral で docker-compose のように複数のコンテナを一度に立ち上げて Web アプリを構築してみました
docker-compose.yml の情報を Admiral に移植するだけなので、すでに docker-compose で動作するものがあれば簡単に Admiral 上で動かすことができると思います

Admiral ではイメージのビルドまでは行えないので作成したイメージは今回のように事前に Dockerhub で公開しておきましょう

いきなりこっちで docker-compose の定義を作成することも可能ですが、まずは手元で docker-compose.yml を作成して Admiral に移植すると良いと思います

Admiral を使うメリットしては

  • コンテナがダウンしたときに自動で新しいコンテナを作成してくれる
  • 最低起動コンテナ数を指定することができ、その数までは自動でスケールアウトしてくれる
  • コンテナホストを追加すれば swarm のようなクラスタが簡単に組める

あたりかなと思います

0 件のコメント:

コメントを投稿