やりたいこと
Flaskで作成したAPIにLaravelアプリケーションからアクセスしたい。
そのためにDockerコンテナ上にFlask API用のサーバーを立てる。
イメージ
最終的にはApacheでデプロイしたLaravelアプリケーションからDockerコンテナ上のAPIにアクセスするようにしたい。
手順
こちらの記事を参考にして構築した。
【Docker × Flask】コンテナでFlask製のREST APIを実装する~基本~ | SCRAWLED TECH BLOG
project-root:. ├─api │ ├─test │ ├─__init__.py │ ├─api.py │ ├─wsgi.py │ └─__pycache__ ├─log ├─Dockerfile ├─docker-compose.yml ├─requirements.txt └─__pycache__
Dockerコンテナを作成するためのファイルを作成する
下記のファイルを作成する。
Dockerfile
FROM python:3.12 WORKDIR /code COPY requirements.txt /code RUN pip install --upgrade pip && \\ pip install -r requirements.txt
docker-compose.yml
version: "3" services: api: container_name: "api" build: context: . dockerfile: Dockerfile ports: - "5000:5000" volumes: - .:/code env_file: - .env tty: true
requirements.txt
Flask==3.0.0
インストールしたいパッケージを書く。
コンテナを作成する
下記のコマンドを叩く。
$ docker compose up -d --build
APIを作成する
コンテナを作成できたのでAPIを作成する。
記事を参考に作成させていただいた。
init.py
# Blank
wsgi.py
from api.api import api if __name__ == "__main__": api.run()
api.py
from flask import Flask, jsonify, request api = Flask(__name__) @api.route('/') def hello_world(): return 'Hello, World!'
Flaskのサーバーを起動する
下記のコマンドを叩いてサーバーを起動させる。
$ flask run --host=0.0.0.0 * Serving Flask app 'api.wsgi' * Debug mode: on WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Running on all addresses (0.0.0.0) * Running on <http://127.0.0.1:5000> * Running on <http://172.29.0.2:5000> Press CTRL+C to quit * Restarting with stat * Debugger is active! * Debugger PIN: 625-009-671
動作確認
http://127.0.0.01:5000 にアクセスするとAPIが実行されていることがわかる。
参照ドキュメント
https://scrawledtechblog.com/docker-flask-rest-api-base/scrawledtechblog.com