從 Amazon Linux 上運行的多容器泊塢窗遷移到在 Amazon Linux 2 上運行的 Elastic Beanstalk 泊塢窗 - AWS Elastic Beanstalk

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

從 Amazon Linux 上運行的多容器泊塢窗遷移到在 Amazon Linux 2 上運行的 Elastic Beanstalk 泊塢窗

在 64 位元 Amazon Linux 2 平台上ECS執行分支發行之前,Elastic Beanstalk 為具有在 64 位元 Amazon Linux 平台分支上執行之多容器泊塢視窗環境的客戶提供了一個替代的 Amazon Linux 2 遷移途徑。本主題介紹該遷移路徑,並保留作為完成該遷移路徑的所有客戶的參考文件。

現在,我們建議使用以 64 位元 Amazon Linux 平台分支執行之多容器泊塢視窗為基礎之環境的客戶,移轉至 64 位元 Amazon Linux 2 平台分支上ECS執行。與替代遷移路徑不同,此方法會繼續使用 Amazon ECS 協調容器部署到ECS受管 Docker 環境。這方面允許採取更直接的方法。無需變更原始程式碼,並且支援相同的 Dockerrun.aws.json v2。如需詳細資訊,請參閱在 Amazon 2023 上將您的 Elastic Beanstalk 應用程式從ECS託管多容器泊塢視窗遷移AL1到 ECS

您可以將在 Amazon Linux 上的多容器泊塢平台上運行的應用程序遷移AMI到 Amazon Linux 2 泊塢平台。Amazon Linux 上的多容器 Docker 平台要求您指定AMI要以容器形式執行的預先建置應用程式映像。遷移之後,您將不再有此限制,因為 Amazon Linux 2 Docker 平台也允許 Elastic Beanstalk 在部署期間建置您的容器映像。您的應用程式將繼續在多容器環境中執行,並可從 Docker Compose 工具獲得額外的好處。

Docker Compose 是定義和執行多容器 Docker 應用程式的工具。若要進一步了解 Docker Compose 及如何安裝,請參閱 Docker 網站的 Docker Compose 的概觀安裝 Docker Compose

docker-compose.yml 檔案

Docker Compose 工具會使用 docker-compose.yml 檔案來設定您的應用程式服務。該檔案會取代您的應用程式專案目錄和應用程式原始碼套件中的 Dockerrun.aws.json v2 檔案。您可以手動建立 docker-compose.yml 檔案,並發現針對大部分參數值參考 Dockerrun.aws.json v2 檔案很有幫助。

以下是相同應用程式的 docker-compose.yml 檔案和對應 Dockerrun.aws.json v2 檔案的範例。如需有關 docker-compose.yml 檔案的詳細資訊,請參閱 Compose 檔案參考。如需有關 Dockerrun.aws.json v2 檔案的詳細資訊,請參閱Dockerrun.aws.json v2

docker-compose.yml Dockerrun.aws.json v2
version: '2.4' services: php-app: image: "php:fpm" volumes: - "./php-app:/var/www/html:ro" - "${EB_LOG_BASE_DIR}/php-app:/var/log/sample-app" mem_limit: 128m environment: Container: PHP nginx-proxy: image: "nginx" ports: - "80:80" volumes: - "./php-app:/var/www/html:ro" - "./proxy/conf.d:/etc/nginx/conf.d:ro" - "${EB_LOG_BASE_DIR}/nginx-proxy:/var/log/nginx" mem_limit: 128m links: - php-app
{ "AWSEBDockerrunVersion": 2, "volumes": [ { "name": "php-app", "host": { "sourcePath": "/var/app/current/php-app" } }, { "name": "nginx-proxy-conf", "host": { "sourcePath": "/var/app/current/proxy/conf.d" } } ], "containerDefinitions": [ { "name": "php-app", "image": "php:fpm", "environment": [ { "name": "Container", "value": "PHP" } ], "essential": true, "memory": 128, "mountPoints": [ { "sourceVolume": "php-app", "containerPath": "/var/www/html", "readOnly": true } ] }, { "name": "nginx-proxy", "image": "nginx", "essential": true, "memory": 128, "portMappings": [ { "hostPort": 80, "containerPort": 80 } ], "links": [ "php-app" ], "mountPoints": [ { "sourceVolume": "php-app", "containerPath": "/var/www/html", "readOnly": true }, { "sourceVolume": "nginx-proxy-conf", "containerPath": "/etc/nginx/conf.d", "readOnly": true }, { "sourceVolume": "awseb-logs-nginx-proxy", "containerPath": "/var/log/nginx" } ] } ] }

其他遷移考量

碼頭 Amazon Linux 2 平台和多容器泊塢視窗 Amazon Linux AMI 平台以不同的方式實現環境屬性。這兩個平台也有不同日誌目錄,Elastic Beanstalk 會為每個容器建立日誌目錄。從 Amazon Linux AMI 多容器泊塢視窗平台遷移後,您需要注意新的 Amazon Linux 2 泊塢平台環境的這些不同實作。

Area Amazon Linux 2 上包含 Docker Compose 的 Docker 平台 Amazon Linux 上的多容器泊塢平台 AMI

環境屬性

為了讓您的容器能夠存取環境屬性,您必須在 .env 檔案中新增對檔案的 docker-compose.yml 參考。Elastic Beanstalk 會產生 .env 檔案,將每個屬性列為環境變數。如需詳細資訊,請參閱 在容器中參考環境變數

Elastic Beanstalk 可以直接將環境屬性傳遞給容器。您在容器中執行的程式碼可以存取這些屬性做為環境變數,而無需任何其他組態。

日誌目錄

對於每個容器,Elastic Beanstalk 會建立名為 /var/log/eb-docker/containers/<service name> (或 ${EB_LOG_BASE_DIR}/<service name>) 的日誌目錄。如需詳細資訊,請參閱 使用 Docker Compose 的 Docker 容器自訂記錄

對於每個容器,Elastic Beanstalk 會建立名為 /var/log/containers/<containername> 的日誌目錄。如需詳細資訊,請參閱 容器定義格式 中的 mountPoints 欄位。

遷移步驟

遷移到 Amazon Linux 2 Docker 平台
  1. 根據現有的 docker-compose.yml 檔案,為您的應用程式建立 Dockerrun.aws.json v2 檔案。如需詳細資訊,請參閱上述章節 docker-compose.yml 檔案

  2. 在您的應用程式專案資料夾根目錄中,將 Dockerrun.aws.json v2 檔案取代為您剛剛建立的 docker-compose.yml

    您的目錄結構應如下所示。

    ~/myApplication |-- docker-compose.yml |-- .ebextensions |-- php-app |-- proxy
  3. 使用 eb init 命令來設定要部署至 Elastic Beanstalk 的本機目錄。

    ~/myApplication$ eb init -p docker application-name
  4. 使用此 eb create 命令建立環境並部署 Docker 影像。

    ~/myApplication$ eb create environment-name
  5. 如果您的應用程式是 Web 應用程式,環境啟動後,請使用 eb open 命令,以在 Web 瀏覽器中檢視該命令。

    ~/myApplication$ eb open environment-name
  6. 您可以使用 eb status 命令來顯示新建立環境的狀態。

    ~/myApplication$ eb status environment-name