1
0

Poetryを使った環境構築とDockerコンテナのセットアップ

Posted at

Poetryを使って環境を構築し、Dockerコンテナ内でPythonアプリケーションを実行する際の手順と注意点をまとめました。

CI/CD環境やコンテナビルド時忘れがちところも自分用メモとして記入しましたが参考になれば幸いです。

1. 開発フェーズでのpyproject.toml

まず、開発フェーズでpyproject.tomlを作成します。このファイルは、後でコンテナやCI/CD環境でプログラムを実行する際に使用します。

[tool.poetry]
name = "recommendation-practice"
version = "0.1.0"
description = ""
authors = ["PH <phlin@example.com>"]
packages = [
    {include = "datareadeor", from = "src"},
    {include = "utils", from = "src"}, 
    {include = "core", from = "src"}, 
    {include = "table_models", from = "src"}
]

[tool.poetry.dependencies]
python = "^3.11"
numpy = "^1.25"
mlflow = "^2.14.2"
pydantic = "^2.8.2"
joblib = "^1.4.2"
pgvector = "^0.3.0"
psycopg2-binary = "^2.9.9"
asyncpg = "^0.29.0"
greenlet = "^3.0.3"
pydantic-settings = "^2.3.4"

[tool.poetry.group.pipeline.dependencies]
scikit-surprise = "^1.1.4"

[tool.poetry.group.dev.dependencies]
poethepoet = "^0.27.0"
ruff = "^0.5.1"
pandas = "^2.2.2"
ipykernel = "^6.29.5"
matplotlib = "^3.9.1"
pytest = "^8.2.2"

[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

2. Dockerfileの作成

次に、上記のpyproject.tomlを使用して、Dockerコンテナを作成します。以下は、Python 3.11のSlimバージョンをベースにしたDockerfileの例です。

FROM python:3.11-slim

WORKDIR  /app
RUN mkdir /app/src

# 必要なビルドツールのインストール
RUN apt-get update && apt-get install -y \
    build-essential \
    gcc \
    python3-dev \
    libpython3-dev

# Poetryのインストール
RUN pip install --upgrade pip && \
    pip install poetry

# Poetryファイルのコピーとパッケージのインストール
COPY src/pipelines/popularity/pyproject.toml /app/pyproject.toml

# モジュールコードのコピー
COPY src /app/src

# パイプラインスクリプトのコピー
COPY src/pipelines/popularity/pipeline_popularity.py /app/src/pipeline_popularity.py

# Poetryを使用して依存関係をインストール
RUN poetry config virtualenvs.in-project true
RUN poetry install --only main

# エントリーポイントスクリプトを使用して、適切なパイプラインを実行
ENTRYPOINT [ "poetry", "run", "python", "src/pipeline.py"]

Dockerfileに対し自分がよく忘れるポイントは以下:

  • Poetryの仮想環境をワーキングディレクトリに強制的に作成

    RUN poetry config virtualenvs.in-project true
    
  • メイングループのパッケージのみ([tool.poetry.dependencies]に記載されているパッケージ)をインストール

    RUN poetry install --only main
    

    または、実行したいスクリプトに応じてパッケージをインストールする場合:

    RUN poetry install --with pipeline
    
  • コンテナ内でpoetry runを使用してスクリプトを実行

    ENTRYPOINT [ "poetry", "run", "python", "src/pipeline_popularity.py"]
    
  • README.mdファイルの準備を忘れずに。README.mdがなければpoetry installの段階でエラーが発生します

  • パッケージ依存関係を指定した([tool.poetry]の下でpackagesに記載されている依存関係 )場合、以下の引数を使わない

    poetry install --no-root
    
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0