本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
建立容器映像以供 Amazon 使用 ECS
Amazon 在任務定義中使用 ECS Docker 映像來啟動容器。Docker 是一種技術,可為您提供建置、執行、測試和部署分散式應用程式所需的工具。
此處概述的步驟目的是引導您建立第一個 Docker 映像,並將該映像推送至ECR容器登錄檔 Amazon ,以用於您的 Amazon ECS任務定義。此引導過程假定您對 Docker 的含義和其運作方式有基本的了解。如需有關 Docker 的詳細資訊,請參閱什麼是 Docker?
必要條件
開始之前,請務必先達成以下先決條件。
-
請確定您已完成 Amazon ECR設定步驟。如需詳細資訊,請參閱 Amazon Elastic Container Registry 使用者指南 中的設定 ECR Amazon。
-
您的使用者具有存取和使用 Amazon ECR服務所需的IAM許可。如需詳細資訊,請參閱 Amazon ECR受管政策 。
-
您已安裝 Docker。如需有關 Amazon Linux 2 Docker 的安裝步驟,請參閱 在 AL2023 上安裝 Docker。如需其他作業系統的相關資訊,請參閱 Docker Desktop 概觀
中的 Docker 文件。 -
您已 AWS CLI 安裝並設定 。如需詳細資訊,請參閱《AWS Command Line Interface 使用者指南》中的安裝 AWS Command Line Interface。
如果您沒有或不需要本機開發環境,而且您偏好使用 Amazon EC2執行個體來使用 Docker,我們會提供下列步驟,以使用 Amazon Linux 2 啟動 Amazon EC2執行個體,並安裝 Docker Engine 和 Docker CLI。
Docker 可在多個不同的作業系統上使用,包括大部分的現代 Linux 發行版本,例如 Ubuntu,甚至是 macOS 和 Windows。如需如何在特定作業系統上安裝 Docker 的詳細資訊,請前往「Docker 安裝指南
您不需要本機開發系統,就能使用 Docker。如果您已使用 AmazonEC2,您可以啟動 Amazon Linux 2023 執行個體並安裝 Docker 以開始使用。
如果您已經安裝 Docker,請跳到「建立 Docker 映像」。
使用 Amazon Linux 2023 在 Amazon EC2執行個體上安裝 Docker AMI
-
使用最新的 Amazon Linux 2023 啟動執行個體AMI。如需詳細資訊,請參閱 Amazon EC2使用者指南 中的啟動執行個體。
-
連線到您的執行個體。如需詳細資訊,請參閱 Amazon EC2使用者指南 中的連線至您的 Linux 執行個體。
-
更新已安裝的套裝服務,並在執行個體上封裝快取。
sudo yum update -y
-
安裝最新的 Docker Community Edition 套裝服務。
sudo yum install docker
-
啟動 Docker 服務。
sudo service docker start
-
將
ec2-user
新增至docker
群組,讓您可以在不使用sudo
的情況下執行 Docker 命令。sudo usermod -a -G docker ec2-user
-
登出並重新登入,以取得新的
docker
群組許可。您可以關閉目前的SSH終端機視窗,並在新的 中重新連線至執行個體,來完成此操作。您的新SSH工作階段將具有適當的docker
群組許可。 -
驗證
ec2-user
可以在不使用sudo
的情況下執行 Docker 命令。docker info
注意
在某些情況下,您可能需要重新啟動執行個體,才能提供
ec2-user
存取 Docker 常駐程式的許可。如果您看到下列錯誤,請嘗試重新啟動執行個體:Cannot connect to the Docker daemon. Is the docker daemon running on this host?
建立 Docker 映像
Amazon ECS任務定義使用 Docker 映像在叢集中的容器執行個體上啟動容器。在本節中,您可以建立簡單 Web 應用程式的 Docker 映像,並在本機系統或 Amazon EC2執行個體上進行測試,然後將映像推送至 Amazon ECR容器登錄檔,以便在 Amazon ECS任務定義中使用。
建立簡單 Web 應用程式的 Docker 映像
-
建立稱為
Dockerfile
的檔案。Dockerfile 是一種資訊清單,說明用於您 Docker 映像的基本映像,以及您要安裝並在其上執行的項目。如需 Dockerfile 的詳細資訊,請前往「Dockerfile 參考」。 touch Dockerfile
-
編輯您剛建立的
Dockerfile
,並新增下列內容。FROM public.ecr.aws/amazonlinux/amazonlinux:latest # Update installed packages and install Apache RUN yum update -y && \ yum install -y httpd # Write hello world message RUN echo 'Hello World!' > /var/www/html/index.html # Configure Apache RUN echo 'mkdir -p /var/run/httpd' >> /root/run_apache.sh && \ echo 'mkdir -p /var/lock/httpd' >> /root/run_apache.sh && \ echo '/usr/sbin/httpd -D FOREGROUND' >> /root/run_apache.sh && \ chmod 755 /root/run_apache.sh EXPOSE 80 CMD /root/run_apache.sh
此 Dockerfile 使用託管在 Amazon ECR Public 上的公有 Amazon Linux 2 映像。
RUN
指令會更新套件快取,並安裝 Web 伺服器的一些軟體套件服務,然後寫入 "Hello World!" 內容至 Web 伺服器文件根目錄。EXPOSE
該指示表示容器上的連接埠 80 是正在接聽的連接埠 80,而該CMD
指示會啟動 Web 伺服器。 -
從 Dockerfile 建置 Docker 映像。
注意
在下列命令中,有些 Docker 版本可能需要 Dockerfile 的完整路徑,而不是下面所示的相對路徑。
docker build -t hello-world .
-
列出您的容器映像。
docker images --filter reference=hello-world
輸出:
REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest e9ffedc8c286 4 minutes ago 194MB
-
執行新建置的映像。
-p 80:80
選項會將容器上的公開連接埠 80 映射至主機系統上的連接埠 80。docker run -t -i -p 80:80 hello-world
注意
Apache Web 伺服器中的輸出會顯示在終端機視窗中。您可以忽略 "
Could not reliably determine the fully qualified domain name
" 訊息。 -
開啟瀏覽器,然後指向執行 Docker 並託管容器的伺服器。
-
如果您使用的是EC2執行個體,這是伺服器的公DNS有值,與您用來使用 連線至執行個體的地址相同SSH。請確定您執行個體的安全群組允許連接埠 80 上的入站流量。
-
如果您在本機執行 Docker,請將瀏覽器指向 http://localhost/
。 -
如果您在 Windows docker-machine 或 Mac 電腦上使用 ,請使用 docker-machine ip命令尋找託管 Docker 的 VirtualBox VM IP 地址,以取代
machine-name
以及您正在使用的Docker 機器名稱。docker-machine ip
machine-name
您應該會看到網頁,內含您的 "Hello World!" 陳述式。
-
-
輸入 Ctrl + c,以停止 Docker 容器。
推送映像至 Amazon Elastic Container Registry
Amazon ECR 是受管 AWS Docker 登錄服務。您可以使用 Docker CLI來推送、提取和管理 Amazon ECR儲存庫中的映像。如需 Amazon ECR產品詳細資訊、特色客戶案例研究和 FAQs,請參閱 Amazon Elastic Container Registry 產品詳細資訊頁面。
標記您的映像並將其推送至 Amazon ECR
-
建立 Amazon ECR儲存庫以存放
hello-world
映像。請記下輸出中的repositoryUri
。region
使用 取代 AWS 區域,例如us-east-1
。aws ecr create-repository --repository-name
hello-repository
--regionregion
輸出:
{ "repository": { "registryId": "
aws_account_id
", "repositoryName": "hello-repository", "repositoryArn": "arn:aws:ecr:region
:aws_account_id
:repository/hello-repository", "createdAt": 1505337806.0, "repositoryUri": "aws_account_id
.dkr.ecr.region
.amazonaws.com/hello-repository" } } -
為
hello-world
映像標記上一步中的repositoryUri
值。docker tag hello-world
aws_account_id
.dkr.ecr.region
.amazonaws.com/hello-repository
-
執行 aws ecr get-login-password 命令。指定URI您要進行身分驗證的登錄檔。如需詳細資訊,請參閱《Amazon Elastic Container Registry 使用者指南》中的登錄檔身分驗證。
aws ecr get-login-password --region
region
| docker login --username AWS --password-stdinaws_account_id
.dkr.ecr.region
.amazonaws.com輸出:
Login Succeeded
重要
若您收到錯誤,請安裝或升級至最新版本的 AWS CLI。如需詳細資訊,請參閱《AWS Command Line Interface 使用者指南》中的安裝 AWS Command Line Interface。
-
使用先前步驟ECR
repositoryUri
的值將映像推送至 Amazon。docker push
aws_account_id
.dkr.ecr.region
.amazonaws.com/hello-repository
清除
若要繼續建立 Amazon ECS任務定義並使用容器映像啟動任務,請跳至 後續步驟。當您完成 Amazon ECR映像的實驗時,您可以刪除儲存庫,這樣您就不需要支付映像儲存的費用。
aws ecr delete-repository --repository-name
hello-repository
--regionregion
--force
後續步驟
任務定義需要任務執行角色。如需詳細資訊,請參閱Amazon ECS任務執行IAM角色。
建立容器映像並將其推送至 Amazon 之後ECR,您可以在任務定義中使用該映像。如需詳細資訊,請參閱下列其中一個項目: