はじめに
備忘録です。
Dockerは知っている前提なので、詳しい説明は省きます
構成
app
- main.py
- Dockerfile
.env
requirements.txt
docker-compose.yml
Dockerfile
FROM python:3.9-buster
WORKDIR /app
COPY ./requirements.txt .
RUN pip install --upgrade pip
RUN pip install --no-cache-dir -r requirements.txt
COPY ./app .
CMD ["uvicorn", "main:app", "--reload", "--host", "0.0.0.0", "--port", "8000"]
docker-compose.yml
version: "3.8"
services:
app:
build:
context: ./
dockerfile: ./app/Dockerfile
env_file: ./.env
tty: true
volumes:
- ./app:/app
ports:
- "8000:8000"
environment:
- TZ=Asia/Tokyo
ちょっとだけ説明
Dockerfileではrequirements.txtに列挙したmoduleをインストールするようにしています。
pythonではpackage.jsonのようなものがないので、このような方法で代用します
requirements.txt
fastapi
uvicorn
pydantic
typing
チームメンバーに共有する時は下記のようにしてください
立ち上げたコンテナ内で $ pip freeze > requirements.txt (依存も含めて使用しているmoduleを出力)
出力されたファイルの内容でrequirementsを上書きして共有する
hostの設定
Dockerfileでhostを0.0.0.0にしています
デフォルトではlocalhostで立ち上げてしまいます
なので下記のようにFastAPIのお馴染みのコマンドで立ち上げるとymlのportsを指定していてもdocker内部からしかアクセスできなくなります
uvicorn main:app --reload