Dockerを用いてPython環境をWindows上に構築する方法

最近pythonをよく使うのですが、やりたいことごとにpython環境が競合(それぞれ必要なライブラリのバージョンが違う)し不便になったので、docker使ってコンテナ上で環境つくると便利だとネット記事見たので環境を構築してみた。

概要

この記事ではWindows PC上でDockerを用いてPythonを実行する環境を作成する方法を説明します。このプロセスはDocker Desktopのインストールから始まり、Pythonスクリプトを実行するDockerコンテナの作成までをカバーします。

手順

  1. Docker Desktopのインストール: Docker DesktopはDockerのWindows版で、これによりWindows上でDockerを簡単に利用することができます。インストールは公式ウェブサイトからダウンロードすることができます。
  2. Dockerfileの作成: DockerfileはDockerイメージを作成するための設定ファイルです。Python環境を持つDockerイメージを作成するためには、次のようなDockerfileが必要です。(中身を見ると、コンテナ上にディレクトリ作ったり、ローカルPCからファイルをコンテナ上にコピーしたりして、コンテナを起動させるための準備をしているっぽい)
# ベースとなるDockerイメージ指定
FROM python:3.8

# コンテナ内に作業ディレクトリを作成
WORKDIR /app

# 必要なファイルをコンテナにコピー
COPY requirements.txt ./requirements.txt

# ライブラリのインストール
RUN pip install -r requirements.txt

# 実行したいpythonファイルをコンテナにコピー
COPY . .

# コンテナ起動時に実行するコマンド
CMD ["python", "./your_script.py"]

Dockerfileは任意のテキストエディターで作成でき、その際に拡張子は必要ありません。ファイル名は必ず"Dockerfile"とし、Dockerfileと同じディレクトリにPythonスクリプトとrequirements.txtを配置します。

★一番最後の行に記載されている、CMD [“python", “./your_script.py"]で実行したいpythonファイルを指定しています。この例ではpythonファイルは、Dockerfileと同じフォルダ配下にあることを想定しています。

・requierements.txtは以下のような内容です。Pythonスクリプトが依存するライブラリとそのバージョンを記述します。例えば、numpyとpandasが必要な場合、以下のように記述します。

numpy==1.21.0
pandas==1.3.0

3.Dockerイメージのビルド: Dockerfileが完成したら、次のコマンドをコマンドプロンプト(またはPowerShell)から実行し、Dockerイメージをビルドします。

docker build -t your_image_name .

ここで、your_image_nameは任意のイメージ名に置き換えてください。

4.Dockerコンテナの実行: ビルドが成功したら、次のコマンドでDockerコンテナを実行します。

docker run -it --name your_container_name your_image_name

ここでもyour_container_nameは任意のコンテナ名に置き換えてください。これにより、Dockerfile内に記載した、pythonファイルが実行されます。

ポイントとトラブルシューティング

一度作成したコンテナ名は再利用することができません。再度同じコンテナ名を使用したい場合は、一度そのコンテナを削除するか、新しい名前でコンテナを作成する必要があります。コンテナの削除は次のコマンドで行います:

docker rm your_container_name

また、すでに作成したコンテナを再度実行したい場合は、「docker start」コマンドを使用して再開することができます:

docker start your_container_name

スクリプトを実行するたびに新しいコンテナを作成することを望む場合は、「–rm」オプションを使用して、スクリプトの実行が終了したときにコンテナが自動的に削除されるようにすることもできます:

docker run --rm -it --name your_container_name your_image_name

Q&A

質問①

docker run -it –name your_container_name your_image_name をした後、コンテナはPC上で起動しつづけているのですか?PCのリソースを無駄に消費していないか心配しています。

回答①

docker runコマンドは新たにDockerコンテナを作成して起動します。このコンテナは、指定したコマンド(今回の場合は、Pythonスクリプト)が終了すると、自動的に停止します。したがって、Pythonスクリプトが終了していれば、そのコンテナはもはや稼働していないため、リソースを消費することはありません。

ただし、コンテナが停止しただけで削除されていない場合、そのコンテナの状態はディスク上に保持されます。したがって、多くのコンテナを作成して削除しないで放置していると、ディスクスペースが無駄に消費される可能性があります。コンテナを削除するには、先ほど説明したdocker rmコマンドを使用します。

また、スクリプトの実行が終了したときに自動的にコンテナを削除するには、docker runコマンドに--rmオプションを追加することができます。これにより、コンテナの実行が終了すると同時にコンテナが自動的に削除され、ディスクスペースの消費を抑えることができます。具体的なコマンドは以下のようになります: