# Dockerを使用したデプロイ このセクションでは以下の使い方の紹介とガイドへのリンクが確認できます: * **5分**程度で、**FastAPI** のアプリケーションを、パフォーマンスを最大限に発揮するDockerイメージ (コンテナ)にする。 * (オプション) 開発者として必要な範囲でHTTPSを理解する。 * **20分**程度で、自動的なHTTPS生成とともにDockerのSwarmモード クラスタをセットアップする (月5ドルのシンプルなサーバー上で)。 * **10分**程度で、DockerのSwarmモード クラスタを使って、HTTPSなどを使用した完全な**FastAPI** アプリケーションの作成とデプロイ。 デプロイのために、**Docker** を利用できます。セキュリティ、再現性、開発のシンプルさなどに利点があります。 Dockerを使う場合、公式のDockerイメージが利用できます: ## tiangolo/uvicorn-gunicorn-fastapi このイメージは「自動チューニング」機構を含んでいます。犠牲を払うことなく、ただコードを加えるだけで自動的に高パフォーマンスを実現できます。 ただし、環境変数や設定ファイルを使って全ての設定の変更や更新を行えます。 !!! tip "豆知識" 全ての設定とオプションを確認するには、Dockerイメージページを開いて下さい: tiangolo/uvicorn-gunicorn-fastapi. ## `Dockerfile` の作成 * プロジェクトディレクトリへ移動。 * 以下の`Dockerfile` を作成: ```Dockerfile FROM tiangolo/uvicorn-gunicorn-fastapi:python3.7 COPY ./app /app ``` ### より大きなアプリケーション [Bigger Applications with Multiple Files](tutorial/bigger-applications.md){.internal-link target=_blank} セクションに倣う場合は、`Dockerfile` は上記の代わりに、以下の様になるかもしれません: ```Dockerfile FROM tiangolo/uvicorn-gunicorn-fastapi:python3.7 COPY ./app /app/app ``` ### Raspberry Piなどのアーキテクチャ Raspberry Pi (ARMプロセッサ搭載)やそれ以外のアーキテクチャでDockerが作動している場合、(マルチアーキテクチャである) Pythonベースイメージを使って、一から`Dockerfile`を作成し、Uvicornを単体で使用できます。 この場合、`Dockerfile` は以下の様になるかもしれません: ```Dockerfile FROM python:3.7 RUN pip install fastapi uvicorn EXPOSE 80 COPY ./app /app CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"] ``` ## **FastAPI** コードの作成 * `app` ディレクトリを作成し、移動。 * 以下の`main.py` ファイルを作成: ```Python from typing import Optional from fastapi import FastAPI app = FastAPI() @app.get("/") def read_root(): return {"Hello": "World"} @app.get("/items/{item_id}") def read_item(item_id: int, q: Optional[str] = None): return {"item_id": item_id, "q": q} ``` * ここでは、以下の様なディレクトリ構造になっているはずです: ``` . ├── app │ └── main.py └── Dockerfile ``` ## Dockerイメージをビルド * プロジェクトディレクトリ (`app` ディレクトリを含んだ、`Dockerfile` のある場所) へ移動 * FastAPIイメージのビルド: