在 Amazon Lightsail 上部署容器 Web 應用程式

入門指南

單元 3:部署容器

在本單元,我們要將容器部署到雲端

簡介

現在您的 Amazon Lightsail Container Service 已經就緒,下一個步驟是部署容器。

Amazon Lightsail 能從公有容器映像儲存庫,例如 Docker Hub、Amazon ECR Public Gallery 或您的本機部署容器。

在此指南中,我們將直接從您的本機電腦進行部署。

您將學到的內容

  • 如何推送本機容器映像至 Amazon Lightsail
  • 如何將一個版本的容器映像部署至容器服務

 完成時間

10 分鐘

 單元先決條件

  • 有管理員等級存取權限的 AWS 帳戶**
  • 建議的瀏覽器:最新版的 Chrome 或 Firefox

[**]過去 24 小時內建立的帳戶可能尚未有權存取本教學課程所需的服務。

實作

推送本機容器映像

部署容器的第一個步驟是將容器映像推送至 Amazon Lightsail

開啟終端機,進入您建立容器的目錄,鍵入以下命令。確定使用建立 Lightsail 容器服務的相同區域。

aws lightsail push-container-image    \
    --region eu-west-3                \
    --service-name signup-application \
    --label latest                    \
    --image demo-flask-signup:latest

# the command outputs the following lines
f017a6ddb209: Pushed 
b94dee417b5e: Pushed 
37d77b23a488: Pushed 
8e77a3b871e7: Pushed 
4bc5d67b6427: Pushed 
ce8ffb5c560e: Pushed 
4226d5d0360f: Pushed 
9d1af766c818: Pushed 
d97733c0a3b6: Pushed 
c553c6ba5f13: Pushed 
48b4a40de359: Pushed 
ace9ed9bcfaf: Pushed 
764055ebc9a7: Pushed 
Digest: sha256:128f84907d30a1fb47c1888720485fa8050cc99bc1034e0cfd1f46d3b6e57e19
Image "demo-flask-signup:latest" registered.
Refer to this image as ":signup-application.latest.1" in deployments.    

命令會叫用 Docker 推送,以將您的映像上傳至 Amazon Lightsail。取決於您的網路頻寬,完成可能需要幾分鐘。

輸出的最後一行是提供容器的內部名稱,在我們的案例中是 :signup-application.latest.1。請記下來,因為將容器部署至容器服務時會需要用到這個名稱。如果您在稍後想要存取容器名稱,可鍵入以下命令:

aws lightsail get-container-images    \
    --region eu-west-3                \
    --service-name signup-application

# the command outputs the following lines
{
    "containerImages": [
        {
            "image": ":signup-application.latest.1",
            "digest": "sha256:128f84907d30a1fb47c1888720485fa8050cc99bc1034e0cfd1f46d3b6e57e19",
            "createdAt": "2021-07-17T15:11:49+02:00"
        }
    ]
}  

推送本機容器映像至 Lightsail

現在容器映像已存放至 Amazon Lightsail。我們可將該映象部署至容器服務。

Lightsail 需要以下資訊以便建立部署:

  • 所要部署的容器映像名稱 (:signup-application.latest.1,如同前一命令所傳回)
  • 容器顯露的網路連接埠 (如同 Dockerfile 設定中所說明)
  • (選擇性) 可公開存取的網路端點詳細資訊:TCP 連接埠號和通訊協定,IP 會自動指派。

這些資訊都存放在您在部署之前所需建立的 JSON 檔案中。

建立名為 lc.json 的 JSON 檔案。如您是從下載的程式碼所進行,則應修改位於容器同一個目錄內的現有 lc.json 檔案。將以下 json 複製至檔案內:

{
    "serviceName": "signup-application",
    "containers": {
        "signup-app-container": {
            "image": ":signup-application.latest.1",
            "ports": {
                "80": "HTTP"
            }
        }
    },
    "publicEndpoint": {
        "containerName": "signup-app-container",
        "containerPort": 80
    }
}

接著,鍵入以下命令以部署容器:

aws lightsail create-container-service-deployment \
    --region eu-west-3                            \
    --cli-input-json file://lc.json

# the command outputs the following 

{
    "containerService": {
        "containerServiceName": "signup-application",
        "arn": "arn:aws:lightsail:eu-west-3:012345678901:ContainerService/528a0bcf-fd14-42d4-a09a-943a241adc51",
        "createdAt": "2021-07-17T13:38:40+02:00",
        "location": {
            "availabilityZone": "all",
            "regionName": "eu-west-3"
        },
        "resourceType": "ContainerService",
        "tags": [],
        "power": "nano",
        "powerId": "nano-1",
        "state": "DEPLOYING",
        "scale": 2,
        "nextDeployment": {
            "version": 1,
            "state": "ACTIVATING",
            "containers": {
                "signup-app-container": {
                    "image": ":signup-application.latest.1",
                    "command": [],
                    "environment": {},
                    "ports": {
                        "80": "HTTP"
                    }
                }
            },
            "publicEndpoint": {
                "containerName": "signup-app-container",
                "containerPort": 80,
                "healthCheck": {
                    "healthyThreshold": 2,
                    "unhealthyThreshold": 2,
                    "timeoutSeconds": 2,
                    "intervalSeconds": 5,
                    "path": "/",
                    "successCodes": "200-499"
                }
            },
            "createdAt": "2021-07-17T15:31:01+02:00"
        },
        "isDisabled": false,
        "principalArn": "arn:aws:iam::577312533299:role/amazon/lightsail/eu-west-3/containers/signup-application/1jetjd21p8qshe57seuh71tnrnn29ps77lnno20sbgl2ghbuc0r0",
        "privateDomainName": "signup-application.service.local",
        "url": "https://signup-application.me04fvc6dbk4e.eu-west-3.cs.amazonlightsail.com/"
    }
}

請注意 "state": "DEPLOYING" 的狀態。經過一會兒,狀態會變成 ACTIVE。完成部署需要幾分鐘。您可使用以下命令檢查部署的狀態:

# while deploying
aws lightsail get-container-services      \
    --region eu-west-3                    \
    --query "containerServices[].nextDeployment.state"

# once deployed
aws lightsail get-container-services      \
    --region eu-west-3                    \
    --query "containerServices[].currentDeployment.state" 

測試您的部署

若要測試部署,請先擷取為您建立的 URL Lightsail。開啟一個終端機,然後鍵入以下命令:

aws lightsail get-container-services        \
    --region eu-west-3                      \
    --query "containerServices[].url" 

# the command outputs something like the below 
[
    "https://signup-application.me04fvc6dbk4e.eu-west-3.cs.amazonlightsail.com/"
]

開啟您喜愛的瀏覽器,指向您的部署 URL。

或者也可以使用 cURL 從命令列測試端點:

curl -I https://signup-application.me04fvc6dbk4e.eu-west-3.cs.amazonlightsail.com/

HTTP/2 200 
date: Sat, 17 Jul 2021 13:38:04 GMT
content-type: text/html; charset=utf-8
content-length: 4579
server: nginx/1.21.1

恭喜,您的容器現在已部署至 Amazon Lightsail。

結語

在本指南中,您學會如何部署容器至 Amazon Lightsail。 在下一個單元中,您將學習如何更新容器。

下一個單元:更新容器

讓我們知道我們表現如何。