Linux システム コンテナについて

Migrate to Containers CLI を使用すると、Linux ベースのアプリケーションをコンテナ化された環境に移行できます。モダナイズされたアプリケーションに必要なサービスのブートローダーとして機能する、ビルド済みの Linux システム コンテナを使用します。Migrate to Containers for Linux アプリケーションを使用すると、Google Kubernetes Engine(GKE)、Cloud Run、GKE クラスタで実行するさまざまなステートレス アプリケーションをモダナイズできます。

詳細については、Migrate to Containers CLI のアーキテクチャをご覧ください。

このドキュメントでは、Migrate to Containers を使用して移行されたアプリケーションを実行するためのソリューションで使用される Migrate to Containers Linux システム コンテナについて詳しく説明します。

Linux システム コンテナを使用した移行

Migrate to Containers は、ソース アプリケーションのファイルとプロセスを検出します。次に、Dockerfile、Kubernetes マニフェスト、Skaffold 構成を含むアーティファクトを生成します。

Linux システム コンテナの主な機能は、関連するオペレーティング システムやアプリケーション サービスなど、元々ソース仮想マシン(VM)インスタンスで実行されていたサービスを開始することです。

Dockerfile は、移行された VM のイメージのビルドに使用されます。通常、Linux システム コンテナの Dockerfile は次のようになります。

# Please refer to the documentation:
# https://cloud.google.com/migrate/anthos/docs/dockerfile-reference

FROM us-docker.pkg.dev/migrate-modernize-public/modernize-plugins-prod/service-manager-runtime:1.0.0 as service-manager-runtime

FROM scratch

# Tar containing data captured from the source VM
ADD vmFiles.tar.gz /

COPY --from=service-manager-runtime / /

ADD blocklist.yaml /.m4a/blocklist.yaml

ADD logs.yaml /code/config/logs/logsArtifact.yaml

ADD services-config.yaml /.m4a/

ADD tempfiles.yaml  /.m4a/

# If you want to update parts of the image, add your commands here.
# For example:
# RUN apt-get update
# RUN apt-get install -y \
#       package1=version \
#       package2=version \
#       package3=version
# RUN yum update
# RUN wget http://github.com

ENTRYPOINT ["/ko-app/service-manager-runtime", "start", "-c", "/.m4a/"]

移行を実行すると、次の Dockerfile ステートメントによって、元のソースから Docker イメージに VM データがコピーまたは追加されます。

  • 次のステートメントは、ソース VM から取得したデータを含む tar ファイルを Docker イメージに追加します。

    ADD vmFiles.tar.gz /
    

    この tar は Migrate to Containers によって作成されます。これには、移行元 VM のルート ファイル システムと、移行計画のフィルタで指定されたすべての内容、データ移行計画で除外されたフォルダが含まれています。

  • 次のステートメントは、Migrate to Containers ランタイムを Docker リポジトリから Docker イメージにインポートします。

    FROM us-docker.pkg.dev/migrate-modernize-public/modernize-plugins-prod/service-manager-runtime:1.0.0 as service-manager-runtime
    
  • 次のステートメントは、Migrate to Containers ランタイムを Docker イメージにコピーします。

    COPY --from=service-manager-runtime / /
    

クリックすると Migrate to Containers ランタイム ファイルの詳細が表示されます

/ko-app/service-manager-runtime は、Migrate to Containers のメイン ランタイム ファイルです。これは、コンテナ用に作成された初期化システムです。この処理内容は次のとおりです。

  • /.m4a/services-config.yaml ファイルを読み取り、指定された実行方法(デーモン化ではなく完了を待つなど)に従って、指定されたバイナリを順番に実行します。
  • /code/config/logs/logsArtifact.yaml ファイルで指定されたログを収集し、コンテナの stdout に出力します。GKE と GKE クラスタの場合、ログが Cloud Logging に送信されることも保証されます。

移行されたワークロードのメンテナンス

移行したアーティファクトから、アプリケーションの新しいパイプラインを作成できます。アプリケーションごとに異なるパイプラインを使用できます。元の VM ベースのアプリケーションを生成した既存の継続的インテグレーションとデプロイのパイプラインを維持し、生成された実行可能ファイルを Linux システム コンテナに変換する関連ステップを追加できます。

次の図は、Migrate to Containers を使用したサンプル パイプラインを示しています。

Migrate to Containers を使用したアプリケーション再プラットフォーム化のための自動 CI / CD フロー

この図は、既存のアプリケーションの変更プロセスを示しています。

ソースコードまたは新しい OS パスの変更が既存の Git リポジトリに push されます。ソースが既存の設定に基づいてコンパイルされ、新しいイメージがビルドされます。新しいイメージには、Migrate to Containers ランタイム レイヤが含まれています。

テスト環境で、デベロッパーは予備テストを実施し、新しいイメージが期待どおりに動作しているかどうか確認します。テストフェーズが終了すると、新しいシステム コンテナ イメージが作成され、開発環境またはテスト環境に push されます。この環境は、後で本番環境にロールアウトされます。