概要
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 でのリモートコントロールを有効にしました
追加するには左メニューから
インフラストラクチャ -> クラスタ -> 新規
から追加できます
テンプレートの登録
とりあえず空のテンプレートを作成しましょう
左メニューから
ライブラリ -> テンプレート -> テンプレートの作成
で好きな名前を入力しましょう
とりあえずこれで作成できれば OK です
コンテナ定義の追加
テンプレートが作成できたらその中にコンテナ定義を追加していきましょう
docker-compose 的なことがしたいのでコンテナ定義はそれぞれのコンテナ分作成します
そして今回は redis + golang で書かれた Web アプリを作成したいと思います
redis
まずは redis イメージを使ってコンテナ定義を追加します
作成したテンプレート tpl1 を選択して「コンテナ追加」を選択しましょう
次のイメージの選択です
Admiral ではデフォルトで DockerHub で公開されているイメージを検索することができます
「redis」で検索すると公式の redis イメージが表示されるのでそれを選択しましょう
すると更にコンテナ定義の詳細を設定する画面になります
ここは所謂 docker-compose.yml に定義する link や volume、環境変数などを設定する画面になります
redis の定義では 1 つだけ設定を追加します
ネットワーク -> ホスト名
に「redis」と入力しましょう
これを設定することで別のコンテナからホスト名 redis で参照することができるようになります
あとは「追加」すれば OK です
memo
今度は golang の Web アプリのコンテナ定義を追加します
先ほどと同様にコンテナの追加を選択しましょう
イメージはこれを使います
該当のイメージを検索して選択しましょう
そしてコンテナ定義の詳細設定です
まず先ほど作成した redis とリンクさせます
基本 -> リンク-> サービス
で事前に作成しておいた redis 定義を選択します
ちなみにタグですが今回のイメージに ver_golang があるのでこれを選択します
次のコンテナホスト上で LISTEN するポートを設定します
ネットワーク -> ポートバインド
でホストポートを 80 番にしコンテナポートを 8080 番にします
Web アプリ側はホスト名の設定は不要です
更に環境変数を設定します
今回の Web アプリは redis の URI を環境変数で設定できるので、そのための環境変数を設定します
環境 -> 環境変数
で名前に REDIS_URL
を入力し値に redis://redis:6379/0
と入力します
これで Web アプリ側の設定は完了です
「追加」で定義を作成しましょう
プロビジョニングする
tpl1 を選択すると作成した 2 つの定義があると思います
このページの右上にプロビジョニングがあるので選択してみましょう
すると作成したコンテナ定義の情報を元にクラスタ上にコンテナを作成してくれます
動作確認
しばらくするとプロビジョニングが完了します
左メニューのコンテナを選択するとプロビジョニングしたコンテナの一覧が表示されます
admiral_agent はクラスタとして追加したホスト上に必ず作成されるコンテナになります
memo 側のコンテナを選択するとアプリの URL にアクセスできるのでちゃんとアプリが起動しているか確認してみましょう
ちなみに追加したクラスタ内のコンテナホストで 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 件のコメント:
コメントを投稿