在本單元中,您會建立適用於整合型 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。按一下各個步驟編號以展開區段。

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

    在接下來的幾個步驟中,您會使用 DockerGitHubAmazon ECSAmazon ECR 將程式碼部署至容器。為了確保順利完成以下步驟,您必須確認具有正確的工具。

    1. 已有 AWS 帳戶:若您尚未具備 AWS 帳戶,可在此處註冊。本教學中設計的所有練習內容,皆涵蓋在「AWS 免費方案」範圍內。
      ⚐ 注意:您要使用的部分服務,可能會要求您的帳戶處於作用中狀態至少超過 12 小時。若您針對任何服務和新建立的帳戶遇到問題,請靜待數小時後再試一次。
    2. 安裝 Docker:您會使用 Docker 建立在容器中執行的映像檔案。Docker 是一項開放原始碼專案,您可在此處下載 Mac 專用版Windows 專用版
      安裝 Docker 後,您可在終端機執行 Docker --version 檢查其是否運作。您應會看到類似如下的內容:Docker version 17.03.0-ce, build 60ccb22
    3. 安裝 AWS CLI
      • 您會使用 AWS 命令列界面 (CLI),將映像推送至 Amazon Elastic Container Registry。您可在此處了解關於 CLI 的資訊。
      • 安裝 AWS CLI 後,您可在終端機執行 aws --version 檢查其是否運作。您應會看到類似如下的內容:aws-cli/1.11.63 Python/2.7.10 Darwin/16.5.0 botocore/1.5.26
      • 若您已安裝 AWS CLI,請在終端機中執行下列命令,確認其已更新為最新版本:pip install awscli --upgrade --user
    4. 安裝文字編輯器:若您尚未具備程式碼編寫專用的文字編輯器,請在本機環境中安裝該文字編輯器。Atom 是 GitHub 推出的簡易開放原始碼文字編輯器,廣受開發人員採用。
  • 步驟 2. 下載與開啟專案

    從 GitHub 下載程式碼:導覽至 https://github.com/awslabs/amazon-ecs-nodejs-microservices,然後選取 'Clone or Download' 以將 GitHub 存放庫下載至您的本機環境。您也可以使用 GitHub DesktopGit 來複製存放庫。

    開啟專案檔案:啟動 Atom,選取 'Add Project Folder',然後選取您儲存存放庫的所在資料夾 'amazon-ecs-nodejs-microservices'。這會將整個專案新增至 Atom,因此可供您輕鬆使用。

    您應會在專案資料夾中,看見適用於基礎設施和服務的資料夾。基礎設施會保留您在下個步驟中使用的 AWS CloudFormation 基礎設施組態程式碼。資料夾服務內含構成 node.js 應用程式的程式碼。

    花數分鐘時間按一下各個檔案,熟悉有關應用程式的各個不同層面,包括 db.json 資料庫、server.js 伺服器、package.json 以及 dockerfile 應用程式。

    微服務專案
  • 步驟 3. 佈建存放庫

    建立存放庫:


    記錄存放庫資訊:

    • 點擊下一步後,應會顯示類似如下的訊息:
    建立
    • 此存放庫位址遵循簡易格式:[account-id].dkr.ecr.[region].amazonaws.com/[repo-name]

     

    ⚐ 注意:您會需要此位址,包括您的帳戶 ID 以及要在後續步驟中使用的區域。

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

    開啟終端機,然後設定 GitHub 程式碼之 2-containerized/services/api 區段的路徑 (位於您複製或下載該程式碼的對象存放目錄):~/amazon-ecs-nodejs-microservices/2-containerized/services/api

    使用 AWS 驗證 Docker 登入:

    1. 執行 aws ecr get-login --no-include-email --region [region]。範例:aws ecr get-login --no-include-email --region us-west-2 若您之前從未用過 AWS CLI,則可能需要設定您的認證
    2. 此時會顯示以 docker login -u AWS -p ... 為首的大型輸出訊息;複製此輸出訊息的完整內容,然後在終端機中執行。
    3. 此時應會顯示 Login Succeeded。

    ⚐ 注意若此登入作業失敗,可能是由於新版 Docker 廢棄了 -e none 旗標所致。若要修正此問題,請將輸出訊息貼至文字編輯器、自輸出訊息末尾移除 -e none,然後在終端機中執行更新後的輸出訊息。

    • 建立映像:在終端機中,執行 docker build -t api 注意. 在此處非常重要。
    • 標記映像:建立完成後,標記映像以將其推送至存放庫:docker tag api:latest [account-id].dkr.ecr.[region].amazonaws.com/api:v1

    ⚐ 專家提示:v1 表示映像組建版本。每當您建立映像,即應遞增此版本號碼。若您使用指令碼,則可使用諸如時間戳記等自動化號碼來標記映像。此為最佳實務,可讓您在日後輕鬆回復為先前的容器映像組建。

    • 將映像推送至 ECR:執行 docker push 以將映像推送至 ECR:docker push [account-id].dkr.ecr.[region].amazonaws.com/api:latest

    若您導覽至 ECR 存放庫,應會看見您的映像已標記為最新。

    映像