本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
配置碼頭運行 .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 受管 Docker 平台概觀前面的內容。
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 上官方儲存庫中的映像,使用的是單一名稱 (例如,
ubuntu
或mongo
)。 -
Docker Hub 上的其他儲存庫中的映像要求使用組織名稱 (例如,
amazon/amazon-ecs-agent
)。 -
其他線上儲存庫中的映像更進一步要求使用網域名稱 (例如,
quay.io/assemblyline/ubuntu
)。
-
- environment
-
傳遞至容器的環境變數陣列。
例如,下列項目會定義名稱為
Container
且值為PHP
的環境變數:"environment": [ { "name": "Container", "value": "PHP" } ],
- essential
-
若容器故障則應停止任務,則此值為 True。非基本容器完成或當機,不會影響執行個體上的其他容器。
- memory
-
在容器執行個體上為容器預留的記憶體容量。為容器定義內
memory
或memoryReservation
兩者參數中的其中一項,指定非零的整數。 - memoryReservation
-
為容器保留的記憶體軟性限制 (MiB)。為容器定義內
memory
或memoryReservation
兩者參數中的其中一項,指定非零的整數。 - 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"
}
]
}
]
}