レガシーからクラウドサーバーレスへ - パート 1
注: この記事は元々、2023 年 11 月 4 日にここで公開されたものです。より多くの読者に読んでいただけるよう、ここに再公開されました。
最新化、サーバーレス プラットフォーム、統合された DevOps の実践に焦点を当てて、レガシー アプリをオンプレミスからクラウドに移行するプロセスを説明するシリーズの最初の記事へようこそ。
この記事では、アプリのコンテナ化に焦点を当てます。ただし、アプリを最初から構築する場合は、まったく問題ありません (実際、そのほうがよいでしょう)。この例では、この DigitalOcean ガイドを使用して、Python (Flask) とデータベースとして MongoDB を使用する単純な TODO アプリを構築します。見た目を良くするためにいくつかのカスタマイズを行いましたが、主なポイントは、今後の作業で必要になるため、NoSQL ドキュメントベースのデータベースを使用するものを構築することです。
独自にアプリを構築していない場合は、GitHub でアプリのリポジトリのクローンを作成できます。
アプリを構築したら、始めましょう!
Dockerfile
これはコンテナ化するアプリケーション ディレクトリの構造であり、その後に Dockerfile が続きます。
. ├── app.py ├── LICENSE ├── README.md ├── requirements.txt ├── static │ └── style.css └── templates └── index.html
app.py ファイルは、Flask アプリ コードを含むメイン アプリケーション ファイルです。 requirements.txt ファイルには、アプリケーションに必要な Python 依存関係のリストが含まれています。 static/ ディレクトリには、CSS、JavaScript、画像などの静的ファイルが含まれています。 templates/ ディレクトリには、Flask アプリで使用される HTML テンプレートが含まれています。
# Use a minimal base image FROM python:3.9.7-slim-buster AS base # Create a non-root user RUN useradd -m -s /bin/bash flaskuser USER flaskuser # Set the working directory WORKDIR /app # Copy the requirements file and install dependencies COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # Add the directory containing the flask command to the PATH ENV PATH="/home/flaskuser/.local/bin:${PATH}" # Use a multi-stage build to minimize the size of the image FROM base AS final # Copy the app code COPY app.py . COPY templates templates/ COPY static static/ # Set environment variables ENV FLASK_APP=app.py ENV FLASK_ENV=production # Expose the port EXPOSE 5000 # Run the app CMD ["flask", "run", "--host=0.0.0.0"]
Dockerfile のウォークスルーと内訳は次のとおりです。
Dockerfile は、使用するベース イメージを指定する FROM 命令で始まります。この場合、それは python:3.9.7-slim-buster であり、Python 3.9.7 といくつかの重要なライブラリを含む最小限の基本イメージです。
次の命令では、RUN および useradd コマンドを使用して、flaskuser という名前の非 root ユーザーを作成します。これは、コンテナを root ユーザーとして実行しないようにするためのセキュリティのベスト プラクティスです。
WORKDIR 命令は、作業ディレクトリを /app に設定します。ここにアプリケーション コードがコピーされます。
COPY 命令は、requirements.txt ファイルをコンテナーの /app ディレクトリにコピーします。
RUN 命令は、pip を使用して、requirements.txt にリストされている依存関係をインストールします。 --no-cache-dir オプションは、ダウンロードされたパッケージのキャッシュを回避するために使用されます。これにより、イメージ サイズを小さく保つことができます。
ENV 命令は、flask コマンドを含むディレクトリを PATH 環境変数に追加します。これは、後で flask コマンドを実行するために必要です。
FROM 命令は、前に定義したベース イメージを使用して新しいビルド ステージを開始します。これは、最終イメージのサイズを最小限に抑えるのに役立つ複数段階のビルドです。
COPY 命令は、アプリケーション コード (app.py)、テンプレート (templates/)、および静的ファイル (static/) をコンテナーの /app ディレクトリにコピーします。
ENV 命令は FLASK_APP および FLASK_ENV 環境変数を設定します。 FLASK_APP はメイン アプリケーション ファイルの名前を指定し、FLASK_ENV は環境を運用環境に設定します。
EXPOSE 命令は、Flask で使用されるデフォルトのポートであるポート 5000 を公開します。
CMD 命令は、コンテナーの起動時に実行するコマンドを指定します。この場合、--host=0.0.0.0 オプションを指定して flask run コマンドを実行し、すべてのネットワーク インターフェイスにバインドします。
この Dockerfile を使用すると、アプリケーションをコンテナ化して実行できます。ただし、アプリには、実行中に作成または生成されたデータを保存するためのデータベースが必要であることに注意することが重要です。もちろん、MongoDB データベース イメージを個別に取得して、独立して実行することもできます。次に、アプリがデータベースにデータを正常に保存できるように、両側で調整を行って 2 つのコンテナー間の通信を確立します。このアプローチは機能しますが、時間がかかり、少し面倒になる可能性があります。プロセスを合理化するために、代わりに Docker Compose の使用を進めます。 Docker Compose では、すべてが YAML ファイルで宣言され、docker-compose up コマンドを使用することで、さまざまなサービスをシームレスに開始および操作できるため、時間と労力を節約できます。
Docker Compose によるデータベース統合の合理化
これは、プロセスを合理化するために使用する基本的な Docker Compose YAML ファイルです。
version: '3.9' services: db: image: mongo:4.4.14 ports: - "27017:27017" volumes: - mongo-data:/data/db web: build: . container_name: "myflaskapp" ports: - "5000:5000" environment: - MONGO_URI=mongodb://db:27017 depends_on: - db volumes: mongo-data:
この Docker Compose YAML ファイルは、MongoDB データベース (db) と Web アプリケーション (web) の 2 つのサービスをセットアップするように構成されています。内訳は次のとおりです:
Version: 使用されている Docker Compose ファイル形式のバージョン (この場合は 3.9) を指定します。
-
サービス:
-
データベース (db):
- Menggunakan imej MongoDB versi 4.4.14.
- Memetakan port hos 27017 ke port kontena 27017.
- Menggunakan volum bernama mongo-data untuk menyimpan data MongoDB secara berterusan.
-
Aplikasi Web (web):
- Membina imej Docker daripada direktori semasa (.).
- Tetapkan nama bekas sebagai "myflaskapp."
- Memetakan port hos 5000 ke port kontena 5000.
- Mentakrifkan pembolehubah persekitaran MONGO_URI dengan nilai mongodb://db:27017, mewujudkan sambungan kepada perkhidmatan MongoDB.
- Menentukan pergantungan pada perkhidmatan db, memastikan pangkalan data dimulakan sebelum perkhidmatan web.
-
-
Jilid:
- Mentakrifkan volum bernama mongo-data untuk data MongoDB yang berterusan.
Ringkasnya, fail Docker Compose ini mengatur penggunaan pangkalan data MongoDB dan aplikasi web Flask, memastikan ia boleh berkomunikasi dan berfungsi bersama dengan lancar.
Sekarang navigasi ke direktori dengan fail Docker Compose dan jalankan docker-compose untuk memulakan MongoDB dan apl web Flask. Akses apl di http://localhost:5000 untuk memastikan semuanya berfungsi seperti yang diharapkan.
Untuk berhenti, gunakan docker-compose down.
Semua baik? Seterusnya: memindahkan aliran kerja ke Kubernetes dalam artikel seterusnya.
以上がレガシーからクラウドサーバーレスへ - パート 1の詳細内容です。詳細については、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)

ホットトピック











Pythonは学習と使用が簡単ですが、Cはより強力ですが複雑です。 1。Python構文は簡潔で初心者に適しています。動的なタイピングと自動メモリ管理により、使いやすくなりますが、ランタイムエラーを引き起こす可能性があります。 2.Cは、高性能アプリケーションに適した低レベルの制御と高度な機能を提供しますが、学習しきい値が高く、手動メモリとタイプの安全管理が必要です。

Pythonを1日2時間学ぶだけで十分ですか?それはあなたの目標と学習方法に依存します。 1)明確な学習計画を策定し、2)適切な学習リソースと方法を選択します。3)実践的な実践とレビューとレビューと統合を練習および統合し、統合すると、この期間中にPythonの基本的な知識と高度な機能を徐々に習得できます。

Pythonは開発効率でCよりも優れていますが、Cは実行パフォーマンスが高くなっています。 1。Pythonの簡潔な構文とリッチライブラリは、開発効率を向上させます。 2.Cのコンピレーションタイプの特性とハードウェア制御により、実行パフォーマンスが向上します。選択を行うときは、プロジェクトのニーズに基づいて開発速度と実行効率を比較検討する必要があります。

PythonとCにはそれぞれ独自の利点があり、選択はプロジェクトの要件に基づいている必要があります。 1)Pythonは、簡潔な構文と動的タイピングのため、迅速な開発とデータ処理に適しています。 2)Cは、静的なタイピングと手動メモリ管理により、高性能およびシステムプログラミングに適しています。

PythonListSarePartOfThestAndardarenot.liestareBuilting-in、versatile、forStoringCollectionsのpythonlistarepart。

Pythonは、自動化、スクリプト、およびタスク管理に優れています。 1)自動化:OSやShutilなどの標準ライブラリを介してファイルバックアップが実現されます。 2)スクリプトの書き込み:Psutilライブラリを使用してシステムリソースを監視します。 3)タスク管理:スケジュールライブラリを使用してタスクをスケジュールします。 Pythonの使いやすさと豊富なライブラリサポートにより、これらの分野で優先ツールになります。

科学コンピューティングにおけるPythonのアプリケーションには、データ分析、機械学習、数値シミュレーション、視覚化が含まれます。 1.numpyは、効率的な多次元配列と数学的関数を提供します。 2。ScipyはNumpy機能を拡張し、最適化と線形代数ツールを提供します。 3. Pandasは、データ処理と分析に使用されます。 4.matplotlibは、さまざまなグラフと視覚的な結果を生成するために使用されます。

Web開発におけるPythonの主要なアプリケーションには、DjangoおよびFlaskフレームワークの使用、API開発、データ分析と視覚化、機械学習とAI、およびパフォーマンスの最適化が含まれます。 1。DjangoandFlask Framework:Djangoは、複雑な用途の迅速な発展に適しており、Flaskは小規模または高度にカスタマイズされたプロジェクトに適しています。 2。API開発:フラスコまたはdjangorestFrameworkを使用して、Restfulapiを構築します。 3。データ分析と視覚化:Pythonを使用してデータを処理し、Webインターフェイスを介して表示します。 4。機械学習とAI:Pythonは、インテリジェントWebアプリケーションを構築するために使用されます。 5。パフォーマンスの最適化:非同期プログラミング、キャッシュ、コードを通じて最適化
