關於 Linux 系統容器

Migrate to Containers CLI 可讓您將 Linux 應用程式遷移至容器化環境。它使用預先建構的 Linux 系統容器,做為現代化應用程式所需服務的系統啟動載入程式。使用 Linux 應用程式的 Migrate to Containers,您可以翻新各種無狀態應用程式,在 Google Kubernetes Engine (GKE)、Cloud Run 和 GKE 叢集中執行。

詳情請參閱「Migrate to Containers CLI 架構」。

本文將詳細說明「遷移至容器」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 陳述式會將 VM 資料從原始來源複製或新增至 Docker 映像檔:

  • 下列陳述式會將含有從來源 VM 擷取的資料的 tar 檔案新增至 Docker 映像檔:

    ADD vmFiles.tar.gz /
    

    這個 tar 檔案是由 Migrate to Containers 建立。其中包含來源 VM 的根檔案系統,以及遷移計畫中篩選器提供的所有項目,以及資料遷移計畫中提供的任何資料夾。

  • 下列陳述式會將「遷移至容器」執行階段從 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 檔案,並依照指定的執行方法 (例如 daemonize、not daemonize、等待完成) 依序執行指定的二進位檔。
  • 收集 /code/config/logs/logsArtifact.yaml 檔案中指定的記錄,並將記錄列印到容器的 stdout。對於 GKE 和 GKE 叢集,這項功能還可確保記錄檔會傳送至 Cloud Logging。

遷移工作負載的維護

您可以使用已遷移的構件,為應用程式建立新的管道。您可能會為不同的應用程式建立不同的管道。您可以保留產生原始 VM 型應用程式的現有持續整合和部署管道,並新增相關步驟,將產生的可執行檔轉換為 Linux 系統容器。

下圖說明如何使用「遷移至容器」功能建立管道:

使用 Migrate to Containers 為應用程式重新建構平台的自動化 CI/CD 流程

此圖表顯示現有應用程式的變更程序。

變更來源程式碼或新的 OS 路徑會推送至現有的 Git 存放區。系統會根據現有設定編譯來源,並建構新映像檔。新映像檔包含 Migrate to Containers 執行階段層。

在測試環境中,開發人員會執行初步測試,確認新映像檔是否正常運作。在測試階段結束後,系統會建立新的系統容器映像檔,並推送至開發或測試環境,之後再推送至實際工作環境。