本記事は ZOZO Advent Calendar 2024 シリーズ 2 の 16 日目の記事です。
動機
nvidia/cudaをベースイメージとして使いつつ Python 3.11.x が動く環境を作りたい人生でした。
上記をベースイメージとしてデフォルトでインストールされる Python は 3.10.x なため、これを Python 3.11.x にするための試行錯誤の過程を遺しておきます。
結論
動くものはできたんですが Python 3.11.x をインストールする手続きが長い & ビルドに要する時間も長くなるため、「無理に 3.11.x にせず 3.10.x に留めておくのがよい」という判断をしています。
FROM nvidia/cuda:12.6.3-base-ubuntu22.04 as builder
ENV DEBIAN_FRONTEND=noninteractive \
VIRTUAL_ENV=/app/.venv
ENV PATH="$VIRTUAL_ENV/bin:$PATH"
# パッケージ管理には poetry を使用
ENV POETRY_VERSION=1.8.5 \
POETRY_VIRTUALENVS_IN_PROJECT=true
RUN apt-get update && \
apt-get install -y \
build-essential \
libssl-dev \
libffi-dev \
libbz2-dev \
zlib1g-dev \
libopencv-dev \
libcurl4-openssl-dev \
libssl-dev \
wget
RUN wget https://www.python.org/ftp/python/3.11.10/Python-3.11.10.tar.xz && \
tar xJf Python-3.11.10.tar.xz && \
cd Python-3.11.10 && \
./configure && make && make install
RUN python3 -m venv $VIRTUAL_ENV && \
alias python=$VIRTUAL_ENV/bin/python3 && \
alias pip=$VIRTUAL_ENV/bin/pip3
RUN pip install --upgrade pip
WORKDIR /app
COPY . .
RUN pip install poetry==$POETRY_VERSION && \
poetry install
FROM nvidia/cuda:12.6.3-base-ubuntu22.04 as app
WORKDIR /app
ENV APP_HOME=/app
ENV VIRTUAL_ENV=$APP_HOME/.venv
ENV PATH="$VIRTUAL_ENV/bin:$PATH"
RUN alias python=$VIRTUAL_ENV/bin/python3
COPY --from=builder /usr/local/bin/python3 /usr/local/bin/python3
COPY --from=builder /usr/local/lib/python3.11 /usr/local/lib/python3.11
COPY --from=builder $VIRTUAL_ENV $VIRTUAL_ENV
Python をソースからビルドしているので時間がかかるのは当たり前ですね。もっとスマートにやる方法もあると思いますが、備忘録として書きました。