はじめに
Docker は、ソフトウェア開発の世界で革命を起こしています。開発者は、アプリケーションとその依存関係を、ポータブルで自己完結的な単位であるコンテナにパッケージ化できます。このチュートリアルでは、Docker コンテナ内で Python アプリケーションを実行する方法を、Docker の理解からコンテナ化されたアプリケーションのデプロイまで、必須のステップを踏んで解説します。
Docker は、ソフトウェア開発の世界で革命を起こしています。開発者は、アプリケーションとその依存関係を、ポータブルで自己完結的な単位であるコンテナにパッケージ化できます。このチュートリアルでは、Docker コンテナ内で Python アプリケーションを実行する方法を、Docker の理解からコンテナ化されたアプリケーションのデプロイまで、必須のステップを踏んで解説します。
Docker は、開発者がコンテナ化された環境でアプリケーションを構築、デプロイ、実行するためのオープンソースプラットフォームです。コンテナは、アプリケーションを実行するために必要なコード、ランタイム、システムツール、ライブラリなど、すべてを含んだ軽量で独立した実行可能なソフトウェアパッケージです。Docker はこれらのコンテナをパッケージ化および配布する方法を提供し、さまざまな環境間でのアプリケーションのデプロイと管理を容易にします。
Docker アーキテクチャは、クライアント - サーバーモデルに基づいています。Docker クライアントは、Docker デーモンと通信します。Docker デーモンは、Docker コンテナの構築、実行、管理を担当します。Docker アーキテクチャの主要なコンポーネントは次のとおりです。
Docker を開始するには、システムに Docker エンジンをインストールする必要があります。Docker は公式 Docker ウェブサイト (https://www.docker.com/get-started) からダウンロードしてインストールできます。インストール後、docker コマンドラインインターフェース (CLI) を使用して Docker デーモンと対話し、コンテナを管理できます。
Docker を使用してシンプルな "Hello, World!" コンテナを実行する方法の例を次に示します。
$ docker run hello-world
このコマンドは、Docker Hub レジストリから hello-world イメージをプルし、新しいコンテナを作成し、コンテナ内でアプリケーションを実行します。
Docker を使用して Python アプリケーションをコンテナ化するには、Docker イメージを作成する必要があります。Docker イメージは、アプリケーションを実行するために必要なコード、ランタイム、システムツール、ライブラリなど、すべてを含んだ軽量で独立した実行可能なパッケージです。
シンプルな Python アプリケーションの Docker イメージを作成する方法の例を次に示します。
プロジェクト用の新しいディレクトリを作成し、ターミナルでそのディレクトリに移動します。
app.py という新しいファイルを作成し、以下の Python コードを追加します。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello, LabEx!'
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
Dockerfile という新しいファイルを作成し、以下の内容を追加します。
FROM python:3.9-slim
WORKDIR /app
COPY . /app
RUN pip install --no-cache-dir -r requirements.txt
CMD ["python", "app.py"]
この Dockerfile は、Python アプリケーションの Docker イメージを構築するための手順を定義しています。python:3.9-slim ベースイメージから開始し、作業ディレクトリを /app に設定し、アプリケーションファイルのコピー、必要な依存関係のインストール、app.py スクリプトの実行を行います。
requirements.txt という新しいファイルを作成し、以下の依存関係を追加します。
flask
以下のコマンドを使用して Docker イメージを構築します。
$ docker build -t my-python-app .
このコマンドは、タグ my-python-app を持つ Docker イメージを構築します。
Docker イメージができたら、以下のコマンドを使用して Docker コンテナで Python アプリケーションを実行できます。
$ docker run -p 5000:5000 my-python-app
このコマンドは、my-python-app コンテナを実行し、コンテナのポート 5000 をホストのポート 5000 にマッピングします。
これで、ウェブブラウザを開き、http://localhost:5000 にアクセスすることで Python アプリケーションにアクセスできます。「Hello, LabEx!」というメッセージが表示されるはずです。
Docker コンテナをデプロイするには、まず Docker イメージを Docker Hub やプライベートレジストリなどのレジストリにプッシュする必要があります。これにより、他の環境にアプリケーションを共有および配布できます。
my-python-app イメージを Docker Hub にプッシュする方法を次に示します。
Docker Hub アカウント (まだ作成していない場合) を https://hub.docker.com で作成します。
docker login コマンドを使用して Docker Hub にログインします。
$ docker login
プロンプトが表示されたら、Docker Hub のユーザー名とパスワードを入力します。
ローカルの my-python-app イメージに、Docker Hub のユーザー名とタグ (例:latest) を付けてタグ付けします。
$ docker tag my-python-app username/my-python-app:latest
タグ付けされたイメージを Docker Hub にプッシュします。
$ docker push username/my-python-app:latest
これで、Docker イメージは Docker Hub レジストリで使用可能になり、他のシステムでプルしてデプロイできます。
本番環境で Docker コンテナをデプロイするには、Kubernetes や Docker Swarm などのコンテナオーケストレーションプラットフォームを使用できます。これらのプラットフォームは、スケーリング、ロードバランシング、コンテナのライフサイクル管理などの機能を提供します。
my-python-app コンテナを Docker Swarm を使用してデプロイする方法の例を次に示します。
Docker Swarm クラスタを初期化します。
$ docker swarm init
my-python-app コンテナの新しいサービスを作成します。
$ docker service create --name my-python-app -p 5000:5000 username/my-python-app:latest
このコマンドは、my-python-app という名前の新しいサービスを作成し、username/my-python-app:latest イメージを実行します。コンテナのポート 5000 をホストのポート 5000 にマッピングします。
サービスを複数のレプリカにスケールアップします。
$ docker service scale my-python-app=3
このコマンドは、my-python-app サービスを 3 つのレプリカにスケールアップします。これにより、アプリケーションの高可用性とロードバランシングが実現します。
サービスの状態を監視します。
$ docker service ls
$ docker service logs my-python-app
これらのコマンドは、my-python-app サービスの状態を表示し、ログを検査できます。
Docker Swarm などのコンテナオーケストレーションプラットフォームを使用することで、本番環境で Docker コンテナを簡単に管理、スケール、デプロイできます。
このチュートリアルを終了するまでに、Docker と Python アプリケーションのコンテナ化に関する確かな理解を得ているはずです。Docker イメージの構築方法、コンテナの実行方法、一貫性、信頼性、スケーラビリティを備えたアプリケーションのデプロイ方法を学習します。Python 開発における Docker の習得により、ワークフローが効率化され、アプリケーションの移植性と管理性が向上します。