在本單元中,您會建立適用於巨型 node.js 應用程式的容器映像,並將其推送至 Amazon Elastic Container Registry。開始建置

部署至 amazon ecr

容器可讓您輕鬆地將應用程式的程式碼、組態和相依性封裝成易於使用的建置區塊,以提供環境一致性、操作效率、開發人員生產力和版本控制。無論部署環境為何,容器都可協助確保以快速、可靠和一致的方法部署應用程式。

架構概觀

速度
可以使用新版程式碼啟動容器,而不會產生大量部署開銷。操作速度得到改善,因為開發人員可以透過簡單地移動容器,輕鬆地將本機電腦容器中內建的程式碼移至測試伺服器。在建置時,可以將此容器連結至執行應用程式堆疊所需的其他容器。

相依性控制和改進的管道
Docker 容器映像是應用程式程式碼和相依項的時間點捕獲。 這讓工程組織能夠針對應用程式生命週期建立標準管道。例如:

  1. 開發人員在本機建置和執行容器。
  2. 持續整合伺服器執行相同的容器並對其執行整合測試,以確保其滿足期望。
  3. 將同一容器運送到預備環境,在此可以使用負載測試或手動 QA 來檢查其執行階段行為。
  4. 相同的容器被運用於生產。

能夠在整合和部署管道的所有階段中建置、測試、運送和執行完全相同的容器,從而讓交付高品質、可靠的應用程式變得更容易。

密度與資源效率
容器透過允許多個異質程序在單一系統上執行來提高資源效率。資源效率是容器使用隔離和分配技術的自然結果。可以限制容器使用一定數量的主機 CPU 和記憶體。透過了解容器需要哪些資源,以及基礎主機伺服器可以提供哪些資源,您可以調整在較小主機上所用運算資源的大小,或增加在單一大型主機上執行程序的密度,從而提高可用性並最佳化資源取用。

靈活性
Docker 容器的靈活性取決於其可移植性、部署便利性和小型尺寸。相較於 VM 上所需的安裝和組態,容器內部的封裝服務讓它們可以在主機之間輕鬆移動,與其他相鄰服務的故障隔離,並免受主機系統上錯誤修補程式或軟體升級的影響。 

完成時間: 20 分鐘

使用的服務:


針對本教學的第一部分,您會建立適用於巨型 node.js 應用程式的 Docker 容器映像,並將其推送至 Amazon Elastic Container Registry (Amazon ECR)。選取每一個步驟號碼來展開區段。

break-the-monolith
  • 步驟 1.進行設定

    在接下來的幾個步驟中,您將使用 DockerGithubAmazon Elastic Container Service (Amazon ECS)Amazon ECR 將程式碼部署至容器中。若要完成這些步驟,請確保具有以下工具。

    1. 擁有一個 AWS 帳戶:若您尚無 AWS 帳戶,可以在這裡註冊。本教學中的所有練習均旨在納入 AWS 免費方案
      ⚐ 注意:您將要使用的某些服務可能要求您的帳戶啟動超過 12 個小時。若您在使用任何服務時遇到困難,且擁有的是新建立的帳戶,請等候幾小時,然後重試。
    2. 安裝 Docker:您將使用 Docker 建置將在容器中執行的映像檔案。Docker 是一個開放原始碼專案。您可以為 Mac為 Windows 下載。
      安裝 Docker 之後,您可以在終端機中輸入 Docker --version 來驗證其是否正在執行。應當顯示版本號,例如:Docker version 19.03.5, build 633a0ea
    3. 安裝 AWS CLI:
      • 您會使用 AWS 命令列界面 (AWS CLI),將映像推送至 Amazon ECR。您可以在這裡了解並下載 AWS CLI。
      • 安裝 AWS CLI 後,在終端機中輸入 aws --version 可驗證其是否正在執行。應當顯示版本號,例如:aws-cli/1.16.217 Python/2.7.16 Darwin/18.7.0 botocore/1.12.207
      • 若您已經安裝 AWS CLI,請在終端機中執行以下命令以確保將其更新至最新版本:pip install awscli --upgrade --user
      • 若您之前從未使用過 AWS CLI,可能需要設定您的登入資料
    4. 具有文字編輯器:若您尚無用於編碼的文字編輯器,請在本機環境中安裝編輯器。Atom 是 GitHub 一款簡單的開放原始碼文字編輯器,深受開發人員的青睞。
  • 步驟 2.下載並開啟專案

    從 GitHub 下載程式碼:導覽至 https://github.com/awslabs/amazon-ecs-nodejs-microservices 並選取 複製或下載,下載 GitHub 資料儲存器至您的本機環境。您還可以使用 GitHub DesktopGit 複製資料儲存器。

    開啟專案檔案:啟動 Atom,選取新增專案資料夾,然後選取儲存該資料儲存器的檔案資料夾 amazon-ecs-nodejs-microservices。 這會將整個專案新增至 Atom 中,以便您輕鬆使用。

    在專案資料夾中,您應該會看到基礎架構服務資料夾。基礎架構包含您將在下一步中使用的 AWS CloudFormation 基礎架構組態程式碼。服務包含構成 node.js 應用程式的程式碼。

    請花幾分鐘時間檢閱檔案並熟悉應用程式的不同方面,包括資料庫 db.json、伺服器 server.jspackage.json 和應用程式 Dockerfile

    微型服務專案
  • 步驟 3.佈建資料儲存器

    建立資料儲存器:

    • 導覽至 Amazon ECR 主控台
    • 資料儲存器頁面上,選取建立資料儲存器
    • 在建立資料儲存器頁面上,為資料儲存器輸入以下名稱:api
      ⚐ 注意:標記不可變性下,保留預設設定。
    • 選取建立資料儲存器

    建立資料儲存器後,即會顯示一則含有資料儲存器地址的確認訊息。 資料儲存器地址採用以下格式:[帳戶 ID].dkr.ecr.[區域].amazonaws.com/[資料儲存器名稱][帳戶 ID][區域][資料儲存器名稱] 將特定於您的設定。

    ⚐ 注意:在本教學中,您將需要資料儲存器地址。

    建立
  • 步驟 4.建置並推送 Docker 映像

    存取您的終端機並導覽至以下目錄:~/amazon-ecs-nodejs-microservices/2-containerized/services/api

    使用終端機對 Docker 登入進行驗證:

    1. 執行 (aws ecr get-login --no-include-email --region [您的區域])。替換 [您的區域],例如:(aws ecr get-login --no-include-email --region us-west-2) 如有需要,設定您的登入資料
      若驗證成功,您會收到確認訊息:登入成功
    2. 若要建置映像,請在終端機中執行以下命令:docker build -t api
      ⚐ 注意: api 之後需要句點 (.)。
    3. 建置完成後,對映像進行標記,以便將其推送至資料儲存器:docker tag api:latest [帳戶 ID].dkr.ecr.[區域].amazonaws.com/api:v1 
      ⚐ 注意:使用您的特定資訊取代 [帳戶 ID][區域] 預留位置。
      ⚐ 專業提示::v1 表示映像組建版本。每次組建映像時,都應新增此版本號。若使用指令碼,則可以使用自動編號 (例如時間戳記) 來標記映像。這是一種最佳實務,可讓您將來輕鬆還原至之前的容器映像組建。
    4. 透過執行以下命令將映像推送至 Amazon ECR︰docker push [帳戶 ID].dkr.ecr.[區域].amazonaws.com/api:v1
      ⚐ 注意:使用您的特定資訊取代 [帳戶 ID] 和 [區域] 預留位置。

    若導覽至 Amazon ECR 資料儲存器,則應看到標記為 v1 的映像。

    Amazon ECR 映像標籤