本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon ECS 容器映像的最佳實務
容器映像是一組關於如何建置容器的指示。容器映像會包含您應用程式的程式碼,以及應用程式的程式碼執行所需的所有相依性。應用程式相依性包括應用程式程式碼所依賴的原始程式碼套件、解譯語言的語言執行期,以及動態連結程式碼所依賴的二進位套件。
設計和建置容器映像時,請遵循下列準則:
-
將所有應用程式相依性儲存為容器映像內的靜態檔案,使容器映像完整。
如果您變更容器映像中的內容,請使用變更建立新的容器映像。
-
在容器內執行單一應用程式處理程序。
容器生命週期是應用程式處理程序執行的長度。Amazon ECS 會取代損毀的程序,並決定從何處啟動取代程序。完整映像可讓整體部署更具彈性。
-
讓您的應用程式處理
SIGTERM
。當 Amazon ECS 停止任務時,會先傳送 SIGTERM 訊號給任務,通知應用程式需要完成並關閉。然後,Amazon ECS 會傳送訊息
SIGKILL
。當應用程式忽略 時SIGTERM
,Amazon ECS 服務必須等待 傳送SIGKILL
訊號以終止程序。您需要識別應用程式完成其工作所需的時間,並確保應用程式處理
SIGTERM
訊號。應用程式訊號處理需要停止應用程式接受新工作並完成進行中的工作,或在工作需要太長時間才能完成時,將未完成的工作儲存至任務外部的儲存體。 -
設定容器化應用程式以將日誌寫入
stdout
和stderr
。從應用程式程式碼解耦日誌處理,可讓您彈性調整基礎設施層級的日誌處理。其中一個範例是變更您的記錄系統。您可以調整設定,而不是修改您的服務,以及建置和部署新的容器映像。
-
使用標籤對容器映像進行版本控制。
容器映像儲存在容器登錄中。登錄中的每個映像皆以標籤識別。有一個標籤名為
latest
。此標籤的功能是指向最新版應用程式容器映像的指標,類似於 git 儲存庫中的HEAD
。建議您僅將latest
標記用於測試目的。最佳實務是使用每個建置的唯一標籤來標記容器映像。我們建議您使用用於建置映像的 git commit 的 git SHA 來標記映像。您不需要為每次提交建置容器映像。不過,我們建議您在每次將特定程式碼提交發佈至生產環境時,都建置新的容器映像。我們還建議您使用與映像內部程式碼的 git commit 相對應的標籤來標記映像。如果您使用 git commit 標記映像,則可以更快找到映像正在執行的程式碼版本。
我們也建議您在 Amazon Elastic Container Registry 中開啟不可變的映像標籤。使用此設定時,您無法變更標記指向的容器映像。反之,Amazon ECR 會強制執行必須將新映像上傳到新標籤。如需詳細資訊,請參閱《Amazon ECR 使用者指南》中的映像標籤可變性。
當您建構應用程式以在其中執行時 AWS Fargate,您必須決定將多個容器部署至相同的任務定義,以及在多個任務定義中分別部署容器。如需要下列條件,我們建議您在相同的任務定義中部署多個容器:
-
容器共用相同的生命週期 (亦即,它們一起啟動和終止)。
-
容器必須在相同的基礎主機上執行 (亦即,一個容器參考 localhost 連接埠上的另一個容器)。
-
您的容器會共用 資源。
-
您的容器共用資料磁碟區。
如果不需要這些條件,我們建議在多個任務定義中分別部署容器。這可讓您分別擴展、佈建和取消佈建容器。