cygnus-common docker¶
コンテンツ :
始める前に¶
Docker がインストールされ、実行されている必要があります。[公式スタートガイド]((https://docs.docker.com/linux/started/)をチェックしてください。
イメージを取得¶
ソースからのビルド¶
fiware-cygnus
リポジトリをクローンすることから始めます :
$ git clone https://github.com/telefonicaid/fiware-cygnus.git
ディレクトリを変更 :
$ cd fiware-cygnus/docker/cygnus-common
次のコマンドを実行 :
$ docker build -t cygnus-common .
しばらく時間がかかることがあります、完了したら、Docker で利用可能なイメージを確認するには、次のように入力します :
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
cygnus-common latest 0d2e537ac922 41 minutes ago 673.8 MB
centos 6 61bf77ab8841 6 weeks ago 228.9 MB
Docker Hub イメージの使用¶
最初からイメージを作成する代わりに、hub.docker.com からイメージをダウンロードすることができます :
$ docker pull fiware/cygnus-common
上記と同じ方法でリストすることができます :
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
cygnus-common latest 0d2e537ac922 41 minutes ago 673.8 MB
centos 6 61bf77ab8841 6 weeks ago 228.9 MB
イメージを使用¶
そのまま¶
cygnus-common のイメージ (最初から作成したもの、hub.docker.comからダウンロードしたもの)は、INFO レベルでメッセージを記録する Cygnus エージェントを実行することができます。これは、デフォルトのエージェント設定が logger-sink を実行しているためです。
ターミナルで次のように入力してこのイメージのコンテナを開始します :
$ docker run cygnus-common
直後に、cygnus-common ロギングトレースを見られるでしょう:
+ exec /usr/lib/jvm/java-1.7.0/bin/java -Xmx20m -Dflume.root.logger=INFO,console -cp '/opt/apache-flume/conf:/opt/apache-flume/lib/*:/opt/apache-flume/plugins.d/cygnus/lib/*:/opt/apache-flume/plugins.d/cygnus/libext/*' -Djava.library.path= com.telefonica.iot.cygnus.nodes.CygnusApplication -f /opt/apache-flume/conf/agent.conf -n cygnus-common
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/apache-flume/lib/slf4j-log4j12-1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/apache-flume/plugins.d/cygnus/libext/cygnus-common-1.0.0_SNAPSHOT-jar-with-dependencies.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
time=2016-05-17T06:36:23.867UTC | lvl=INFO | corr= | trans= | srv= | subsrv= | function=main | comp= | msg=com.telefonica.iot.cygnus.nodes.CygnusApplication[166] : Starting Cygnus, version 1.0.0_SNAPSHOT.d7cfee4455a59a1854cc53f37e16ff4866b26010
...
...
time=2016-05-17T06:36:25.046UTC | lvl=INFO | corr= | trans= | srv= | subsrv= | function=main | comp=cygnus-common | msg=com.telefonica.iot.cygnus.nodes.CygnusApplication[286] : Starting a Jetty server listening on port 8081 (Management Interface)
2番目のターミナルのシェルで、実行中のコンテナをチェックすることができます :
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c88bc1b66cdc cygnus-common "/cygnus-entrypoint. 6 seconds ago Up 5 seconds 5050/tcp, 8081/tcp naughty_mayer
上のコンテナの IP アドレスを確認するには、次のようにします :
$ docker inspect c88bc1b66cdc | grep \"IPAddress\"
"IPAddress": "172.17.0.8",
2番目のターミナルのシェルで、コンテナの IP アドレスが取得されたら、Cygnus のバージョンを確認します :
$ curl "http://172.17.0.8:8081/v1/version"
{"success":"true","version":"1.0.0_SNAPSHOT.d7cfee4455a59a1854cc53f37e16ff4866b26010"}
API メソッドを使用しても、cygnus-common が INFO レベルでログを出力する方法を知ることができます。
$ curl -X POST "http://172.17.0.7:8081/v1/subscriptions?ngsi_version=2" -d '{"subscription":{"description": "title_of_subscription","subject": {"entities": [{"idPattern": ".*","type": "Room"}],"condition": {"attrs": ["attr1"],"expression": {"q": "attr1>40"}}},"notification": {"http": {"url": "http://localhost:1234"},"attrs": ["attr1","attr2"]},"expires": "2016-05-05T14:00:00.00Z","throttling": 5}, "endpoint":{"host":"orion_host", "port":"orion_port", "ssl":"false", "xauthtoken":"your_auth_token"}}'
{"success":"true","result" : { SubscriptionID = 573ac3b6aba73680b1905f5c}
cygnus-common のターミナルにで次のような内容が出力されます :
time=2016-05-17T07:09:40.956UTC | lvl=INFO | corr= | trans= | srv= | subsrv= | function=handle | comp=cygnus-common | msg=com.telefonica.iot.cygnus.management.ManagementInterface[131] : Management interface request. Method: POST, URI: /v1/subscriptions
time=2016-05-17T07:09:41.343UTC | lvl=INFO | corr=dfca71a9-41f1-4f98-8fa8-4f15612a72db | trans=dfca71a9-41f1-4f98-8fa8-4f15612a72db | srv= | subsrv= | function=<init> | comp=cygnus-common | msg=com.telefonica.iot.cygnus.backends.http.HttpClientFactory[79] : Setting max total connections (500)
time=2016-05-17T07:09:41.343UTC | lvl=INFO | corr=dfca71a9-41f1-4f98-8fa8-4f15612a72db | trans=dfca71a9-41f1-4f98-8fa8-4f15612a72db | srv= | subsrv= | function=<init> | comp=cygnus-common | msg=com.telefonica.iot.cygnus.backends.http.HttpClientFactory[80] : Setting default max connections per route (100)
コンテナを次のようにして停止できます :
$ docker stop c88bc1b66cdc
c88bc1b66cdc
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
特定の構成の使用¶
上記のように、イメージと共に配布されるデフォルトの設定は、テストに適していない特定の値が設定されています。具体的には :
- ロギングレベルは
INFO
です - ロギングアペンダは
console
です
適切な値で上記の値を変更する必要があるかもしれません。
Docker ファイルの編集¶
最も簡単な方法は、docker/cygnus-common
下の Dockerfile
および/または agent.conf
の両方を編集することで、最初から cygnus-common のイメージを構築します。
docker イメージを完全に制御できます。
環境変数¶
環境変数に関連付けられたこれらのパラメータは、-e
オプションを使用してコマンドラインで簡単に上書きすることができます。たとえば、log4j ロギング・レベルを変更する場合は、次のコマンドを実行します :
$ docker run -e LOG_LEVEL='DEBUG' cygnus-common
ボリュームの使用¶
もう1つの可能性は、ボリューム(-v
オプション)を持つコンテナを起動し、そのコンテナ内のコンフィギュレーション・ファイル全体をファイルのローカル・バージョンでマップすることです :
$ docker run -v /absolute/path/to/local/agent.conf:/opt/apache-flume/conf/agent.conf cygnus-common-1
もちろん、ボリュームと環境変数を組み合わせて上書きすることもできます :
$ docker run -v /absolute/path/to/local/agent.conf:/opt/apache-flume/conf/agent.conf -e LOG_LEVEL='DEBUG' cygnus-common