🐈

Poetryプロジェクトを開発するためのDockerコンテナ

2022/07/06に公開

Poetryプロジェクトを開発するためのDockerコンテナ

特定のPythonバージョンの環境で、Poetryプロジェクトを作成できるDockerfileを作ったので、忘れる前にメモ。Pyenv,Poetryの組み合わせでも出来るのですが、Docker使うのもありかなと思い作りました。

ディレクトリ構成

ファイル/フォルダの構成はこのようにしました。

usr@raspi:~/data/poeonly $ tree
.
├── Dockerfile_vFalse
├── Dockerfile_vTrue
└── src
  • Dockerfile_vFalse
    • Poetry仮想環境を作成しないDockerコンテナ
  • Dockerfile_vTrue
    • Poetry仮想環境を作成するDockerコンテナ
  • src
    • Dockerコンテナ上の /work/src/ としてバインドするディレクトリ
    • Dockerコンテナの /work/src/ 配下にpoetryプロジェクトを作成すれば、ホスト上の ~/data/poeonly/src に格納される。

Poetry仮想環境を作成するDockerコンテナ

Poetry仮想環境を作成するDockerコンテナです。Poetryプロジェクトにインストールしたパッケージは、Poetry仮想環境に入らないとインポートできません。

Dockerfile_vTrue
ARG python_image_v="python:3.10-buster"
FROM ${python_image_v}

ARG work_dir="/work/"
# コンテナにアクセスした際のデフォルトディレクトリ
WORKDIR ${work_dir}

# poetryのインストール先の指定
ENV POETRY_HOME=/opt/poetry

# pip更新
RUN pip install --upgrade pip
# poetryインストール
RUN curl -sSL https://install.python-poetry.org | POETRY_HOME=/opt/poetry python && \
    cd /usr/local/bin && \
    ln -s /opt/poetry/bin/poetry
ENV PATH="/opt/poetry/bin:$PATH" 
  • ※ 2022-11-26 Dockerfile_vTrue 更新
    • poetry version 1.2.2 インストールするようpoetryインストール処理を更新
Dockerコンテナに入るまで
$ cd ~/data/poeonly

# Dockerイメージを作る
$ docker build -f Dockerfile_vTrue -t poe_vtrue .

# Dokckerコンテナを作成し起動する
$ docker run  --rm --name poevtrue -v /home/usr/data/poeonly/src:/work/src -dit poe_vtrue

# Dockerコンテナに入る
$ docker exec -it poevtrue bash
Dockerコンテナに入ったあと
# バインドしたディレクトリに移動する
$ cd /work/src

# poetryプロジェクトを作成する
$ poetry new hoge

# poetryプロジェクトのディレクトリに移動する
$ cd hoge

# numpyをインストールする
$ poetry add numpy

Poetryで作った仮想環境に入らないとnumpyモジュールをインポートできないこと、仮想環境に入るとnumpyモジュールをインポートできることを確認。

動作確認
root@61ca823e2646:/work/src/hoge# python
Python 3.10.5 (main, Jun 24 2022, 06:35:51) [GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'numpy'
>>> exit()
root@61ca823e2646:/work/src/hoge# poetry shell
Spawning shell within /root/.cache/pypoetry/virtualenvs/hoge-8Rf8qz-w-py3.10
root@61ca823e2646:/work/src/hoge# . /root/.cache/pypoetry/virtualenvs/hoge-8Rf8qz-w-py3.10/bin/activate
(hoge-8Rf8qz-w-py3.10) root@61ca823e2646:/work/src/hoge# python
Python 3.10.5 (main, Jun 24 2022, 06:35:51) [GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
>>>

Poetry仮想環境を作成しないDockerコンテナ

Poetry仮想環境を作成しないDockerコンテナです。Poetryプロジェクトにインストールしたパッケージは、Poetry仮想環境に入ることなくインポートできます。

Dockerfile_vFalse
ARG python_image_v="python:3.10-buster"
FROM ${python_image_v}

ARG work_dir="/work/"
# コンテナにアクセスした際のデフォルトディレクトリ
WORKDIR ${work_dir}

# poetryのインストール先の指定
ENV POETRY_HOME=/opt/poetry

# pip更新
RUN pip install --upgrade pip
# poetryインストール
RUN curl -sSL https://install.python-poetry.org | POETRY_HOME=/opt/poetry python && \
    cd /usr/local/bin && \
    ln -s /opt/poetry/bin/poetry
ENV PATH="/opt/poetry/bin:$PATH" 
  • ※ 2022-11-26 Dockerfile_vFalse 更新
    • poetry version 1.2.2 インストールするようpoetryインストール処理を更新
Dockerコンテナに入るまで
$ cd ~/data/poeonly

# Dockerイメージを作る
$ docker build -f Dockerfile_vFalse -t poe_vfalse .

# Dokckerコンテナを作成し起動する
$ docker run  --rm --name poevfalse -v /home/usr/data/poeonly/src:/work/src -dit poe_vfalse

# Dockerコンテナに入る
$ docker exec -it poevfalse bash

Dockerコンテナに入った後にPoetryプロジェクトを作りnumpyをインストールし、仮想環境に入ることなくnumpyがインポートできることを確認

Dockerコンテナに入ったあと
root@b610df452c7c:/work/src# python
Python 3.10.5 (main, Jun 24 2022, 06:35:51) [GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'numpy'
>>> exit()
root@b610df452c7c:/work/src# poetry new fuga
Created package fuga in fuga
root@b610df452c7c:/work/src# cd fuga
root@b610df452c7c:/work/src/fuga# poetry add numpy
Skipping virtualenv creation, as specified in config file.
Using version ^1.23.0 for numpy

Updating dependencies
Resolving dependencies... (39.0s)

Writing lock file

Package operations: 9 installs, 0 updates, 0 removals

  • Installing pyparsing (3.0.9)
  • Installing attrs (21.4.0)
  • Installing more-itertools (8.13.0)
  • Installing packaging (21.3)
  • Installing pluggy (0.13.1)
  • Installing py (1.11.0)
  • Installing wcwidth (0.2.5)
  • Installing numpy (1.23.0)
  • Installing pytest (5.4.3)
root@b610df452c7c:/work/src/fuga#
root@b610df452c7c:/work/src/fuga# python
Python 3.10.5 (main, Jun 24 2022, 06:35:51) [GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
>>> exit()
root@b610df452c7c:/work/src/fuga#

docker-compose.yaml 作り中

Discussion