配置碼頭運行 .aws.json v2 文件 - AWS Elastic Beanstalk

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

配置碼頭運行 .aws.json v2 文件

Dockerrun.aws.json v2是一個 Elastic Beanstalk 配置文件,描述如何在 Elastic Beanstalk 環境中部署一組託管在ECS集群中的 Docker 容器。彈性 Beanstalk 平台會建立ECS任務定義,其中包含ECS容器定義。這些定義會在 Dockerrun.aws.json 組態檔案中說明。

Dockerrun.aws.json檔案中的容器定義描述要部署到ECS叢集中每個 Amazon EC2 執行個體的容器。在此情況下,Amazon EC2 執行個體也稱為主機容器執行個體,因為它託管 Docker 容器。組態檔案也會針對要掛載的 Docker 容器說明要在主機容器執行個體上建立的資料磁碟區。如需 Elastic Beanstalk 上ECS受管理 Docker 環境中元件的詳細資訊和圖表,請參閱本章ECS託管碼頭平台概觀前面的內容。

Dockerrun.aws.json 檔案可獨立使用,或與其他原始碼一同壓縮為單一封存檔。使用 a Dockerrun.aws.json 存檔的原始程式碼會部署到 Amazon EC2 容器執行個體,並可在/var/app/current/目錄中存取。

Dockerrun.aws.json v2

Dockerrun.aws.json 檔案包含下列章節:

AWSEBDockerrunVersion

將版本號碼指定為受ECS管理 Docker 環境的值2

磁碟區

從 Amazon EC2 容器執行個體中的資料夾或來源服務包 (部署到/var/app/current) 建立磁碟區。使用 containerDefinitions 章節中的 mountPoints,將這些磁碟區掛載至 Docker 容器內的路徑。

containerDefinitions

容器定義陣列。

驗證 (選用)

內含私有儲存庫驗證資料的 .dockercfg 檔案於 Amazon S3 中的位置。

containerDefinitions磁碟區Dockerrun.aws.json使用的格式與 Amazon ECS 任務定義檔案的對應區段相同。如需有關任務定義格式和任務定義參數的完整清單的詳細資訊,請參閱 Amazon 彈性容器服務開發人員指南中的 Amazon ECS 任務定義

磁碟區格式

參數從 Amazon EC2 容器執行個體中的任一資料夾或來源服務包 (部署到/var/app/current) 建立磁碟區。

磁碟區的指定格式如下:

"volumes": [ { "name": "volumename", "host": { "sourcePath": "/path/on/host/instance" } } ],

使用容器定義中的 mountPoints,將這些磁碟區掛載至 Docker 容器內的路徑。

Elastic Beanstalk 會設定日誌的其他磁碟區,每個容器均有一個磁碟區。這些應由 Docker 容器掛載,以將日誌寫入主機執行個體。

如需詳細資訊,請參閱下列容器定義格式章節中的 mountPoints 欄位。

容器定義格式

下列範例顯示containerDefinitions區段中常用的參數子集。另外還有更多選用的參數。

Beanstalk 平台會建立ECS任務定義,其中包含ECS容器定義。豆莖支持為容器定義的參數的子集。ECS如需詳細資訊,請參閱《Amazon Elastic Container Service 開發人員指南》中的容器定義

Dockerrun.aws.json 檔案內含一個或多個容器定義物件的陣列,其中包含下列欄位:

name

容器的名稱。如需長度上限及允許的字元相關資訊,請參閱標準容器定義參數

image

從中建置 Docker 容器之線上 Docker 儲存庫的 Docker 影像名稱。請注意這些慣例:

  • Docker Hub 上官方儲存庫中的映像,使用的是單一名稱 (例如,ubuntumongo)。

  • Docker Hub 上的其他儲存庫中的映像要求使用組織名稱 (例如,amazon/amazon-ecs-agent)。

  • 其他線上儲存庫中的映像更進一步要求使用網域名稱 (例如,quay.io/assemblyline/ubuntu)。

environment

傳遞至容器的環境變數陣列。

例如,下列項目會定義名稱為 Container 且值為 PHP 的環境變數:

"environment": [ { "name": "Container", "value": "PHP" } ],
essential

若容器故障則應停止任務,則此值為 True。非基本容器完成或當機,不會影響執行個體上的其他容器。

memory

在容器執行個體上為容器預留的記憶體容量。為容器定義內 memorymemoryReservation 兩者參數中的其中一項,指定非零的整數。

memoryReservation

為容器保留的記憶體軟性限制 (MiB)。為容器定義內 memorymemoryReservation 兩者參數中的其中一項,指定非零的整數。

mountPoints

要掛載的 Amazon EC2 容器執行個體的磁碟區,以及要掛載它們的 Docker 容器檔案系統上的位置。當您掛載內含應用程式內容的磁碟區,您的容器可讀取原始碼套件內上傳的資料。當您掛載日誌磁碟區進行日誌資料寫入,Elastic Beanstalk 可自這些磁碟區收集日誌資料。

Elastic Beanstalk 會在容器執行個體上建立日誌磁碟區 (每個 Docker 容器一個),路徑為 /var/log/containers/containername。這些磁碟區名為 awseb-logs-containername,且掛載位置應位於日誌寫入容器檔案結構的位置。

例如,下列掛載點會將容器內 nginx 日誌的位置,對應至 Elastic Beanstalk 為 nginx-proxy 容器產生的磁碟區。

{ "sourceVolume": "awseb-logs-nginx-proxy", "containerPath": "/var/log/nginx" }
portMappings

將容器上的網路連接埠對應至主機上的連接埠。

links

連結的容器清單。已連結的容器可互相探索並安全通訊。

volumesFrom

自不同容器掛載所有磁碟區。例如,自名為 web 的容器掛載磁碟區:

"volumesFrom": [ { "sourceContainer": "web" } ],

驗證格式 — 使用私有儲存庫的影像

authentication 區段包含私有儲存庫的驗證資料。此為選用項目。

將內含身分驗證檔案的 Amazon S3 儲存貯體相關資訊,新增至 authentication 檔案的 Dockerrun.aws.json 參數。請確認 authentication 參數包含有效的 Amazon S3 儲存貯體和金鑰。Amazon S3 儲存貯體託管的區域,必須與使用其的環境處於相同的區域。Elastic Beanstalk 將不會從其他區域託管的 Amazon S3 儲存貯體下載檔案。

使用下列格式:

"authentication": { "bucket": "amzn-s3-demo-bucket", "key": "mydockercfg" },

如需產生身分驗證檔案並加以上傳的詳細資訊,請參閱 在 Elastic Beanstalk 中使用來自私人存儲庫的圖像

範例 Dockerrun.aws.json v2

下列程式碼片段範例說明具備兩個容器的執行個體的 Dockerrun.aws.json 檔案之語法。

{ "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" } ] } ] }