Halcyon Days

海のように穏やかに生きたい

Dockerコンテナ上にFlask API用のサーバーを立てる

やりたいこと

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が実行されていることがわかる。

参照ドキュメント

scrawledtechblog.com