以前はPoetry派でしたが
最近UV
を使うことになったのでDockerfile
を更新したいと思います。
# Pythonをインストール
FROM python:3.12-slim
# ワークディレクトリパスを指定
WORKDIR /app
# UVをインストールに必要なライブラリをインストール
RUN apt-get update -y \
&& apt-get install -y curl ca-certificates \
&& apt-get -y clean all
# UVのインストール
ADD https://astral.sh/uv/install.sh /uv-installer.sh
RUN sh /uv-installer.sh && rm /uv-installer.sh
# UVを使用するに必要なパスを通す
ENV PATH="/root/.cargo/bin/:$PATH"
# プロジェクトの主要ファイルをコンテナにコピー
COPY README.md uv.lock pyproject.toml /app/
# UV用環境変数の設定
ENV UV_SYSTEM_PYTHON=true \
UV_COMPILE_BYTCODE=1 \
UV_CAHE_DIR=/root/.cache/uv \
UV_LINK_MODE=copy
# アプリソースコードをコピー
COPY ./src/app /app
# アプリが使うパッケージをインストール
RUN uv export --frozen --no-dev --format requirements-txt > requirements.txt \
&& uv pip install -r requirements.txt
# 外部からアクセスのためポートを開く
EXPOSE 80
また、下記のようなdocker-compose.yml
にてコンテナーを作成します。
今回はFastAPI
を使用したアプリを作っているのでuvicorn
を使用しサーバーを立ち上げます。
version: "3"
services:
app:
build: .
ports:
- "4000:80"
env_file: ./.env
command: uv run uvicorn app:app --host 0.0.0.0 --port 80 --reload
tty: true
docker-compose up --build
を実行するとhttp://0.0.0.0:4000
からアプリへアクセスできるようになります。
以上!