PythonをDockerコンテナで実行する方法

こんにちは、Python開発者の卵さんたち!DockerとPythonの世界への興奮的な旅にあなたをお連れするのがとても楽しみです。コンピュータサイエンスを多年間教えてきた者として、この二つの強力な技術を組み合わせることで、開発ワークフローのゲームチェンジャーになることができるとお伝えできます。では、PythonをDockerコンテナでどのように実行するかを探ってみましょう!

Docker Setting - Python

Dockerとは何であり、なぜそれに注目すべきか?

本格的な内容に入る前に、まずDockerとは何か、そしてなぜそれが如此に重要かを理解しましょう。想像してみてください。あなたがケーキを焼いているとします。あなたにはレシピ(コード)、材料(依存関係)、そしてキッチンツール(開発環境)があります。これらすべてを一緒にパッケージ化してどこにでも持っていけることができたら素晴らしいでしょう。Dockerは、あなたのPythonプロジェクトに対してまさにそれをやります!

Dockerは、コンテナ内でアプリケーションを作成、デプロイ、実行することを可能にします。これらのコンテナは、軽量で、ポータブルで、一貫した環境であり、Dockerがインストールされているどのマシンでも動作します。これにより、「でも私のマシンでは動くんだよ」という厄介な問題から解放されます!

では、手を_dirtyにして、PythonをDockerコンテナでどのように実行するかを学びましょう。

Dockerファイルを使用してDocker内でPythonを実行する方法

Dockerfileは、Dockerコンテナのレシピのようなものです。Dockerがイメージを構築するための指示セットを含んでおり、そのイメージはコンテナの作成に使用されます。まず、Pythonアプリケーションの簡単なDockerfileを作成してみましょう:

# 公式のPythonランタイムを親イメージとして使用
FROM python:3.9-slim

# コンテナ内の作業ディレクトリを設定
WORKDIR /app

# 現在のディレクトリの内容をコンテナの@appにコピー
COPY . /app

# requirements.txtに指定された必要なパッケージをインストール
RUN pip install --no-cache-dir -r requirements.txt

# ポート80を外部に公開
EXPOSE 80

# 環境変数を定義
ENV NAME World

# コンテナが起動時にapp.pyを実行
CMD ["python", "app.py"]

これを分解してみましょう:

  1. FROM python:3.9-slim:公式のPython 3.9イメージをベースとして使用します。
  2. WORKDIR /app:コンテナ内の作業ディレクトリを設定します。
  3. COPY . /app:現在のディレクトリの内容をコンテナの@appにコピーします。
  4. RUN pip install --no-cache-dir -r requirements.txt:必要なPythonパッケージをインストールします。
  5. EXPOSE 80:コンテナの外部にポート80を公開します。
  6. ENV NAME World:環境変数を定義します。
  7. CMD ["python", "app.py"]:コンテナが起動時に実行するコマンドを指定します。

次に、簡単なapp.pyファイルを作成します:

import os
name = os.environ.get('NAME', "World")
print(f"Hello, {name}!")

このDockerコンテナをビルドして実行するには、以下のコマンドを使用します:

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

これで、コンソールに「Hello, World!」と表示されるはずです。

Docker Composeを使用してPythonを実行する方法

Docker Composeは、Dockerオーケストラの指揮者のような存在です。複数のコンテナからなるDockerアプリケーションを定義して実行するためのものです。まず、Pythonアプリケーションのためのdocker-compose.ymlファイルを作成してみましょう:

version: '3'
services:
web:
build: .
ports:
- "5000:80"
volumes:
- .:/app
environment:
- NAME=Docker Compose

このファイルはDocker Composeに以下を指示します:

  1. Dockerfileを使用してイメージをビルドします。
  2. ホストのポート5000をコンテナのポート80にマッピングします。
  3. 現在のディレクトリをコンテナの@appにマウントします。
  4. 環境変数NAMEを「Docker Compose」に設定します。

これを実行するには、以下のコマンドを使用します:

docker-compose up

Docker内の仮想環境でPythonを実行する方法

Dockerコンテナ内で仮想環境でPythonを実行するのは余計な手間のように思えるかもしれませんが、特定のシナリオでは非常に有用です。Dockerfileを修正して仮想環境を含めるようにしてみましょう:

FROM python:3.9-slim

WORKDIR /app

COPY requirements.txt .

RUN python -m venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"

RUN pip install --no-cache-dir -r requirements.txt

COPY . .

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

このDockerfileは、仮想環境を/opt/venvに作成し、それを有効にして必要な依存関係をインストールします。

結論

おめでとうございます!Dockerfile、Docker Compose、そして仮想環境を使用してPythonをDockerコンテナで実行する方法を学びました。これはあなたのPython開発の旅において非常に強力なスキルです。

覚えておいてください、Dockerは一貫性とポータビリティに関するものです。Dockerを使用することで、Pythonアプリケーションとそのすべての依存関係をパッケージ化し、Dockerがインストールされているどこでも実行できるようにすることができます。これにより、デプロイメントやコラボレーションのプロセスが大幅に簡素化されます。

最後に、ここまで学んだ主要なDockerコマンドの表を以下に示します:

コマンド 説明
docker build -t <image-name> . Dockerイメージをビルド
docker run <image-name> Dockerコンテナを実行
docker-compose up docker-compose.ymlに定義されたサービスを開始
docker-compose down コンテナ、ネットワーク、イメージ、ボリュームを停止および削除

引き続き練習し、探求し、そしてPythonとDockerを楽しみましょう!すべての達人もかつては初心者でした。あなたの旅はまだ始まったばかりであり、あなたが創り出す素晴らしいものを見てみたいと思います。ハッピーコーディング!

Credits: Image by storyset