ホームページ バックエンド開発 Python チュートリアル レガシーからクラウドサーバーレスへ - パート 1

レガシーからクラウドサーバーレスへ - パート 1

Sep 04, 2024 pm 08:30 PM

注: この記事は元々、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 のウォークスルーと内訳は次のとおりです。

  1. Dockerfile は、使用するベース イメージを指定する FROM 命令で始まります。この場合、それは python:3.9.7-slim-buster であり、Python 3.9.7 といくつかの重要なライブラリを含む最小限の基本イメージです。

  2. 次の命令では、RUN および useradd コマンドを使用して、flaskuser という名前の非 root ユーザーを作成します。これは、コンテナを root ユーザーとして実行しないようにするためのセキュリティのベスト プラクティスです。

  3. WORKDIR 命令は、作業ディレクトリを /app に設定します。ここにアプリケーション コードがコピーされます。

  4. COPY 命令は、requirements.txt ファイルをコンテナーの /app ディレクトリにコピーします。

  5. RUN 命令は、pip を使用して、requirements.txt にリストされている依存関係をインストールします。 --no-cache-dir オプションは、ダウンロードされたパッケージのキャッシュを回避するために使用されます。これにより、イメージ サイズを小さく保つことができます。

  6. ENV 命令は、flask コマンドを含むディレクトリを PATH 環境変数に追加します。これは、後で flask コマンドを実行するために必要です。

  7. FROM 命令は、前に定義したベース イメージを使用して新しいビルド ステージを開始します。これは、最終イメージのサイズを最小限に抑えるのに役立つ複数段階のビルドです。

  8. COPY 命令は、アプリケーション コード (app.py)、テンプレート (templates/)、および静的ファイル (static/) をコンテナーの /app ディレクトリにコピーします。

  9. ENV 命令は FLASK_APP および FLASK_ENV 環境変数を設定します。 FLASK_APP はメイン アプリケーション ファイルの名前を指定し、FLASK_ENV は環境を運用環境に設定します。

  10. EXPOSE 命令は、Flask で使用されるデフォルトのポートであるポート 5000 を公開します。

  11. 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.

From legacy to cloud serverless - Part 1

Untuk berhenti, gunakan docker-compose down.

Semua baik? Seterusnya: memindahkan aliran kerja ke Kubernetes dalam artikel seterusnya.

From legacy to cloud serverless - Part 1

以上がレガシーからクラウドサーバーレスへ - パート 1の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Python vs. C:比較されたアプリケーションとユースケース Python vs. C:比較されたアプリケーションとユースケース Apr 12, 2025 am 12:01 AM

Pythonは、データサイエンス、Web開発、自動化タスクに適していますが、Cはシステムプログラミング、ゲーム開発、組み込みシステムに適しています。 Pythonは、そのシンプルさと強力なエコシステムで知られていますが、Cは高性能および基礎となる制御機能で知られています。

2時間のPython計画:現実的なアプローチ 2時間のPython計画:現実的なアプローチ Apr 11, 2025 am 12:04 AM

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

Python:ゲーム、GUIなど Python:ゲーム、GUIなど Apr 13, 2025 am 12:14 AM

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

2時間でどのくらいのPythonを学ぶことができますか? 2時間でどのくらいのPythonを学ぶことができますか? Apr 09, 2025 pm 04:33 PM

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

Python vs. C:曲線と使いやすさの学習 Python vs. C:曲線と使いやすさの学習 Apr 19, 2025 am 12:20 AM

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

Pythonと時間:勉強時間を最大限に活用する Pythonと時間:勉強時間を最大限に活用する Apr 14, 2025 am 12:02 AM

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

Python:主要なアプリケーションの調査 Python:主要なアプリケーションの調査 Apr 10, 2025 am 09:41 AM

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

Python:自動化、スクリプト、およびタスク管理 Python:自動化、スクリプト、およびタスク管理 Apr 16, 2025 am 12:14 AM

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

See all articles