はじめに
Docker は、ソフトウェア開発の世界で革命を起こしています。開発者は、アプリケーションとその依存関係を、ポータブルで自己完結的な単位であるコンテナにパッケージ化できます。このチュートリアルでは、Docker コンテナ内で Python アプリケーションを実行する方法を、Docker の理解からコンテナ化されたアプリケーションのデプロイまで、必須のステップを踏んで解説します。
Docker の理解
Docker とは何か?
Docker は、開発者がコンテナ化された環境でアプリケーションを構築、デプロイ、実行するためのオープンソースプラットフォームです。コンテナは、アプリケーションを実行するために必要なコード、ランタイム、システムツール、ライブラリなど、すべてを含んだ軽量で独立した実行可能なソフトウェアパッケージです。Docker はこれらのコンテナをパッケージ化および配布する方法を提供し、さまざまな環境間でのアプリケーションのデプロイと管理を容易にします。
Docker の利点
- 一貫性: Docker コンテナは、基盤となるインフラストラクチャに関係なく、アプリケーションが同じ方法で実行されることを保証します。
- スケーラビリティ: Docker は、コンテナを追加または削除することで、必要に応じてアプリケーションをスケールアップまたはスケールダウンすることを容易にします。
- 効率性: Docker コンテナは軽量であり、従来の仮想マシンよりも少ないリソースを使用するため、コンピューティングリソースをより効率的に使用できます。
- 移植性: Docker コンテナは、開発、テスト、本番環境など、さまざまな環境間で簡単に移動できます。複雑な設定変更は必要ありません。
Docker アーキテクチャ
Docker アーキテクチャは、クライアント - サーバーモデルに基づいています。Docker クライアントは、Docker デーモンと通信します。Docker デーモンは、Docker コンテナの構築、実行、管理を担当します。Docker アーキテクチャの主要なコンポーネントは次のとおりです。
graph LR
A[Docker クライアント] -- 通信 --> B[Docker デーモン]
B -- 管理 --> C[Docker イメージ]
B -- 管理 --> D[Docker コンテナ]
B -- 管理 --> E[Docker ボリューム]
B -- 管理 --> F[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 イメージをプルし、新しいコンテナを作成し、コンテナ内でアプリケーションを実行します。
Python アプリケーションのコンテナ化
Python アプリケーションの Docker イメージの構築
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 コンテナでの Python アプリケーションの実行
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 コンテナをデプロイするには、まず 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 コンテナのデプロイ
本番環境で Docker コンテナをデプロイするには、Kubernetes や Docker Swarm などのコンテナオーケストレーションプラットフォームを使用できます。これらのプラットフォームは、スケーリング、ロードバランシング、コンテナのライフサイクル管理などの機能を提供します。
my-python-app コンテナを Docker Swarm を使用してデプロイする方法の例を次に示します。
Docker Swarm クラスタを初期化します。
$ docker swarm initmy-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 の習得により、ワークフローが効率化され、アプリケーションの移植性と管理性が向上します。



