Dockerを使用しFastAPIプロジェクトをデプロイする

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のプロジェクトがデプロイされていることが確認できました。

 

コメント

タイトルとURLをコピーしました