實驗概覽
某團隊正在開發(fā)一款在線游戲。樂觀地認為該游戲會取得成功,并預(yù)計會有成千上萬的游戲玩家通過互聯(lián)網(wǎng)訪問這款游戲。希望減少放在基礎(chǔ)設(shè)施上的精力,更多地關(guān)注游戲開發(fā)。但不想分配任何前期基礎(chǔ)設(shè)施資本來部署這款游戲。但是,想確保該應(yīng)用程序在部署后可以針對用戶高峰期進行擴展。
這款在線游戲名為 “Web 2048”,已準備好發(fā)布。云架構(gòu)師建議在 AWS Fargate 上使用 Amazon Elastic Container Service (Amazon ECS)。
在本實驗中,您需要將基于 Web 的游戲作為 Docker 容器映像構(gòu)建,將其推送到 Amazon Elastic Container Registry (Amazon ECR),并創(chuàng)建一個在 AWS Fargate 上運行 Docker 容器的 Amazon ECS 集群。
目標
完成本實驗后,將能夠:
- 將容器映像上傳到要用于部署
Amazon ECS 的 Amazon ECR 存儲庫
。- 將容器從存儲庫部署到
Amazon ECS Fargate 集群
。- 創(chuàng)建
Amazon ECS 服務(wù)和任務(wù)
。- 在 Amazon ECS Fargate 集群的 Docker 容器中
測試并演示基于 Web 的應(yīng)用程序
。
實驗環(huán)境
在本實驗中,在實驗環(huán)境中預(yù)置了一個單獨的 Amazon Virtual Private Cloud (Amazon VPC),其中包含公有子網(wǎng)、互聯(lián)網(wǎng)網(wǎng)關(guān)、有路由的路由表、Application Load Balancer、安全組、EC2 實例以及 AWS Identity and Access Management (IAM) 角色。
下圖顯示了為本實驗預(yù)置的資源:
Amazon Elastic Container Service (Amazon ECS) 是一項高度可擴展的高性能容器管理服務(wù),支持 Docker 容器。它可以幫助您在 Amazon Elastic Compute Cloud (Amazon EC2) 實例托管的集群上輕松運行應(yīng)用程序。使用 Amazon ECS,您不需要安裝、運維和擴展自己的集群管理基礎(chǔ)設(shè)施。
AWS Fargate 是一種適用于容器的無服務(wù)器計算引擎,可與 Amazon ECS 和 Amazon EKS 配合使用。借助 Fargate,您可以專注于構(gòu)建自己的應(yīng)用程序。借助 Fargate,您無需預(yù)置和管理服務(wù)器,而且可以為每個應(yīng)用程序指定資源并為其付費,還能通過設(shè)計隔離應(yīng)用程序來提高安全性。
注意:在本實驗中,所有步驟都需要使用 Linux 終端的 AWS CLI。為了熟悉命令行以開始構(gòu)建過程,盡量不要復(fù)制和粘貼每個步驟中的命令,而是盡可能多地自己鍵入命令。大多數(shù)關(guān)于容器的真實場景都使用命令行方法。完成本實驗后,應(yīng)該能夠使用這些相同的命令來幫助構(gòu)建您自己的概念證明。
任務(wù) 1:連接到實驗命令主機
在此任務(wù)中,將連接到運行 Amazon Linux 2 操作系統(tǒng)的 Amazon EC2 實例,然后克隆本實驗所需的 2048 GitHub 存儲庫。
復(fù)制實驗頁面左側(cè)的 CommandHostSessionUrl 的值,并將其粘貼到新的瀏覽器標簽頁中,然后按 Enter 鍵。
https://us-east-2.console.aws.amazon.com/systems-manager/session-manager/i-0910a8d48fc80b8c2?region=us-east-2
命令:運行以下命令,檢查 Git 和 Docker 版本并驗證安裝:
docker -v && git --version
終端應(yīng)該返回類似于下面的內(nèi)容。
命令:Git 在運行命令的目錄內(nèi)創(chuàng)建一個目錄。使用以下命令確認您當前的工作目錄:
pwd
將目錄更改為主目錄并克隆 Git 存儲庫。
命令:在終端窗口中,復(fù)制并粘貼(或鍵入)以下命令:
cd ~
git clone https://github.com/gabrielecirulli/2048
命令:列出目錄內(nèi)容以確認存儲庫已克隆:
ls -l | grep 2048
預(yù)期輸出:
rwxr-xr-x 6 root root 200 Sep 3 12:00 2048
附加信息:
- Docker 是一種命令行實用程序,用于在環(huán)境中創(chuàng)建和管理 Docker 容器。
- Git 是一個分布式的開源版本控制系統(tǒng) (VCS),它允許您存儲代碼、跟蹤修訂歷史記錄、合并代碼更改,并在需要時恢復(fù)為早期代碼版本。
任務(wù) 2:將應(yīng)用程序容器化
在此任務(wù)中,將創(chuàng)建用于在 Amazon ECS 上部署容器的 Dockerfile。容器將軟件與其環(huán)境隔離開來,盡管存在開發(fā)環(huán)境與生產(chǎn)環(huán)境或云托管與本地托管等差異,仍能確保統(tǒng)一工作。這樣做可以大幅提高應(yīng)用程序的一致性和可移植性。
在命令主機會話中,請確認是否打開了 ssm_user 主目錄。
命令:使用以下命令導航到 2048 目錄:
cd 2048
使用 heredoc 創(chuàng)建 Dockerfile。heredoc 是 here document 的縮寫,這是一種在編程語言中定義多行字符串的方式。它可以創(chuàng)建跨越多行的文本塊,而不必使用轉(zhuǎn)義字符來連接多個字符串。
命令:要在此目錄中創(chuàng)建 Dockerfile,請運行以下 cat 命令以使用 heredoc:
注意:Dockerfile 必須以大寫字母開頭,并且沒有文件擴展名。
cat << EOF > Dockerfile
FROM nginx:latest
COPY . /usr/share/nginx/html
EXPOSE 80
EOF
Docker 使用此文件構(gòu)建一個容器映像,將軟件打包成標準單元,用于開發(fā)、發(fā)送和部署。
示例 Dockerfile
FROM nginx:latest
COPY . /usr/share/nginx/html
EXPOSE 80
思考:查看此 Dockerfile 的組件:
-
FROM 命令定義構(gòu)建容器的基礎(chǔ)映像。您還可以使用 Nginx 等供應(yīng)商來發(fā)布、維護和支持官方供應(yīng)商容器映像,而不是使用通用的 Linux 發(fā)行版。在您的 Dockerfile 中,請注意基礎(chǔ)映像是
nginx:latest
。Docker 將構(gòu)建一個基礎(chǔ)映像,其中安裝了所有 nginx 需求,并使用默認配置,從而無需冗長的 Dockerfile 和耗時的部署。這縮短了安裝時間,可以為您節(jié)省數(shù)千小時,具體取決于執(zhí)行的部署數(shù)量。 -
COPY 命令允許 Docker 將本地文件復(fù)制到容器映像中。在本實驗中,我們克隆了 2048 Git 存儲庫,現(xiàn)在正將該存儲庫的所有內(nèi)容復(fù)制到默認的 nginx 目錄中,用 Git 存儲庫中的
index.html
文件和所有應(yīng)用程序代碼替換 nginx 默認index.html
頁面。任何額外的文件或目錄均已位于它們應(yīng)在的位置,構(gòu)成適當?shù)哪夸浗Y(jié)構(gòu),使應(yīng)用程序按預(yù)期運行。 -
EXPOSE 命令僅打開容器上的一個端口。創(chuàng)建 Amazon ECS 集群時,您將有機會使用端口轉(zhuǎn)發(fā)。此功能可用于混淆非默認端口的使用。在本實驗中,我們將同時使用容器中的端口 80 和 AWS Fargate 中的端口 80,由 Application Load Balancer 上的偵聽器轉(zhuǎn)發(fā)這些端口。
任務(wù) 3:構(gòu)建 Web2048 容器
在此任務(wù)中,將在命令主機上構(gòu)建和測試 Docker 容器。
返回到顯示命令主機會話的瀏覽器標簽頁。
注意:如果您關(guān)閉了堡壘主機瀏覽器標簽頁,請參考 “任務(wù) 1:連接到命令主機” 部分。
命令:要確認當前的工作目錄是 2048 目錄,請運行以下命令:
cd ~/2048
ls -l
預(yù)期輸出:
total 32
-rw-r--r-- 1 root root 1970 Sep 3 12:00 CONTRIBUTING.md
-rw-r--r-- 1 root root 59 Sep 3 12:02 Dockerfile
-rw-r--r-- 1 root root 1083 Sep 3 12:00 LICENSE.txt
-rw-r--r-- 1 root root 2280 Sep 3 12:00 README.md
-rw-r--r-- 1 root root 300 Sep 3 12:00 Rakefile
-rw-r--r-- 1 root root 4286 Sep 3 12:00 favicon.ico
-rw-r--r-- 1 root root 3988 Sep 3 12:00 index.html
drwxr-xr-x 2 root root 252 Sep 3 12:00 js
drwxr-xr-x 2 root root 125 Sep 3 12:00 meta
drwxr-xr-x 3 root root 72 Sep 3 12:00 style
Web2048 是一款簡單的 2048 游戲,可在 Web 瀏覽器中運行。
注意:開發(fā)人員通常會遇到的一個問題是:在不使用 sudo 的情況下運行 docker
命令,會出現(xiàn) permission denied(權(quán)限被拒絕)錯誤。將用戶放置在docker
組中,您就可以在沒有 sudo 權(quán)限的情況下運行 docker 命令,使本地用戶權(quán)限與最低權(quán)限訪問控制保持一致。有一個簡單的解決辦法,您可以自己試試。
命令:運行以下命令修復(fù)此錯誤:
sudo usermod -aG docker ssm-user
newgrp docker
現(xiàn)在可以使用 sudo 來運行 docker 命令。
命令:首先,檢查庫存中當前有哪些容器映像(應(yīng)該一個也沒有):
docker images
命令:要為網(wǎng)站構(gòu)建 Docker 容器,請運行以下命令:[警告:確保在代碼塊末尾處加上句點 (.)。]
docker build -t web2048 .
預(yù)期輸出:
[root@ip-10-0-0-185 2048]# docker build -t web2048 .
Sending build context to Docker daemon 1.369MB
Step 1/3 : FROM nginx:latest
latest: Pulling from library/nginx
52d2b7f179e3: Pull complete
fd9f026c6310: Pull complete
055fa98b4363: Pull complete
96576293dd29: Pull complete
a7c4092be904: Pull complete
e3b6889c8954: Pull complete
da761d9a302b: Pull complete
Digest: sha256:104c7c5c54f2685f0f46f3be607ce60da7085da3eaa5ad22d3d9f01594295e9c
Status: Downloaded newer image for nginx:latest
---> eea7b3dcba7e
Step 2/3 : COPY . /usr/share/nginx/html
---> 9a7887c7a397
Step 3/3 : EXPOSE 80
---> Running in 1edf79febd20
Removing intermediate container 1edf79febd20
---> 096cafd2808b
Successfully built 096cafd2808b
Successfully tagged web2048:latest
構(gòu)建只需幾秒鐘即可完成。滾動到終端窗口底部,直到您看到一條表明構(gòu)建成功的如下類似消息:
Successfully built 096cafd2808b
Successfully tagged web2048:latest
命令:接下來,使用以下命令再次檢查映像列表,查看新的容器映像:
docker images
預(yù)期輸出:
[root@ip-10-0-0-185 2048]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
web2048 latest 096cafd2808b 59 seconds ago 188MB
nginx latest eea7b3dcba7e 2 weeks ago 187MB
命令:接下來,要查看已經(jīng)構(gòu)建了哪些容器(應(yīng)該沒有),請運行以下命令:
docker container ls
命令:現(xiàn)在,您已經(jīng)構(gòu)建了 Docker 映像,接著運行以下命令,在命令主機上測試映像:
docker run -d -it -p 80:80 web2048
思考:run 命令啟動該容器。命令中的 -d 標記以分離模式運行容器。根據(jù)設(shè)計,當用于運行容器的根進程退出時,容器也會退出分離模式。這樣,您可以在容器運行時繼續(xù)使用終端。命令中的 -p 80:80 參數(shù)將命令主機上的 80 端口綁定到 Docker 容器上的 80 端口。
注意:對于交互式進程(如 shell),您必須一起使用 -i -t(通常用作 -it),用于為容器進程分配一個 TTY。這些標記不是本實驗必需的;但是它們對排除容器故障非常有用。
[root@ip-10-0-0-185 2048]# docker run -d -it -p 80:80 web2048
e854ba65535e8380affccaef49b398baf9458e0c5a204182a2af0570656b2099
命令:您現(xiàn)在可以通過運行以下命令查看容器:
注意:可以使用鍵盤上的向上和向下箭頭查看以前使用的命令,無需復(fù)制和粘貼已經(jīng)運行的命令。還可以使用history
命令查看在一個會話中運行的所有命令。還可以結(jié)合使用 history 命令與 grep 和 pipe out 關(guān)鍵字搜索詞。
history | grep container
對于高級用戶,可以借助ctrl + r
擊鍵來利用遞歸反向索引搜索。鍵入您要查找的關(guān)鍵字,按 Enter 鍵,終端將再次運行該命令。
命令:您可以嘗試使用以下命令:
ctrl + r
命令:現(xiàn)在鍵入要搜索的關(guān)鍵字(即 container)。按 Enter 鍵。
預(yù)期輸出:
(reverse-i-search)`container': docker container ls
# press enter and the "list containers" command runs again.
[root@ip-10-0-0-185 ~]# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e854ba65535e web2048 "/docker-entrypoint.…" 3 minutes ago Up 3 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp amazing_goodall
命令:如果遇到問題,或者不想使用遞歸搜索,只需鍵入以下命令:
docker container ls
命令:接下來,通過從 Web 瀏覽器訪問命令主機來測試容器。要獲取 EC2 實例的公有 IP 地址,請運行以下命令:
curl http://169.254.169.254/latest/meta-data/public-ipv4 -w "\n"
預(yù)期輸出:
[root@ip-10-0-0-185 ~]# curl http://169.254.169.254/latest/meta-data/public-ipv4 -w "\n"
3.141.202.174
復(fù)制輸出中的公有 IP 值。
打開一個新的瀏覽器標簽頁,在其中粘貼您剛剛復(fù)制的公有 IP 地址,然后按 Enter 鍵。
應(yīng)該能夠看到 2048 應(yīng)用程序。
返回到終端會話
要停止此 Docker 容器,請運行以下命令??梢栽俅问褂?docker container ls
命令,獲取容器 ID 和名稱。雖然容器 ID 是唯一的,但容器的每個實例化都有一個唯一的規(guī)范名稱。在運行命令期間,還可以使用 –name 標記命名每個容器。
命令:找到您的容器 ID 并運行以下命令,將 CONTAINER ID 替換為 web2048 容器的容器 ID:
docker stop CONTAINER ID
任務(wù) 4:創(chuàng)建 Amazon ECR 存儲庫并推送 Docker 映像
現(xiàn)在已構(gòu)建了一個工作容器映像,接下來需要將該映像存儲在其他人和資源可以訪問的位置。Amazon ECR 是滿足該使用案例要求的理想解決方案。使用 AWS CLI,將創(chuàng)建一個 Amazon ECR 存儲庫,并將剛剛測試過的映像推送到 Amazon ECR 中進行存儲。
之前已經(jīng)創(chuàng)建了 Web2048 Docker 映像。使用 docker images 命令再次查看映像。記下類別名稱(即 REPOSITORY、TAG、IMAGE ID、CREATED 和 SIZE),特別是 REPOSITORY。存儲庫是具有不同版本和名稱標簽的同一 Docker 映像的邏輯組。到目前為止,存儲庫名稱只能在本地訪問。要在共享映像存儲庫(如 Amazon ECR)中共享容器映像,必須將容器映像與中央映像存儲庫相關(guān)聯(lián)。
命令:要獲取有關(guān)所有已創(chuàng)建 Docker 映像的信息,請運行以下命令:
docker images
預(yù)期輸出:
REPOSITORY TAG IMAGE ID CREATED SIZE
web2048 latest 096cafd2808b 11 minutes ago 188MB
nginx latest eea7b3dcba7e 2 weeks ago 187MB
在輸出中,IMAGE ID 是一個唯一標識符,可用于引用特定版本的 Docker 映像。也可以通過與映像關(guān)聯(lián)的存儲庫來引用該映像。
命令:運行aws configure
并將區(qū)域變量設(shè)置為實驗所在的區(qū)域。
AWS Access Key ID [None]:
AWS Secret Access Key [None]:
Default region name []: <YOUR_REGION>
Default output format [json]: json
注意:將 <YOUR_REGION> 替換為的所在的區(qū)域。
命令:要為 Docker 映像創(chuàng)建 Amazon ECR 存儲庫,請運行以下命令。
aws ecr create-repository --repository-name web2048
預(yù)期輸出:
[root@ip-10-0-0-185 ~]# aws ecr create-repository --repository-name web2048
{
"repository": {
"repositoryUri": "654948215222.dkr.ecr.us-east-2.amazonaws.com/web2048",
"imageScanningConfiguration": {
"scanOnPush": false
},
"encryptionConfiguration": {
"encryptionType": "AES256"
},
"registryId": "654948215222",
"imageTagMutability": "MUTABLE",
"repositoryArn": "arn:aws:ecr:us-east-2:654948215222:repository/web2048",
"repositoryName": "web2048",
"createdAt": 1693743822.0
}
}
命令:運行以下命令,查看剛剛創(chuàng)建的 Amazon ECR 存儲庫:
aws ecr describe-repositories --query 'repositories[].[repositoryName, repositoryUri]' --output table
預(yù)期輸出:
[root@ip-10-0-0-185 ~]# aws ecr describe-repositories --query 'repositories[].[repositoryName, repositoryUri]' --output table
---------------------------------------------------------------------
| DescribeRepositories |
+---------+---------------------------------------------------------+
| web2048| 654948215222.dkr.ecr.us-east-2.amazonaws.com/web2048 |
+---------+---------------------------------------------------------+
稍后需要在本實驗中使用該 URI??梢詫⒃?URI 的值設(shè)置為一個環(huán)境變量
,而不是將其復(fù)制到文本編輯器或記事本中供以后使用。這樣就可以重用該命令而不必查找 URI 值。
命令:要將存儲庫 URI 的值導出到一個環(huán)境變量中,請運行以下命令:
export REPOSITORY_URI=$(aws ecr describe-repositories --query 'repositories[].[repositoryUri]' --output text)
echo ${REPOSITORY_URI}
echo 命令應(yīng)當顯示當前 ECR 存儲庫 URI。
必須先登錄 Amazon ECR,然后才能將 Docker 映像推送到存儲庫。get-login 命令返回一個有效期為 12 小時的 docker login 令牌。您可以將此命令的輸出轉(zhuǎn)發(fā)到 shell,以運行 docker login 命令并完成身份驗證。
命令:要對 Amazon ECR 進行身份驗證,請運行以下命令:
export ACCOUNT_ID=$(aws sts get-caller-identity --output text --query Account)
export AWS_REGION=$(curl -s 169.254.169.254/latest/dynamic/instance-identity/document | jq -r '.region')
aws ecr get-login-password --region ${AWS_REGION} | docker login --username AWS --password-stdin ${ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com
預(yù)期輸出:
現(xiàn)在,使用 Docker 映像所在的存儲庫的 URI 標記該映像,并使用 latest 標簽表明它是最新構(gòu)建版本。
命令:運行以下命令:
docker tag web2048:latest ${REPOSITORY_URI}:latest
命令:要驗證是否已應(yīng)用標簽,請重新運行 docker images 命令。存儲庫 URI 會顯示在輸出中。
docker images
預(yù)期輸出:
使用 docker push 命令,將 Docker 映像推送到存儲庫。
命令:運行以下命令:
docker push ${REPOSITORY_URI}:latest
預(yù)期輸出:
命令:運行以下命令,查看映像元數(shù)據(jù)并確認推送成功:
aws ecr describe-images --repository-name web2048
預(yù)期輸出:
任務(wù) 5:創(chuàng)建 ECS 集群
在此任務(wù)中,將創(chuàng)建一個 Amazon ECS 集群
、一個 ECS 集群任務(wù)定義
,以及一個包含容器部署任務(wù)的 ECS 集群服務(wù)
。
Amazon ECS 容器代理將代表您調(diào)用 AWS API,因此為了讓服務(wù)知道代理屬于您,它需要 IAM 策略和角色。此 IAM 角色稱為任務(wù)執(zhí)行 IAM 角色。在預(yù)置作為先決條件的實驗資源時,為您創(chuàng)建了任務(wù)執(zhí)行 IAM 角色。如果創(chuàng)建集群的用戶具有這些 IAM 權(quán)限,則將自動創(chuàng)建該角色。如果沒有,則必須手動創(chuàng)建該角色。
命令:運行以下命令,創(chuàng)建 Amazon ECS 集群,并將集群名稱 web2048 作為參數(shù)傳遞:
aws ecs create-cluster --cluster-name web2048
預(yù)期輸出:
[root@ip-10-0-0-185 ~]# aws ecs create-cluster --cluster-name web2048
{
"cluster": {
"status": "ACTIVE",
"defaultCapacityProviderStrategy": [],
"statistics": [],
"capacityProviders": [],
"tags": [],
"clusterName": "web2048",
"settings": [
{
"name": "containerInsights",
"value": "disabled"
}
],
"registeredContainerInstancesCount": 0,
"pendingTasksCount": 0,
"runningTasksCount": 0,
"activeServicesCount": 0,
"clusterArn": "arn:aws:ecs:us-east-2:654948215222:cluster/web2048"
}
}
在 ECS 集群上運行任務(wù)之前,必須先注冊任務(wù)定義
。任務(wù)定義是分組在一起的容器的列表。注冊新任務(wù)定義分為兩個部分:一部分是傳遞到命令行的任務(wù)定義文件(這種方式更干凈、更容易),另一部分是使用標志和參數(shù)值注冊新任務(wù)的 AWS CLI 命令。本實驗使用第一個選項。
命令:創(chuàng)建任務(wù)定義文件。導航到主目錄。
cd ~
命令:獲取 Amazon ECR 存儲庫 URI,并將其復(fù)制到文本編輯器。將在下一步中需要用到此值。
echo ${REPOSITORY_URI}
654948215222.dkr.ecr.us-east-2.amazonaws.com/web2048
命令:為任務(wù)定義創(chuàng)建文件。
vim web2048_task_definition.json
將以下內(nèi)容添加到任務(wù)定義文件中。將 image:
鍵的存儲庫 URI 替換為上一步的值,并將 executionRoleArn
和taskRoleArn
的值替換為executionRoleArn
值:arn:aws:iam::654948215222:role/LabStack-2848353a-a5d2-4c70-b-ECSTaskExecutionRole-1VLGSX361UAJV
請勿刪除各行的"executionRoleArn":
、 taskRoleArn:
或 image:
部分,只刪除冒號后的值。另外,映像值不應(yīng)以 “https://” 開頭。它應(yīng)當以 AWS 賬戶 ID 開頭,以標簽:latest
結(jié)尾。這些值是字符串,因此應(yīng)使用雙引號括起來。
{
"family": "web2048",
"networkMode": "awsvpc",
"taskRoleArn": "arn:aws:iam::654948215222:role/LabStack-2848353a-a5d2-4c70-b-ECSTaskExecutionRole-1VLGSX361UAJV",
"executionRoleArn": "arn:aws:iam::654948215222:role/LabStack-2848353a-a5d2-4c70-b-ECSTaskExecutionRole-1VLGSX361UAJV",
"containerDefinitions": [
{
"name": "web2048",
"image": "654948215222.dkr.ecr.us-east-2.amazonaws.com/web2048:latest",
"portMappings": [
{
"containerPort": 80,
"hostPort": 80,
"protocol": "tcp"
}
],
"essential": true
}
],
"requiresCompatibilities": [
"FARGATE"
],
"cpu": "256",
"memory": "512"
}
完成文件編輯后,關(guān)閉 vim 編輯器。
命令:運行以下命令,注冊新的任務(wù)定義:
aws ecs register-task-definition --cli-input-json file://web2048_task_definition.json
成功創(chuàng)建后,應(yīng)該會獲得包含任務(wù)定義詳細信息的 JSON 輸出。
接下來,創(chuàng)建一個服務(wù)。該服務(wù)運行并維護指定任務(wù)定義中所需數(shù)量的任務(wù)。如果服務(wù)中運行的任務(wù)數(shù)量降到 desiredCount 以下,則 Amazon ECS 將在指定的集群中運行該任務(wù)的另一個副本。要創(chuàng)建服務(wù),可以將參數(shù)傳遞給 AWS CLI,也可以傳遞 --cli-input-json
標記(與任務(wù)定義的方法相同)。本實驗室使用 json 文件方法。
命令:為服務(wù)創(chuàng)建新的輸入文件:
vim web2048_service.json
復(fù)制下面的文本并粘貼到文件編輯器中。
{
"cluster": "web2048",
"serviceName": "web2048",
"taskDefinition": "web2048",
"loadBalancers": [
{
"targetGroupArn": "arn:aws:elasticloadbalancing:us-east-2:654948215222:targetgroup/ECS-Target-Group/69261bec57f1aaa4",
"containerName": "web2048",
"containerPort": 80
}
],
"desiredCount": 2,
"launchType": "FARGATE",
"platformVersion": "LATEST",
"networkConfiguration": {
"awsvpcConfiguration": {
"subnets": [
"subnet-0cf27533f0902b9e9",
"subnet-04a7886526e89872e"
],
"securityGroups": [
"sg-058441d03931d04d1"
],
"assignPublicIp": "ENABLED"
}
}
}
將 targetGroupArn 值、PublicSubnet1、PublicSubnet2 和 ecsSecurityGroup 替換為在實驗說明左側(cè)顯示的值。
arn:aws:elasticloadbalancing:us-east-2:654948215222:targetgroup/ECS-Target-Group/69261bec57f1aaa4
subnet-0cf27533f0902b9e9
subnet-04a7886526e89872e
sg-058441d03931d04d1
完成文件編輯后,關(guān)閉 vim 編輯器。
命令:創(chuàng)建服務(wù):
aws ecs create-service --cli-input-json file://web2048_service.json
成功創(chuàng)建后,您應(yīng)該會獲得包含服務(wù)詳細信息的 JSON 輸出。服務(wù)創(chuàng)建任務(wù)僅需數(shù)秒;但是,創(chuàng)建服務(wù)后,就會預(yù)置所需數(shù)量的任務(wù),任務(wù)將進入待處理狀態(tài),最終任務(wù)狀態(tài)將變?yōu)?RUNNING(正在運行)。
命令:您可以通過運行以下命令來查看任務(wù)狀態(tài):
aws ecs describe-clusters --cluster web2048
預(yù)期輸出:
[root@ip-10-0-0-185 ~]# aws ecs describe-clusters --cluster web2048
{
"clusters": [
{
"status": "ACTIVE",
"defaultCapacityProviderStrategy": [],
"statistics": [],
"capacityProviders": [],
"tags": [],
"clusterName": "web2048",
"settings": [],
"registeredContainerInstancesCount": 0,
"pendingTasksCount": 2,
"runningTasksCount": 0,
"activeServicesCount": 1,
"clusterArn": "arn:aws:ecs:us-east-2:654948215222:cluster/web2048"
}
],
"failures": []
}
記下 active ServiceCount 的值,這表示與處于 ACTIVE(活躍)狀態(tài)的集群關(guān)聯(lián)的服務(wù)數(shù)。還要記下 pendingTasksCount 和 runningTaskCount 的值。創(chuàng)建服務(wù)時,您將看到待處理任務(wù)的數(shù)量變化,當任務(wù)完成時,它們的狀態(tài)變?yōu)?RUNNING(正在運行),并且 runningTasksCount 的值會反映 desiredCount 的值。
在本實驗中,服務(wù)中定義了兩個任務(wù)。幾分鐘后,任務(wù)應(yīng)當進入 RUNNING(正在運行)狀態(tài)。您可以重復(fù)前面的命令來監(jiān)控進度。當 runningTaskCount 值等于 2 時,繼續(xù)下一步。
下圖顯示了自己創(chuàng)建的資源以及我們?yōu)槟鷦?chuàng)建的資源:
任務(wù) 6:測試應(yīng)用程序
從實驗說明屏幕的左側(cè)復(fù)制 albPublicDnsUrl 值,并將其粘貼到 Web 瀏覽器的新標簽頁中。Lab-3-ALB-1477954992.us-east-2.elb.amazonaws.com
隨后系統(tǒng)將為您顯示 web2048 應(yīng)用程序。使用電腦上的箭頭鍵玩游戲,以便測試應(yīng)用程序。此方法應(yīng)該與在命令主機上測試容器相同。文章來源:http://www.zghlxwxcb.cn/news/detail-706445.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-706445.html
總結(jié)
- 了解構(gòu)建 Docker 映像所需的步驟
- 將容器映像上傳到 Amazon ECR 存儲庫,以便用于部署 Amazon ECS
- 將存儲庫中的容器部署到 AWS Fargate 集群
- 使用在 Amazon ECS Fargate 集群上運行的 AWS CLI 和容器來部署示例應(yīng)用程序
到了這里,關(guān)于【AWS實驗 】在 AWS Fargate 上使用 Amazon ECS 部署應(yīng)用程序的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!