Elasticsearchへデータを送るFlaskサーバーを作成する必要があったので、docker-composeを使用して構築
ディレクトリ構成
fl/
├ Dockerfile
├ docker-compose.yml
└ src/
├app.py
└requirements.txt
最初にDockerfileの記載
pythonのバージョン、プロジェクトディレクトリ、必要なライブラリを記載したファイルの設定
FROM python:3.6
ARG project_dir=/projects/
ADD src/requirements.txt $project_dir
WORKDIR $project_dir
RUN pip install -r requirements.txt
次にdocker-compose.ymlを記載
portの設定とflask runのコマンドを記載
--with-thredsはマルチスレッドで動かすかどうかを設定するオプション
docker-compose.yml
version: '3'
services:
flask:
build: .
ports:
- "6000:6000"
volumes:
- "./src:/projects"
tty: true
environment:
TZ: Asia/Tokyo
command: flask run --host 0.0.0.0 --port 6000 --with-threads
requirements.txtの記載
pipでインストールするライブラリを記載
requirements.txt
flask
elasticsearch
実際のサーバーを記載
app.py
from flask import Flask, jsonify, request
from elasticsearch import Elasticsearch
from datetime import datetime
app = Flask(__name__)
# Elasticsearchのホストとポートとインデックス名
host = "192.168.xx"
port = "9200"
index_name = "XXXXX"
@app.route('/', methods=['POST']) #URLのパスを記載、またPOSTのみ許可
def insert():
data = json.loads(request.data) #flaskに投げられたデータを取得
doc = {
"location" : data["location"]
}
es = Elasticsearch(
hosts = [{'host': host, 'port' : port}]
)
res = es.index(index=index_name, body=doc)
if __name__ == '__main__':
app.run()
fl/ディレクトリに移動し、
$ docker-compose up -d --build
で起動
修正等で、一度落としたい場合は
$ docker-compose down --rmi all --volumes
でイメージ事削除可能