【Docker】Pythonプログラムをコンテナ化して実行する

今回は自作のPythonプログラムをDockerコンテナ化して実行してみます。

環境はWindowsを想定しています。WindowsでのDocker環境構築については以下をご覧ください。

1. Pythonプログラムの作成

まずは、実行するPythonプログラムを作成します。今回は、”Hello World!”と表示する簡単なプログラムを作成します。

print("Hello World!")

このプログラムを、任意のディレクトリにhello.pyとして保存します。

2.Dockerfileの作成

続いて、先ほど作成したhello.pyと同じディレクトリにDockerfileを作成します。

これは拡張子なしでファイル名がDockerfileというファイルです。テキストファイルなどを新規作成し、名前の変更で拡張子を消したうえで保存してください。

Dockerfileの中身は、以下のようにします。

FROM python:3.9

WORKDIR /app

COPY . /app

CMD ["python", "hello.py"]

このDockerfileでは、コンテナ内でPython3.9環境を作り、hello.pyを実行する指示を記載しています。

3.Dockerイメージのビルド

Dockerイメージをビルドする前に、Docker Desktopを起動しておきましょう。

コマンドプロンプトを開き、先ほどDockerfileを作成したディレクトリに移動します。以下のコマンドを実行することで、Dockerイメージをビルドすることができます。

docker build -t my-python-app .
docker build -t my-python-app .

Docker Desktopでmy-python-appというDockerイメージが作成されたことを確認できました。

Docker Desktopでmy-python-appというDockerイメージが作成されたことを確認

4.Dockerイメージの実行

最後にDockerイメージからコンテナを作成、実行します。

以下コマンドをコマンドプロンプトにて実行します。

docker run my-python-app
docker run my-python-app

“Hello World!”と表示され、Pythonプログラムが実行されたことがわかります。

【補足】ディレクトリ構成について

Dockerイメージを作成する際のディレクトリ構成について簡単に補足をしておきます。

今回作成したmy-python-appでhello.pyを実行するためには、hello.pyとDockerfileを同一ディレクトリに配置しておく必要があります。

例えば”project”というディレクトリ以下にDockerイメージを作成する場合は次のようなファイル構成とします。

project/

├── hello.py

└── Dockerfile

ここで、Dockerfileの中身を振り返ります。

FROM python:3.9

WORKDIR /app

COPY . /app

CMD ["python", "hello.py"]

WORKDIR /appで、Dockerイメージ内の作業ディレクトリが/appに設定されます。これはDockerイメージ内で生成されるディレクトリで、Windows側のディレクトリとは別物になります。

さらに、COPY . /appとすることで、Windows側のDockerfileと同じディレクトリに存在する全てのファイルがDockerイメージの/appにコピーされます。この時点で、Dockerfileと同じディレクトリに配置したhello.pyも/appにコピーされます。

複数ファイルを扱いたい場合は、全てDockerfileと同じ階層以下に配置してからDockerイメージをビルドするようにしてください。

project/
├── hello.py
├── Dockerfile
└── ...

まとめ

PythonプログラムをDockerでコンテナ化して実行する方法を紹介しました。ディレクトリ構成に注意してDockerイメージをビルドしてください。

ではでは👋