本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
準備 Docker 映像以部署至 Elastic Beanstalk
本節說明如何使用執行中的 Docker AL2或 AL2023 平台分支,準備要部署到 Elastic Beanstalk 的 Docker 映像。您需要的組態檔案取決於您的映像是本機、遠端,以及您是否使用 Docker Compose。
注意
如需啟動 Docker 環境的程序範例,請參閱 QuickStart Docker 專用主題。
主題
使用 Elastic Beanstalk 中的 Docker Compose 管理您的映像
您可以選擇使用 Docker Compose 來管理一個YAML檔案中的各種服務。若要進一步了解 Docker Compose,請參閱 Docker 網站上的為什麼要使用 Compose?
-
建立
docker-compose.yml
。如果您使用 Docker Compose 透過 Elastic Beanstalk 管理應用程式,則需要此檔案。如果所有部署都來自公有儲存庫中的映像,則不需要其他組態檔案。如果您部署的來源映像位於私有儲存庫中,則需要執行一些額外的組態。如需詳細資訊,請參閱使用私有儲存庫中的映像。如需docker-compose.yml
檔案的詳細資訊,請參閱 Docker 網站上的 Compose 檔案參考。 -
Dockerfile
為選用。如果您需要 Elastic Beanstalk 建置和執行本機自訂映像,請建立一個。如需有關Dockerfile
的詳細資訊,請參閱 Docker 網站上的 Dockerfile 參考。 -
您可能需要建立
.zip
檔案。如果您僅使用Dockerfile
檔案來部署應用程式,則不需要建立檔案。如果您使用其他組態檔案,.zip 檔案必須包含Dockerfile
、docker-compose.yml
檔案、應用程式檔案,以及任何應用程式檔案相依性。Dockerfile
和docker-compose.yml
必須在 .zip 封存的根層級或頂層。如果您使用 EB CLI 部署應用程式,它會為您建立 .zip 檔案。
若要進一步了解 Docker Compose 及如何安裝,請參閱 Docker 網站的 Docker Compose 的概觀
在 Elastic Beanstalk 中管理沒有 Docker Compose 的影像
如果您不是使用 Docker Compose 來管理 Docker 映像,則需要設定 Dockerfile
、Dockerrun.aws.json
檔案或兩者。
-
建立
Dockerfile
讓 Elastic Beanstalk 在本機建置和執行自訂映像。 -
建立
Dockerrun.aws.json v1
檔案,以將 Docker 影像從託管儲存庫部署至 Elastic Beanstalk。 -
您可能需要建立
.zip
檔案。如果您只使用其中一個檔案、Dockerfile
或Dockerrun.aws.json
,則不需要建立 .zip 檔案。如果您使用兩個檔案,則您需要一個 .zip 檔案。.zip 檔案必須包含Dockerfile
和Dockerrun.aws.json
,以及包含應用程式檔案的檔案,以及任何應用程式檔案相依性。如果您使用 EB CLI 部署應用程式,它會為您建立.zip
檔案。
Dockerrun.aws.json
v1 組態檔案
Dockerrun.aws.json
檔案說明如何將遠端 Docker 影像部署為 Elastic Beanstalk 應用程式。此JSON檔案是 Elastic Beanstalk 特有的。若您的應用程式執行於託管儲存庫提供的映像上,您可於 Dockerrun.aws.json v1
檔案指定該映像並省略 Dockerfile
。
Dockerrun.aws.json 版本
AWSEBDockerrunVersion
參數表示 Dockerrun.aws.json
檔案的版本。
-
Docker AL2和 AL2023 平台使用以下版本的 檔案。
Dockerrun.aws.json v3
— 使用 Docker Compose 的環境。
Dockerrun.aws.json v1
— 不使用 Docker Compose 的環境。
-
ECS 在 Amazon Linux 2 上執行並在 ECSAL2023 上執行 會使用
Dockerrun.aws.json v2
檔案。淘汰的平台 ECS- Multicontainer Docker Amazon Linux AMI(AL1) 也使用相同的版本。
Dockerrun.aws.json v1
檔案的有效金鑰和值包括以下操作:
- AWSEBDockerrunVersion
-
(必要)
1
如果您不使用 Docker Compose 來管理映像,請指定版本號碼。 - 身分驗證
-
(僅私有儲存庫為必要) 指定存放
.dockercfg
檔案的 Amazon S3 物件。請參閱本章稍後的使用私有儲存庫中的在 Elastic Beanstalk 中使用來自私人存儲庫的圖像映像。
- 映像
-
指定將從中建置 Docker 容器之現有 Docker 儲存庫的 Docker 基礎映像名稱。以 格式指定名稱金鑰的值
<organization>/<image name>
Docker Hub 上的映像,或<site>/<organization name>/<image name>
適用於其他網站。當您在
Dockerrun.aws.json
檔案中指定映像時,Elastic Beanstalk 環境中的每個執行個體都會執行docker pull
以執行映像。您亦可選擇納入 Update (更新) 金鑰。預設值為true
,且會指示 Elastic Beanstalk 檢查儲存庫、叫出映像更新並覆寫快取映像。使用
Dockerfile
時,請勿於Dockerrun.aws.json
檔案中指定 Image (映像) 金鑰。若Dockerfile
描述了映像,Elastic Beanstalk 永遠會依此建置並加以使用。 - 連接埠
-
(指定 Image (映像) 金鑰時為必要) 列出在 Docker 容器上公開的連接埠。Elastic Beanstalk 使用 ContainerPort值,將 Docker 容器連接至主機上執行的反向代理。
您可以指定多個容器連接埠,但 Elastic Beanstalk 只會使用第一個連接埠。其使用此連接埠將您的容器連接至主機的反向代理程式,並路由來自公有網際網路的請求。如果您使用的是
Dockerfile
,第一個ContainerPort值應與Dockerfile
EXPOSE清單中的第一個項目相符。或者,您可以在 中指定連接埠清單HostPort。HostPort 項目會指定ContainerPort值對應的主機連接埠。如果您未指定HostPort值,則會預設為 ContainerPort值。
{ "Image": { "Name": "
image-name
" }, "Ports": [ { "ContainerPort":8080
, "HostPort":8000
} ] } - 磁碟區
-
將磁碟區從EC2執行個體映射至 Docker 容器。指定欲對應的一個或多個磁碟區陣列。
{ "Volumes": [ { "HostDirectory": "
/path/inside/host
", "ContainerDirectory": "/path/inside/container
" } ] ... - 日誌
-
在容器內指定應用程式寫入日誌的目錄。當您請求結尾或套件日誌時,Elastic Beanstalk 會將此目錄的日誌上傳至 Amazon S3。若您將日誌輪換至此目錄內名為
rotated
的資料夾,亦可設定 Elastic Beanstalk 將輪換日誌上傳至 Amazon S3 供永久儲存。如需更多詳細資訊,請參閱 檢視 Elastic Beanstalk 環境中 Amazon EC2執行個體的日誌。 - 命令
-
指定要在容器中執行的命令。如果您指定 Entrypoint,然後會將 Command 新增做為對 Entrypoint 的引數。如需詳細資訊,請參閱 Docker 文件CMD
中的 。 - 進入點
-
指定在容器啟動時要執行的預設命令。如需詳細資訊,請參閱 Docker 文件ENTRYPOINT
中的 。
下列程式碼片段範例說明單一容器的 Dockerrun.aws.json
檔案之語法。
{
"AWSEBDockerrunVersion": "1",
"Image": {
"Name": "janedoe/image",
"Update": "true"
},
"Ports": [
{
"ContainerPort": "1234"
}
],
"Volumes": [
{
"HostDirectory": "/var/app/mydb",
"ContainerDirectory": "/etc/mysql"
}
],
"Logging": "/var/log/nginx",
"Entrypoint": "/app/bin/myapp",
"Command": "--argument"
}>
您可只向 Elastic Beanstalk 提供 Dockerrun.aws.json
檔案,或內含 .zip
及 Dockerrun.aws.json
檔案的 Dockerfile
封存檔。在提供這兩份檔案時,Dockerfile
描述 Docker 影像,Dockerrun.aws.json
檔案則提供其他部署資訊,如本章節稍後所述。
注意
這兩個檔案務必位於 .zip
封存檔的根目錄或頂層目錄。請勿從包含這些檔案的目錄建立封存檔。相反地,請瀏覽至該目錄內並從中建立封存檔。
提供這兩個檔案時,請勿於 Dockerrun.aws.json
檔案內指定映像。Elastic Beanstalk 會建立 Dockerfile
所述的映像並加以使用,而忽略 Dockerrun.aws.json
檔案指定的映像。
透過 Dockerfile 建置自訂映像
若您尚未於儲存庫內託管現有映像,您需要建立 Dockerfile
。
下列程式碼片段為 Dockerfile
的範例。遵循QuickStart Docker 專用中的說明時,可按撰寫內容上傳此 Dockerfile
。若您使用此 Dockerfile
,Elastic Beanstalk 會執行遊戲 2048。
如需可納入 Dockerfile
之指示的詳細資訊,請參閱 Docker 網站的 Dockerfile 參考
FROM ubuntu:12.04
RUN apt-get update
RUN apt-get install -y nginx zip curl
RUN echo "daemon off;" >> /etc/nginx/nginx.conf
RUN curl -o /usr/share/nginx/www/master.zip -L https://codeload.github.com/gabrielecirulli/2048/zip/master
RUN cd /usr/share/nginx/www/ && unzip master.zip && mv 2048-master/* . && rm -rf 2048-master master.zip
EXPOSE 80
CMD ["/usr/sbin/nginx", "-c", "/etc/nginx/nginx.conf"]
注意
您可以從單一 Dockerfile 執行多階段建置,以產生較小的映像,同時顯著降低複雜性。如需詳細資訊,請參閱 Docker 文件網站上的使用多階段建置