Amazon ECS 容器映像的最佳實務 - Amazon Elastic Container Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Amazon ECS 容器映像的最佳實務

容器映像是一組關於如何建置容器的指示。容器映像會包含您應用程式的程式碼,以及應用程式的程式碼執行所需的所有相依性。應用程式相依性包括應用程式程式碼所依賴的原始程式碼套件、解譯語言的語言執行期,以及動態連結程式碼所依賴的二進位套件。

設計和建置容器映像時,請遵循下列準則:

  • 將所有應用程式相依性儲存為容器映像內的靜態檔案,使容器映像完整。

    如果變更容器映像中的某些內容,請建置包含變更的新容器映像。

  • 在容器內執行單一應用程式處理程序。

    容器生命週期是應用程式處理程序執行的長度。Amazon ECS 會取代異常終止的程序,並決定替代程序的啟動位置。完整的容器映像能有效提升整體部署的復原能力。

  • 讓應用程式處理 SIGTERM

    當 Amazon ECS 停止任務時,會先向任務傳送 SIGTERM 訊號,告知應用程式需完成處理並關閉。然後,Amazon ECS 會傳送 SIGKILL 訊息。當應用程式忽略 SIGTERM 時,Amazon ECS 服務必須等待一段時間,再傳送 SIGKILL 訊號來終止程序。

    您需要確定應用程式完成自身工作所需的時間,並確保應用程式會處理 SIGTERM 訊號。在應用程式的訊號處理中,您需要停止應用程式接受新工作並完成正在進行的工作;如果工作需要太長時間才能完成,則需將未完成的工作儲存至任務外部的儲存空間。

  • 設定容器化應用程式以將日誌寫入 stdoutstderr

    將日誌處理與應用程式程式碼分離,可讓您更靈活地調整基礎結構層級的日誌處理。其中一個範例是變更記錄系統。您可以調整設定,而不是修改服務以及建置與部署新的容器映像。

  • 使用標籤對容器映像進行版本控制。

    容器映像儲存在容器登錄中。登錄中的每個映像皆以標籤識別。有一個標籤名為 latest。此標籤的功能是指向最新版應用程式容器映像的指標,類似於 git 儲存庫中的 HEAD。建議您僅將 latest 標記用於測試目的。最佳實務是使用每個建置的唯一標籤來標記容器映像。我們建議您使用用於建置映像的 git commit 的 git SHA 來標記映像。

    您不需要為每次提交建置容器映像。不過,我們建議您在每次將特定程式碼提交發佈至生產環境時,都建置新的容器映像。我們還建議您使用與映像內部程式碼的 git commit 相對應的標籤來標記映像。如果您使用 git commit 標記映像,則可以更快找到映像正在執行的程式碼版本。

    我們也建議您在 Amazon Elastic Container Registry 中開啟不可變的映像標籤。使用此設定時,您無法變更標記指向的容器映像。相反地,Amazon ECR 強制要求必須將新映像上傳至新標籤。如需詳細資訊,請參閱《Amazon ECR 使用者指南》中的映像標籤可變性

當您建構應用程式以在其中執行時 AWS Fargate,您必須決定要將多個容器部署到相同的任務定義,以及在多個任務定義中分別部署容器。如需要下列條件,我們建議您在相同的任務定義中部署多個容器:

  • 容器共用相同的生命週期 (亦即,它們一起啟動和終止)。

  • 容器必須在相同的基礎主機上執行 (亦即,一個容器參考 localhost 連接埠上的另一個容器)。

  • 您的容器會共用資源。

  • 您的容器共用資料磁碟區。

如果不需要這些條件,我們建議在多個任務定義中分別部署容器。這能讓您分別對容器進行擴展、佈建與解除佈建。