亚马逊云科技Amazon Lightsail部署容器化Web应用程序教程

Amazon Lightsail是一种易于使用的虚拟专用服务器(VPS)提供程序,以经济实惠的月度价格为用户提供构建应用程序或网站所需的一切资源。本文就以亚马逊云科技为例,为大家介绍下使用Amazon Lightsail部署容器化Web应用程序教程,有需要的朋友可以参考一下。

亚马逊云科技Amazon Lightsail提供免费试用服务,提供的配置是1核2G、60GB SSD硬盘,Linux/Windows/Unix系统可选,3TB数据传输,还提供CDN永久免费、数据库捆绑包3个月免费、容器(Micro-1节点)3个月免费等免费服务,可以免费试用3个月。

亚马逊云科技免费Amazon Lightsail:点击获取

相关推荐:《如何注册亚马逊AWS账号

一、在本地构建容器并测试应用程序

1、创建客户端应用程序

本教程使用的Web应用程序是一个使用Python基于Flask应用程序框架开发的Web应用程序。简而言之,Flask框架包含一个用于接收HTTP请求的迷你服务器、将特定请求与Python代码相关联的路由机制,以及呈现最终HTML的模板引擎。

2、下载项目

3、构建容器

在容器中部署应用:打开终端,进入文件所在目录,运行以下命令:

docker build -t demo-flask-signup .

如果在基于Apple Silicon的设备上运行本实验,请使用Docker的多架构构建功能。为确保容器能在Amazon Lightsail上运行,请运行以下附加命令:

docker buildx create lightsaildemo
docker buildx build -t demo-flask-signup:amd-build-latest --platform linux/amd64 . —load

用户可以使用以下命令列出系统中的所有容器镜像:

docker images

该命令输出如下类似结果:

REPOSITORY                        TAG                                        IMAGE ID           CREATED              SIZE
demo-flask-signup               latest                                     ad80ca6ce65d   44 seconds ago   725MB

现在,用户可以在本地计算机上测试容器。先启动容器,然后在浏览器上访问该容器。

docker run -p 8080:80 --rm -v ~/.aws:/root/.aws demo-flask-signup:latest

现在容器已经运行。打开浏览器,然后访问容器地址:http://localhost:8080。

容器

二、在Amazon Lightsail上创建容器服务

1、安装AWS CLI Lightsail扩展程序

为了与亚马逊VPS Amazon Lightsail容器交互,用户需要安装AWS CLI和容器服务插件。容器服务插件是一组可以实现Lightsail操Docker容器的扩展程序。用户只需进行一次设置,便可启用容器服务插件。

2、创建容器服务

要部署容器,首先要创建一个Lightsail容器服务。容器服务是部署和运行容器所需的计算基础设施,它是由计算节点、TLS证书、DNS域名和可选的负载均衡器组成。

在创建容器服务之前,用户需要配置三个参数:

  • 选择要部署容器的AWS区域,建议选择一个在地理位置上靠近目标用户所在地的区域。
  • 计算节点规格,用户可以选择从Nano到XLarge的节点类型。Nano:0.25个vCPU和512 MB RAM;XLarge:4个vCPU和8 GB RAM。
  • 节点数量可以是1至20个。

创建Lightsail容器服务。打开终端,然后运行以下命令:

aws lightsail create-container-service --region eu-west-3 --service-name signup-application --power nano --scale 1

本文选择的是在AWS欧洲(巴黎)区域(eu-west-3)部署Nano类型计算节点。

该命令会输出一条JSON消息,如下所示:

# aws lightsail create-container-service --region eu-west-3 --service-name signup-application --power nano --scale 1

{
"containerService": {
"containerServiceName": "signup-application",        "arn": "arn:aws:lightsail:eu-west-3:012345678901:ContainerService/528a0bcf-fd14-42d4-a09a-943a241adc51",
"createdAt": "2024-03-18T10:25:22-04:00",
"location": {
"availabilityZone": "all",
"regionName": "eu-west-3"
},
"resourceType": "ContainerService",
"tags": [],
"power": "nano",
"powerId": "nano-1",
"state": "PENDING",
"scale": 1,
"isDisabled": false,
"principalArn": "",
"privateDomainName": "signup-application.service.local",
"url": "https://signup-application.me04fvc6dbk4e.eu-west-3.cs.amazonlightsail.com/"
}
}

注意容器服务的当前状态显示为"state":"PENDING"。稍等片刻后,该状态就会变成READY。用户可以使用以下命令检查容器服务的状态:

aws lightsail get-container-services --region eu-west-3 --service-name signup-application --query "containerServices[].state"

该命令会输出一条JSON消息,如下所示:

# aws lightsail get-container-services --region eu-west-3 --service-name signup-application --query "containerServices[].state"

[
"READY"
]

用户可以根据应用程序的使用情况,随时更改节点数量和节点规格。

aws lightsail update-container-service --region eu-west-3 --service-name signup-application --scale 2

三、在Amazon Lightsail上部署容器

部署容器的第一步是将容器镜像推送到Amazon Lightsail。

1、打开终端,在创建了容器的目录下,运行以下命令。请务必确认命令中指定的区域为创建Lightsail容器服务的那个区域。

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

该命令输出如下类似结果:

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

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 push将镜像上传到Amazon Lightsail。

2、输出中的最后一行是容器的内部名称;在示例中,这个容器名称为:signup-application.latest.1。在后续阶段,如果要查看该容器名称,可以运行以下命令:

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

该命令输出如下类似结果:

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

{
"containerImages": [
{
"image": ":signup-application.latest.1",
"digest": "sha256:128f84907d30a1fb47c1888720485fa8050cc99bc1034e0cfd1f46d3b6e57e19",
"createdAt": "2024-03-13T14:20:08-04:00"
}
]
}

完成之后,容器镜像就存储在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

该命令输出如下类似结果:

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

{
"containerService": {
"containerServiceName": "signup-application",
"arn": "arn:aws:lightsail:eu-west-3:012345678901:ContainerService/528a0bcf-fd14-42d4-a09a-943a241adc51",
"createdAt": "2024-03-15T11:43:10-04: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": "2024-03-15T11:43:10-04: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":“ACTIVATING”(正在激活)状态稍等片刻后,该状态就会变成ACTIVE。部署过程需要几分钟才能完成。运行以下命令查看部署的当前状态和下一状态。用户可以使用以下命令检查部署的状态:

使用教程

莱卡云教程:云服务器使用Docker搭建开源问答平台Answer

2025-9-25 16:24:24

评测

恒创科技和亿速云美国云服务器哪个便宜点?

2024-4-15 14:33:28

相关推荐