Dockerを使ってPythonアプリケーションをデプロイする方法まとめ
この記事は、Supervisor、Gunicorn および Nginx は、Python を使用して Web アプリケーションを開発する際に最も一般的に使用されるソフトウェアであるため、著者チームによって要約された貴重な経験に基づいて作成されています。 Docker を使用して Python アプリケーションをデプロイする場合、これらのベスト プラクティスは非常に参考になります。同時に、日々の練習の中で出会った「落とし穴」や貴重な経験も共有し、みんなで一緒に進歩していけたらと思います!
Docker を使用すると、Python アプリケーションを簡単かつ効率的にデプロイできます。同時に、デプロイメントをスムーズに完了するためのベスト プラクティスがいくつかあります。もちろん、これらのベスト プラクティスが展開を完了する唯一の方法だというわけではありませんが、私たちのチームは、これらのベスト プラクティスは可用性が高く、保守が簡単であることを発見しました。この記事のほとんどの内容は私の立場を表しているだけであることに注意してください。Docker に基づいた実装は数多くありますので、お好みに合わせて選択してください。 Volume については別のトピックで説明する必要があるため、この記事ではあまり紹介しません。通常、ソース コードを実行するたびに再構築するのではなく、ボリュームを使用してソース コードをコンテナにコピーします。
DEBIAN_FRONTEND
Docker ユーザーは、ユーザー入力を取得する場所をオペレーティング システムに指示するこの環境変数についてよく知っている必要があります。 「非対話型」に設定すると、ユーザーに入力を要求せずにコマンドを直接実行できます (翻訳者注: すべての操作は非対話型です)。これは、apt-get コマンドを実行する場合に特に便利です。これは、ユーザーがどのステップに進んでいるのかを常に確認するメッセージが表示され、常に確認が必要となるためです。非対話型モードでは、デフォルトのオプションが選択され、できるだけ早くビルドが完了します。
このオプションは、ENV コマンドを使用してグローバルに設定するのではなく、Dockerfile で呼び出される RUN コマンドでのみ設定するようにしてください。ENV コマンドは、コンテナーの実行プロセス全体で有効になるため、 BASH を介したコンテナ このとき、グローバル設定を行うと問題が発生します。例は次のとおりです。
# 正确的做法 - 只为这个命令设置ENV变量 RUN DEBIAN_FRONTEND=noninteractive apt-get install -y python3 # 错误地做法 - 为接下来的任何命令都设置ENV变量,包括正在运行地容器 ENV DEBIAN_FRONTEND noninteractive RUN apt-get install -y python3
requirements.txt
基本コード (コードベース) と比較して、アプリケーションの依存関係はほとんど変更されないため、プロジェクトの依存関係を Dockerfile にインストールでき、後続のビルドも高速化できます (後のビルドのみ)変更されたコードをビルドする必要があります)。 Docker コンテナの階層構造は依存関係のインストール プロセスをキャッシュできるため、依存関係の再ダウンロードやビルドが必要ないため、その後のビルドは非常に高速になります。
ファイルの順序
上記の考え方 (キャッシュを使用) に従って推測すると、ファイルがコンテナに追加される順序が重要です。キャッシュを最大限に活用して Docker ビルド プロセスを高速化するには、頻繁に変更されるファイルを Dockerfile の下に配置する必要があります。たとえば、アプリケーション構成、システム構成、依存関係がほとんど変更されない場合は、それらを Dockerfile の先頭に置くことができます。ルーティング ファイル、ビュー、データベース コードなどのソース ファイルは変更されることが多いため、Dockerfile の下に配置できます。これは Docker 構成コマンド (EXPOSE、ENV など) の下にあることに注意してください。
また、ファイルを Docker にコピーする方法については考えないでください。アプリケーションのソース ファイルなど、ほとんどのファイルはまったく使用されないため、ビルドは高速化されません。
アプリケーション キー
以前は、アプリケーション キーをアプリケーションに安全に渡す方法がわかりませんでしたが、後に docker run
命令中的env-file
パラメーターを使用できることがわかりました。すべてのキーと構成を app_config.list ファイルに入れ、このファイルを通じてアプリケーションに配信します。具体的には:
docker run -d -t -—env-file app_config.list <image:tag>
このメソッドを使用すると、コンテナーを再構築せずに、アプリケーションの設定とキーを簡単に変更できます。
注: app_config.list が .gitignore ファイルのレコードにあることを確認してください。そうでない場合、ソース ファイルにチェックインされません。
Gunicorn
Gunicorn をコンテナ内のアプリケーション サーバーとして使用します。Gunicorn は非常に安定しており、ワーカーの数と種類 (グリーン スレッド、gevent) を指定する機能など、多くの構成オプションを備えています。など)、最適なパフォーマンスを得るために負荷に基づいてアプリケーションを調整できます。
Gunicorn の起動は簡単です:
# 安装 pip3 install gunicorn # 运行服务器 gunicorn api:app -w 4 -b 127.0.0.1:5000
最後のステップは、負荷分散 ができるように Nginx の背後でアプリケーション サーバーを実行することです。
supervisord
コンテナ内で複数のプロセスを実行することについて考えたことはありますか? Supervisord は間違いなく最高の補助ツールだと思います。 Nginx リバース プロキシと Gunicorn アプリケーションを含むコンテナをデプロイするとします。おそらく BASH スクリプトを使用して実行できますが、もう少し単純にしてみましょう。
スーパーバイザーは、「ユーザーが UNIX のようなオペレーティング システム上の一部のプロセスを監視および制御できるようにするプロセス制御システム」です。いいね!まず、Docker コンテナ内に Supervisor をインストールする必要があります。
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y supervisor
スーパーバイザーが何を実行するか、どのようにプロセスを管理するかを知るために、次にその設定ファイルを記述する必要があります。
[supervisord] nodaemon = true # 这个会让supervisord运行在前端 [program:nginx] # 你想运行的第一个程序的命名 command = /usr/sbin/nginx # nginx可执行程序的路径 startsecs = 5 # 如果nginx保持开启5s,我们视为启动成功 [program:app-gunicorn] command = gunicorn api -w 4 -b 127.0.0.1:5000 startsecs = 5
これは非常に基本的な構成であり、制御ログ、stdout/stderr リダイレクト、再起動戦略などの多くの構成項目もあります。このツールは本当に素晴らしいです。
構成が完了したら、Docker がそれをコンテナーにコピーしていることを確認します。
ADD supervisord.conf /etc/supervisord.conf
スーパーバイザーをコンテナーの自己起動コマンドとして機能させます。
CMD supervisord -c /etc/supervisord.conf
它将会在容器启动的时候,运行Gunicorn和Nginx。如果已经配置过了,那将会按需重启它们。
学到的东西以及未来的目标
我们已经花了很长时间在Docker中部署代码,并且接下来会投入更多的时间。在使用Docker的过程中,我们学到的最重要经验就是如何最小化思考(think minimally)。在一个容器中运行你的整个系统真的很诱人,但是在应用各自的容器中运行应用进程却更容易维护。一般情况下,我们会在容器中运行Nignx和Web服务器,并且在一些场景中,使用单独的容器来运行Nginx却没有任何优势,它可能只会增加复杂度。我们发现对于大多数情况,它在容器中的开销是可接受的。
我希望这些信息对各位有价值!当我们团队学到更多最佳实践时,我会更新这篇文章。
以上がDockerを使ってPythonアプリケーションをデプロイする方法まとめの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Dockerコンテナを終了する4つの方法:コンテナ端子でCtrl Dを使用するコンテナターミナルに出口コマンドを入力しますDocker stop&lt; container_name&gt;コマンドを使用するDocker Kill&lt; container_name&gt;ホストターミナルのコマンド(フォース出口)

Dockerの外部ホストにファイルをコピーする方法:Docker CPコマンドを使用:Docker CP [Options]&lt; Container Path&gt; &lt;ホストパス&gt;。データボリュームの使用:ホストにディレクトリを作成し、-vパラメーターを使用してコンテナを作成するときにディレクトリをコンテナにマウントして、双方向ファイルの同期を実現します。

すべてのコンテナ(Docker PS)をリストする手順に従って、Dockerコンテナ名を照会できます。コンテナリストをフィルタリングします(GREPコマンドを使用)。コンテナ名(「名前」列にあります)を取得します。

Dockerコンテナを再起動する方法:コンテナID(Docker PS)を取得します。コンテナを停止します(docker stop&lt; container_id&gt;);コンテナを起動します(docker start&lt; container_id&gt;);再起動が成功していることを確認します(Docker PS)。その他の方法:Docker Compose(Docker-Compose Restart)またはDocker API(Dockerドキュメントを参照)。

DockerでMySQLを起動するプロセスは、次の手順で構成されています。MySQLイメージをプルしてコンテナを作成および起動し、ルートユーザーパスワードを設定し、ポート検証接続をマップしてデータベースを作成し、ユーザーはすべての権限をデータベースに付与します。

Docker画像を更新する手順は次のとおりです。最新の画像タグ新しい画像をプルする新しい画像は、特定のタグのために古い画像を削除します(オプション)コンテナを再起動します(必要に応じて)

Dockerでコンテナを作成します。1。画像を引く:Docker Pull [ミラー名]2。コンテナを作成:Docker Run [Options] [Mirror Name] [コマンド]3。コンテナを起動:Docker Start [Container Name]

Docker Containerの起動手順:コンテナ画像を引く:「Docker Pull [Mirror Name]」を実行します。コンテナの作成:「docker create [options] [mirror name] [コマンドとパラメーター]」を使用します。コンテナを起動します:「docker start [container name or id]」を実行します。コンテナのステータスを確認してください:コンテナが「Docker PS」で実行されていることを確認します。
