DockerでIDCFクラウドのCLIを実行する

Dockerコンテナ上でCLIを実行するデザインパターンを以前調べましたが、今回はIDCFクラウドのCLIのイメージを作ってみます。virtuanemvで仮想環境を用意しても良いのですが、Dockerイメージでコマンドを配布するとホストマシンの環境を汚さずにお試しで実行できます。CLIの配布形式としてもDockerイメージは便利に使えます。

プロジェクト

今回作成したリポジトリはこちらです。

Dockerfile

ベースイメージはオフィシャルのPythonの2.7 ONBUILDを使います。ONBUILDでビルドに必要な処理をするためDockerfileはとても簡単です。

Dockerfile
FROM python:2-onbuild

requirements.txt

IDCFのリポジトリにはrequirements.txtが同梱されていません。依存するパッケージの追加と、cloudstack-apiもGitHub経由でインストールするように定義します。

requirements.txt
httplib2
simplejson
argparse
prettytable==0.5
parsedatetime==0.8.7
lxml
-e git+https://github.com/idcf/cloudstack-api#egg=cloudstack-api

ONBUILDのベースイメージがrequirements.txtファイルのCOPYとpip installをしてくれます。

Dockerfile
FROM python:2.7
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
ONBUILD COPY requirements.txt /usr/src/app/
ONBUILD RUN pip install --no-cache-dir -r requirements.txt
ONBUILD COPY . /usr/src/app

docker-compose.yml

IDCFクラウドコンソールのAPI Keyから環境変数を設定します。

  • IDCF_COMPUTE_HOST: エンドポイント
  • IDCF_COMPUTE_API_KEY: API Key
  • IDCF_COMPUTE_SECRET_KEY: Secret Key
docker-compose.yml
idcfcli:
build: .
volumes:
- /etc/localtime:/etc/localtime:ro
environment:
- IDCF_COMPUTE_HOST=
- IDCF_COMPUTE_API_KEY=
- IDCF_COMPUTE_SECRET_KEY=
command: ["/usr/local/bin/cloudstack-api","listVirtualMachines","-t=id,name,state"]

使い方

リポジトリからgit cloneします。docker-compose.yml.defaultをdocker-compose.ymlにリネームして環境変数を設定します。

$ git clone https://github.com/masato/docker-idcfcli.git idcfcli
$ cd idcfcli
$ mv docker-compose.yml.default docker-compose.yml
$ vi docker-compose.yml

Docker Composeからコンテナを起動します。デフォルトのコマンドはlistVirtualMachinesを実行しています。

$ docker-compose build
$ docker-compose run --rm idcfcli
+--------------------------------------+------+---------+
| id | name | state |
+--------------------------------------+------+---------+
| xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | seed | Running |
+--------------------------------------+------+---------+

任意のコマンドは以下のように実行します。

$ docker-compose run --rm idcfcli cloudstack-api listVirtualMachines -t=id,name,state
+--------------------------------------+------+---------+
| id | name | state |
+--------------------------------------+------+---------+
| xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | seed | Running |
+--------------------------------------+------+---------+

エイリアスの作成

~/.bashrcなどにエイリアスを定義しておきます。

~/.bashrc
alias idcf-cli='docker-compose run --rm idcfcli cloudstack-api'

エイリアスを使うとよりCLIらしくなります。

$ idcf-cli listVirtualMachines -t=id,name,state
+--------------------------------------+------+---------+
| id | name | state |
+--------------------------------------+------+---------+
| xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | seed | Running |
+--------------------------------------+------+---------+