Dockerを使用しFastAPIプロジェクトをデプロイしてみます。
■PC環境
Windows 10
Docker version 20.10.12, build e91ed57
Docker desktop version 4.4.2
■プロジェクトのディレクトリを作成する
Dockerを使用しFastAPIプロジェクトをデプロイしてみますので、その前にプロジェクトのディレクトリを作成します。
今回は「C:\Users\user_」内に「FASTAPI_V2」というディレクトリを作成します。さらに「FASTAPI_V2」ディレクトリ内に「app」というディレクトリも作成します。
「app」というディレクトリに「main.py」というファイルを作成します。
■コード
from fastapi import FastAPI app = FastAPI() @app.get("/") def index(): return {"タイトル:":"こんにちは、世界!"}
作成後、コードエディタを開き、上記のコードを記述し保存します。
保存後、「C:\Users\user_」内に「FASTAPI_V2」ディレクトリに戻り、「Dockerfile」を作成します。
■コード
FROM python:3.7 RUN pip3 install fastapi uvicorn COPY ./app /app CMD ["uvicorn","app.main:app","--host","0.0.0.0","--port","15400"]
作成後、コードエディタを開き、上記のコードを記述し保存します。これでDockerイメージが作成されます。
保存後、再び「C:\Users\user_」内に「FASTAPI_V2」ディレクトリに戻り、「docker-compose.yml」を作成します。
■コード
version: '3' services: core_api: build: . container_name: "core-api-container" ports: - "8000:15400" volumes: - ./app/:/app
作成後、コードエディタを開き、上記のコードを記述し保存します。
C:\Users\user_>cd FASTAPI_V2
保存後、コマンドプロンプトを起動し、上記のコマンドを入力し、Enterキーを押します。「FASTAPI_V2」ディレクトリ内に移動します。
>docker-compose up -d
移動後、上記のコマンドを入力し、Enterキーを押します。コンテナのビルドから開始します。オプション「-d」でバックグランドで実行されます。
Creating network "fastapi_v2_default" with the default driver Building core_api [+] Building 225.8s (8/8) FINISHED => [internal] load build definition from Dockerfile 5.6s => => transferring dockerfile: 175B 0.4s => [internal] load .dockerignore 4.8s => => transferring context: 2B 0.2s => [internal] load metadata for docker.io/library/python:3.7 6.8s => [1/3] FROM docker.io/library/python:3.7@sha256:a1e93b18719d1b581a4f0625cf4ea4ec790855b160afd1dd7469fcaecd94 196.5s => => resolve docker.io/library/python:3.7@sha256:a1e93b18719d1b581a4f0625cf4ea4ec790855b160afd1dd7469fcaecd94aa 0.0s => => sha256:a1e93b18719d1b581a4f0625cf4ea4ec790855b160afd1dd7469fcaecd94aa55 1.86kB / 1.86kB 0.0s => => sha256:967757d5652770cfa81b6cc7577d65e06d336173da116d1fb5b2d349d5d44127 5.16MB / 5.16MB 22.9s => => sha256:c357e2c68cb3bf1e98dcb3eb6ceb16837253db71535921d6993c594588bffe04 10.87MB / 10.87MB 27.5s => => sha256:0827a5451746929d077de6f275c61cffffdec172af2220bb05cb3e0eb8e6efce 2.22kB / 2.22kB 0.0s => => sha256:7c891de3e2203aa107263daf8adeacb43cc10b1103b97b666fd30efb781a04e4 9.20kB / 9.20kB 0.0s => => sha256:6aefca2dc61dcbcd268b8a9861e552f9cdb69e57242faec64ac120d2355a9c1a 54.94MB / 54.94MB 42.5s => => sha256:c766e27afb21eddf9ab3e4349700ebe697c32a4c6ada6af4f08282277a291a28 54.58MB / 54.58MB 83.8s => => sha256:32a180f5cf85702e7680719c40c39c07972b1176355df5a621de9eb87ad07ce2 196.70MB / 196.70MB 148.2s => => sha256:1535e3c1181a81ea66d5bacb16564e4da2ba96304506598be39afe9c82b21c5c 6.29MB / 6.29MB 62.7s => => extracting sha256:6aefca2dc61dcbcd268b8a9861e552f9cdb69e57242faec64ac120d2355a9c1a 5.0s => => extracting sha256:967757d5652770cfa81b6cc7577d65e06d336173da116d1fb5b2d349d5d44127 0.5s => => extracting sha256:c357e2c68cb3bf1e98dcb3eb6ceb16837253db71535921d6993c594588bffe04 0.7s => => sha256:8ae21bbc51925b5cdcfea1665de073524cfff64ed8f221bd03955c5bb3d7e2e9 15.48MB / 15.48MB 94.0s => => sha256:7d9c83d514b05ab8f6fa3e5128313a52b71e63a395f7097f28cf4131d4045a7e 232B / 232B 88.2s => => extracting sha256:c766e27afb21eddf9ab3e4349700ebe697c32a4c6ada6af4f08282277a291a28 8.9s => => sha256:52e9a986c056fba2c2222312026992ca7809b9b3e515eeea4cf752978d9bd9fb 2.87MB / 2.87MB 91.7s => => extracting sha256:32a180f5cf85702e7680719c40c39c07972b1176355df5a621de9eb87ad07ce2 40.2s => => extracting sha256:1535e3c1181a81ea66d5bacb16564e4da2ba96304506598be39afe9c82b21c5c 0.5s => => extracting sha256:8ae21bbc51925b5cdcfea1665de073524cfff64ed8f221bd03955c5bb3d7e2e9 1.7s => => extracting sha256:7d9c83d514b05ab8f6fa3e5128313a52b71e63a395f7097f28cf4131d4045a7e 0.0s => => extracting sha256:52e9a986c056fba2c2222312026992ca7809b9b3e515eeea4cf752978d9bd9fb 4.2s => [internal] load build context 0.1s => => transferring context: 204B 0.0s => [2/3] RUN pip3 install fastapi uvicorn 16.4s => [3/3] COPY ./app /app 0.1s => exporting to image 0.7s => => exporting layers 0.6s => => writing image sha256:cbfe5701b5b2a640b760562ef159ab3d84a6a668c605561c5b2fc0b093ff009f 0.0s => => naming to docker.io/library/fastapi_v2_core_api 0.0s Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them WARNING: Image for service core_api was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`. Creating core-api-container
Enterキーを押すと、上記のようなメッセージが出力され、「Creating core-api-container … done」と出力されれば、コンテナーの生成が完了となります。
> docker ps
完了後、上記のコマンドを入力し、Enterキーを押します。コンテナーの一覧を表示します。
Enterキーを押すと、コンテナーの一覧が表示され、先程作成したコンテナーが表示されます。
この状態でWebブラウザを起動し、アドレスバーに「http://localhost:8000」と入力しアクセスします。
アクセスすると、今回作成したFastAPIのプロジェクトがデプロイされていることが確認できました。
コメント