ブログに戻る

Dockerを使用したPythonアプリのコンテナ化

Dockerを使用したPythonアプリのコンテナ化

Docker は、軽量なOSレベルの仮想化でアプリを開発、デプロイ、管理するための、無料かつオープンソースのソリューションです。このガイドでは、Python アプリをDockerコンテナ内に作成する方法を実演します。

前提条件

このガイドで説明する手順を実行するには、以下のコンポーネントが必要です。

Dockerコンテナ

同じ環境内でさまざまなプログラムを実行すると、問題が発生する可能性があり、実際に発生します。プログラムを追加すればするほど、環境は不安定になります。一般のユーザーにとっては大した問題ではないかもしれませんが、ミッションクリティカルなアプリケーションにおいては、深刻な結果を招く可能性があります。

システムに導入されるアプリが増えるほど、攻撃対象領域(アタックサーフェス)が広がります。たった1つのアプリが侵害されるだけで、システム全体が崩壊するおそれがあります。

これらの問題を解決するために、ソフトウェアレベルのサンドボックス化としてDockerコンテナを使用できます。

  • コンテナ内のアプリは、ファイルへのアクセスが制限されます。

  • コンテナ化されたアプリは、システムで実行されている他のプロセスを認識できません。

  • コンテナには、特定の量のハードウェアリソースを割り当てることができます。

  • コンテナのネットワークポートは外部に公開されません。

  • ローカル環境と本番環境の間で、ほぼすべてのものを一貫してパッケージ化できます。

実演として、Dockerコンテナ内にシンプルなPythonサーバーを構築し、そのコンテナをイメージに変換して、ダミーの本番環境にデプロイします。

ステップ 1 – ファイルシステムの構成

プロジェクトをホストするために、まず専用のディレクトリを作成します。

ディレクトリ内に、サブディレクトリを作成します。 src (コードを保存するため):

ステップ 2 – Pythonサーバーの構築

このステップでは、PythonでシンプルなHTTPサーバーを作成します。ファイルを作成します: server.py:

テキストエディタで開きます:

以下のPythonコードを入力します:

ここでは、

  • プログラムをシンプルに保つために、 HTTPServerクラスを使用し、標準 of Pythonライブラリからハンドラーを要求しています。

  • 関数runは、 HTTPserver.

  • のインスタンスを初期化します。 server_addressの引数が示すように、サーバーはポート8080で任意の着信接続をリッスンします。

次に、サーバーが期待通りに動作しているか確認します。サーバーを起動します:

新しいターミナルから、 curlを使用してサーバーにリクエストを送信できます:

または、ウェブブラウザで次のリンクにアクセスすることもできます:

ステップ 3 – Dockerfileの作成

A Dockerfile には、Dockerイメージを生成するために必要な指示が含まれています。ファイル内の指示は順次実行されます。詳細については、以下を参照してください:Dockerfile.

プロジェクト用に新しい Dockerfile を作成します:

次に、必要なコードを記述します。テキストエディタで開きます:

以下のコードを入力します:

ここで、

  • すべての Dockerfile は、 FROM ディレクティブで始まる必要があります。今回のケースでは、DockerイメージのベースとしてPythonを宣言しています。

  • この ENV SRC_DIR ディレクティブは、コンテナディレクトリの場所を指定します。

  • The COPY ディレクティブは、現在Pythonサーバーをホストしている src ディレクトリからファイルをコピーします。

  • 変数 PYTHONBUFFERED=1 は、Pythonが出力を直接 STDOUT に出力およびログ記録することを指定します。そうしないと、ログはどのバッファにも送信されません。

  • The CMD ディレクティブは、コンテナを実行するときに実行するデフォルトのコマンドを指定します。この例では、このディレクティブを使用してPythonサーバーを起動しています。

ステップ 4 – Dockerイメージの生成

With the Dockerfile の準備ができたら、イメージを作成(ビルド)できます。次のDockerコマンドを実行してプロセスを開始します。

ここで、

  • The -t フラグは、Dockerイメージを python_server.

  • としてタグ付けするために使用されます。Dockerは必要なすべてのコンポーネントをダウンロードし、それらを1つのイメージに結合します。

ステップ 5 – イメージの実行

イメージのデプロイ準備が整いました。次のコマンドを使用して実行できます。

ここでは、 -p フラグを使用して、ローカルマシンからDockerイメージにポート8080を転送しています。

サーバーが起動して実行されているかどうかは、 curl を使用して簡単に確認できます。:

ステップ 6 – サーバーの停止

ターミナルから “Ctrl + C” を押して、Dockerプロセスを終了します。

ステップ 7 – Dockerイメージのエクスポートとインポート

これで、Pythonサーバーをホストする機能的なDockerイメージが作成されました。Dockerのエクスポートおよびインポート機能を使用すると、他の任意のシステムに移行できます。

まず、現在のシステムにあるDockerイメージの一覧を確認します。

対象は、先ほど作成した python_server Dockerイメージです。次のコマンドを実行すると、TARアーカイブとしてエクスポートされます。

対象のマシンに python_server.tar ファイルを転送した後、次のコマンドを使用してDockerイメージをインポートします。

最後に

このガイドでは、PythonアプリケーションからDockerイメージをビルドする方法を説明しました。シンプルなPython Webサーバーを作成し、そこからDockerイメージをビルドしました。このDockerイメージは、任意の環境にデプロイでき、一貫した動作が期待できます。

Dockerについてさらに詳しく知りたいですか? 以下のガイドをご覧ください。

ハッピーコンピューティング!

author

Preslav Dobrev

著者 · CloudSigma

Preslav DobrevはCloudSigmaのクリエイティブデザイナーであり、従来型および革新的なマーケティングチャネルを活用した一貫性のあるビジネスアイデンティティに注力しています。彼は芸術的なビジョンと戦略的マーケティングを融合させ、インパクトのあるブランドナラティブを生み出すことに長けています。

コメント

コメントはまだありません。最初のコメントを投稿しましょう。