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

WBOY
リリース: 2024-09-04 20:30:02
オリジナル
725 人が閲覧しました

注: この記事は元々、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 サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!