StackStormをDockerで起動する手順です。
ただ、現状Workaroundになっており、今後はもっと手順が簡単になると思われます。
そのworkaround手順を含めた暫定的なリポジトリを公開します。使い方はREADME.md
をご覧ください。
また、公式に加えてst2web(GUI版)を起動するようにしています。
これ以降の手順は、公式リポジトリを利用する場合の手順になります。
ポイントは1つ、「急いでdocker-compose up
するな」ということだけです。
実際に以下をcloneしてから使います。ただ、ここのREADME
の手順には従わないでください。
現状では、以下の流れに従ってやっていけば大丈夫です。
手順
ベースイメージを作る
StackStormは様々なコンポーネントに分かれていますが、それらは全てベースとなるst2
というコンテナを元にして、単に環境変数で振る舞いを変えているに過ぎません。
まずは、このst2
コンテナを作ります。
上記リポジトリのREADME
にいろいろ書いてありますが、惑わされてはいけません。その通りにやると動きません。
以下のようにします。
$ docker build --build-arg ST2_VERSION="1.6.0-5" --build-arg ST2_REPO="staging-stable" -t st2 stackstorm/
ポイントは、ST2_REPO="staging-stable"
を与えているところです。上記リポジトリREADME
だとそれを指定していませんが、指定しないと別のところにパッケージを取りに行って死にます。
$ docker build --build-arg ST2_VERSION="1.6.0-5" -t st2 stackstorm/
(snip)
Step 8 : ADD ${ST2_PACKAGE} /tmp/st2_${ST2_VERSION}_amd64.deb
Got HTTP status code >= 400: 404 Not Found
また、それすらやらずにここでいきなりdocker-compose up
とかやると、まず死にます。
$ docker-compose up
Building data
Step 1 : FROM st2
Pulling repository docker.io/library/st2
ERROR: Service 'data' failed to build: Error: image library/st2:latest not found
各コンポーネント用のコンテナを作る
この後に即docker-compose up
をやると、各コンテナはhub側に取りに行ってしまいます。
そこで、まずbuildして各コンポーネント用のイメージを作ります。
CONTAINERS="st2actionrunner st2api st2auth st2stream st2exporter st2notifier st2resultstracker st2rulesengine st2sensorcontainer st2garbagecollector"
for container in `echo $CONTAINERS`; do
docker build -t stackstorm/${container}:latest ${container}
done
要はぐるぐる回しているだけです。
これをやらずにdocker-compose up
すると、別の所にイメージを取りに行き、結果的にapi
コンテナが起動しません。
api_1 | /etc/st2/st2.conf: FAILED
api_1 | md5sum: WARNING: 1 computed checksum did NOT match
api_1 | /opt/stackstorm/st2/bin/python: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.15' not found (required by /opt/stackstorm/st2/bin/python)
api_1 | /opt/stackstorm/st2/bin/python: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.14' not found (required by /opt/stackstorm/st2/bin/python)
起動する
ここまでくれば、あとは起動します。
$ docker-compose up -d
$ docker-compose ps
Name Command State Ports
---------------------------------------------------------------------------------------------------------------------
st2dockerfiles_actionrunner_1 /entrypoint.sh Up
st2dockerfiles_api_1 /entrypoint.sh Up 9101/tcp
st2dockerfiles_auth_1 /entrypoint.sh Up 9100/tcp
st2dockerfiles_client_1 /entrypoint.sh st2 Exit 2
st2dockerfiles_data_1 /entrypoint.sh /bin/sh -c ... Exit 0
st2dockerfiles_exporter_1 /entrypoint.sh Exit 1
st2dockerfiles_garbagecollector_1 /entrypoint.sh Up
st2dockerfiles_mongo_1 /entrypoint.sh mongod Up 27017/tcp
st2dockerfiles_notifier_1 /entrypoint.sh Up
st2dockerfiles_rabbitmq_1 docker-entrypoint.sh rabbi ... Up 25672/tcp, 4369/tcp, 5671/tcp, 5672/tcp
st2dockerfiles_resultstracker_1 /entrypoint.sh Up
st2dockerfiles_rulesengine_1 /entrypoint.sh Up
st2dockerfiles_sensorcontainer_1 /entrypoint.sh Up
st2dockerfiles_stream_1 /entrypoint.sh Exit 1
概ね上記のようになっているはずです。幾つか落ちているものもありますが、問題ないものもあります。
-
data
: 初回起動時にデータを登録するためだけのコンテナです。一度登録したらいらないので、exit 0
で問題ありません。 -
client
: この後、StackStormに対してコマンドを実行するためのコンテナです。コマンドは実行したら結果が返ってきて終了となるので、普段は落ちていても問題ありません。 -
stream
とexporter
: なんでしょう…これ…
StackStormを使う
あとはclient
コンテナに対してst2コマンドを発行すれば、好きなように遊ぶことができます。
$ docker-compose run client st2 action list --pack=core
Starting st2dockerfiles_data_1
+-------------------+------+-------------------------------------------------------------------+
| ref | pack | description |
+-------------------+------+-------------------------------------------------------------------+
| core.announcement | core | Action that broadcasts the announcement to all stream consumers. |
| core.http | core | Action that performs an http request. |
| core.local | core | Action that executes an arbitrary Linux command on the localhost. |
| core.local_sudo | core | Action that executes an arbitrary Linux command on the localhost. |
| core.noop | core | Action that does nothing |
| core.remote | core | Action to execute arbitrary linux command remotely. |
| core.remote_sudo | core | Action to execute arbitrary linux command remotely. |
| core.sendmail | core | This sends an email |
| core.windows_cmd | core | Action to execute arbitrary Windows command remotely. |
+-------------------+------+-------------------------------------------------------------------+
注意
WebUIはありません。以下の途中にもありますが、別途そのようなコンテナを作る必要があります。