だいぶ体調が戻ってきたのでショロカレを続ける…ということで、これは「初老丸の独り Advent calendar 2015」の九日目の記事です。
tl;dr
Docker コンテナ内でちょっとしたアプリ(スクリプト)を立ちあげたかったので、以下の記事を参考に Supervisord を使ったのでメモ。
memo
作ったもの
S3 の Event 通知が SQS に入るように設定しているので、その通知を解析して S3 に保存されているログを取得して Elasticsearch にポストするスクリプト。詳細については別の記事で。
Dockerfile
$ cat Dockerfile FROM python:2 MAINTAINER inokappa RUN mkdir /app ADD requirements.txt /app ADD app.py /app ADD supervisord.conf /app RUN pip install -r /app/requirements.txt CMD [ "/usr/local/bin/supervisord", "-c", "/app/supervisord.conf" ]
supervisord.conf
以下を参考に…
以下のように作成。
$ cat supervisord.conf [inet_http_server] port=127.0.0.1:9001 [rpcinterface:supervisor] supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface [supervisorctl] serverurl=http://127.0.0.1:9001 [supervisord] nodaemon=true [program:app] command=/usr/local/bin/python /app/app.py stdout_logfile=/app/app.log stdout_logfile_maxbytes=1MB stdout_logfile_backups=5 stdout_capture_maxbytes=1MB redirect_stderr=true
requirements.txt
必要なモジュールは requirements.txt に書いておくと良いことを最近知った。
$ cat requirements.txt boto3 elasticsearch pytz urllib3 supervisor
docker run すると…
docker run
にオプションをたくさんくっつける時には Makefile にまとめておくのが最近の個人的なトレンド。
$ make run
でコンテナが起動する(ようにしている)。
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ecf226637831 s3-access-log "/usr/local/bin/super" 4 hours ago Up 4 hours s3-access-log
supervisorctl で確認する。
$ docker exec s3-access-log /usr/local/bin/supervisorctl -c /app/supervisord.conf status app RUNNING pid 8, uptime 0:02:01
標準出力の内容を確認する。
$ docker exec s3-access-log /usr/local/bin/supervisorctl -c /app/supervisord.conf tail app -12-10 20:41:19,290 INFO Event does not exists... 2015-12-10 20:41:19,291 INFO Start polling... 2015-12-10 20:42:19,347 INFO Calling sqs:get_queue_url with {'QueueName': 's3-notification'} 2015-12-10 20:42:19,460 INFO Calling sqs:receive_message with {u'QueueUrl': 'https://ap-northeast-1.queue.amazonaws.com/xxxxxxxxxxxxx/s3-notification', 'MessageAttributeNames': ['*']} 2015-12-10 20:42:19,542 INFO Event does not exists... 2015-12-10 20:42:19,542 INFO Start polling... 2015-12-10 20:43:19,595 INFO Calling sqs:get_queue_url with {'QueueName': 's3-notification'} 2015-12-10 20:43:19,637 INFO Calling sqs:receive_message with {u'QueueUrl': 'https://ap-northeast-1.queue.amazonaws.com/xxxxxxxxxxxxx/s3-notification', 'MessageAttributeNames': ['*']} 2015-12-10 20:43:19,718 INFO Event does not exists... 2015-12-10 20:43:19,718 INFO Start polling... 2015-12-10 20:44:19,780 INFO Calling sqs:get_queue_url with {'QueueName': 's3-notification'} 2015-12-10 20:44:19,824 INFO Calling sqs:receive_message with {u'QueueUrl': 'https://ap-northeast-1.queue.amazonaws.com/xxxxxxxxxxxxx/s3-notification', 'MessageAttributeNames': ['*']} 2015-12-10 20:44:19,905 INFO Event does not exists... 2015-12-10 20:44:19,905 INFO Start polling... 2015-12-10 20:45:19,966 INFO Calling sqs:get_queue_url with {'QueueName': 's3-notification'} 2015-12-10 20:45:20,000 INFO Calling sqs:receive_message with {u'QueueUrl': 'https://ap-northeast-1.queue.amazonaws.com/xxxxxxxxxxxxx/s3-notification', 'MessageAttributeNames': ['*']} 2015-12-10 20:45:20,084 INFO Event does not exists... 2015-12-10 20:45:20,084 INFO Start polling...
おお、いい感じ。
ということで
Supervisord を引き続き、便利に使っていきたい。
元記事はこちら
「(ショロカレ 9 日目)Docker コンテナ内でちょっとしたアプリを立ち上げるのに Supervisord を使う」