レガシーからクラウドサーバーレスへ - パート 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は、データサイエンス、Web開発、自動化タスクに適していますが、Cはシステムプログラミング、ゲーム開発、組み込みシステムに適しています。 Pythonは、そのシンプルさと強力なエコシステムで知られていますが、Cは高性能および基礎となる制御機能で知られています。

2時間以内にPythonの基本的なプログラミングの概念とスキルを学ぶことができます。 1.変数とデータ型、2。マスターコントロールフロー(条件付きステートメントとループ)、3。機能の定義と使用を理解する4。

PythonはゲームとGUI開発に優れています。 1)ゲーム開発は、2Dゲームの作成に適した図面、オーディオ、その他の機能を提供し、Pygameを使用します。 2)GUI開発は、TKINTERまたはPYQTを選択できます。 TKINTERはシンプルで使いやすく、PYQTは豊富な機能を備えており、専門能力開発に適しています。

2時間以内にPythonの基本を学ぶことができます。 1。変数とデータ型を学習します。2。ステートメントやループの場合などのマスター制御構造、3。関数の定義と使用を理解します。これらは、簡単なPythonプログラムの作成を開始するのに役立ちます。

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

限られた時間でPythonの学習効率を最大化するには、PythonのDateTime、時間、およびスケジュールモジュールを使用できます。 1. DateTimeモジュールは、学習時間を記録および計画するために使用されます。 2。時間モジュールは、勉強と休息の時間を設定するのに役立ちます。 3.スケジュールモジュールは、毎週の学習タスクを自動的に配置します。

Pythonは、Web開発、データサイエンス、機械学習、自動化、スクリプトの分野で広く使用されています。 1)Web開発では、DjangoおよびFlask Frameworksが開発プロセスを簡素化します。 2)データサイエンスと機械学習の分野では、Numpy、Pandas、Scikit-Learn、Tensorflowライブラリが強力なサポートを提供します。 3)自動化とスクリプトの観点から、Pythonは自動テストやシステム管理などのタスクに適しています。

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