Magicode logo
Magicode
2

DockerでFastAPIを試してみた

はじめに

最近web側の開発をやってなかったのと、友人が勉強したいということで、web apiのサーバーを作ってみることにした。
友人のスキルセットと解析系の処理をするつもりだったのでpythonを選択し、なんとなくfast apiがいいのかなと思いfast apiでapiサーバーを立てることに。 また、共有を楽にしたかったのでDockerを用いた。

今回は、ひとまず公式のDockerイメージを動かすところまで。

なお、執筆は2022年5月だが作業は1月末に行っている。

環境

  • Windows 10
  • Docker Desktop
  • Visual Studio Code

とにかくfast apiを動かしてみる

公式ドキュメントに公開されているDockerイメージを使ったやり方がある。

Docker環境構築

Dockerの起動でいくつか躓いたのでメモ。

インストーラー をDLしてきて、インストール。。。
Error

Errorに書かれているリンク先にある対応をしてみたが、ダメだった。

BIOS のCPU設定で「Intel Virtualization Technology」を有効化することで動いた。(ものによっては「Intel VT-x」らしい)

そして、Errorのおかわり。

リンク先の「手順 4 - Linux カーネル更新プログラム パッケージをダウンロードする」実施で解決し、Dockerが動かせるようになった。

Dockerfileの作成

  • プロジェクトリポジトリに移動
  • Dockerfileを作成
FROM tiangolo/uvicorn-gunicorn-fastapi:python3.7

COPY ./app /app

FastAPiのコードの作成

  • app ディレクトリを作成し、移動。
  • main.py ファイルを作成:

このようなディレクトリ構造になっていればOK
appやmainにしたくない場合はDockerfileでCMDを書けばいいはず!

.
├── app
│   └── main.py
└── Dockerfile

Dockerイメージをビルド

$ docker build -t fastapi_image .

ちなみにdocker buildがDockerfileをもとにイメージをビルドするコマンド
https://docs.docker.jp/engine/reference/commandline/build.html
-t はtagのことでイメージに名前が付けられる。

Docker コンテナを起動

$ docker run -d --name fastapi_container -p 80:80 fastapi_image

docker runで実行している。
https://docs.docker.jp/engine/reference/commandline/run.html
--name: コンテナの名前
-p(--expose): ポートの公開と露出(コロンの左側がホストで右側がコンテナのポート)
-d: バックグランドで実行

動作確認

http://127.0.0.1/items/5?q=somequery
をブラウザで開く。

-p について補足
前項の起動コマンドでは、コンテナの80番ポートをホストの80番ポートにバインド(割り当て)をしている。
下記のように変えると、ホスト側の8080ポートとバインドされるので、urlがhttp://127.0.0.1:8080/items/5?q=somequery になる。
$ docker run -d --name fastapi_container -p 8080:80 fastapi_image
なお、ホスト側の80番ポートについてはイメージの仕様で決まっている。

終わりに

ひとまず動かすところまで。は、開発環境を整えてみます。

Discussion

コメントにはログインが必要です。