Dockerコンテナ上でCLIを実行するデザインパターンを以前調べましたが、今回はIDCFクラウドのCLIのイメージを作ってみます。virtuanemvで仮想環境を用意しても良いのですが、Dockerイメージでコマンドを配布するとホストマシンの環境を汚さずにお試しで実行できます。CLIの配布形式としてもDockerイメージは便利に使えます。
プロジェクト
今回作成したリポジトリはこちらです。
Dockerfile
ベースイメージはオフィシャルのPythonの2.7 ONBUILDを使います。ONBUILDでビルドに必要な処理をするためDockerfileはとても簡単です。
requirements.txt
IDCFのリポジトリにはrequirements.txtが同梱されていません。依存するパッケージの追加と、cloudstack-apiもGitHub経由でインストールするように定義します。
requirements.txthttplib2 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
をしてくれます。
DockerfileFROM 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.ymlidcfcli: 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
などにエイリアスを定義しておきます。
~/.bashrcalias 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 | +--------------------------------------+------+---------+
|