1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 基于事件驱动架构构建微服务第5部分:容器化(Web Api Core 和 SQL Server Linux)

基于事件驱动架构构建微服务第5部分:容器化(Web Api Core 和 SQL Server Linux)

时间:2021-06-02 04:47:55

相关推荐

基于事件驱动架构构建微服务第5部分:容器化(Web Api Core 和 SQL Server Linux)

原文链接:/building-microservices-through-event-driven-architecture-part5-dockerization-web-api-core-and-sql-server-linux/

在本文中,我将谈谈web api和sql server linux数据库的容器化

Web API将发布并上线,它需要一个数据库。所以我将容器化Web API和SQL Server数据库:LogCorner.EduSync.Speech.Presentation和LogCorner.EduSync.Speech.Database。将生成2个镜像,这些镜像将推送到容器注册表的存储库并由Azure Kubernete服务使用。

WEB API 容器化

右键单击LogCorner.EduSync.Speech.Presentation项目名称,然后选择容器业务流程协调程序支持

选择Docker Compose并单击OK

将生成以下Dockerfile

构建镜像

出于本演示的目的,我删除了所有容器和镜像,如果不想删除所有镜像,请不要运行此命令

#停止所有容器dockerstop$(dockerps-a-q)#删除所有容器dockerrm$(dockerps-a-q)#删除所有镜像dockerrmi$(dockerimages-q)

要构建之前的Dockerfile,请找到CommandInterfaces目录并运行以下命令:它从当前目录构建DockerFile作为构建上下文,并将生成的镜像命名为webapi-image

dockerbuild-twebapi-image-fLogCorner.EduSync.Speech\LogCorner.EduSync.Speech.Presentation\Dockerfile.

运行以下命令列出所有镜像

dockerimages

dockerimages–filter“dangling=false”

创建了以下镜像:

microsoft/dotnet:2.2-aspnetcore-runtime(来自 Dockerfile)

microsoft/dotnet:2.2-sdk(来自 Dockerfile)

webapi-image(来自构建命令)

运行容器

运行以下命令:它运行webapi-image镜像,创建容器webapi-container并将容器的80端口映射到容器外的8080端口

dockerrun-d-p8080:80–namewebapi-containerwebapi-image

以下命令列出所有正在运行的容器

dockerps-a

我们有一个名为webapi-container的正在运行的容器

运行以下命令查看webapi-container日志

dockerlogswebapi-container

Web api现在正在运行并监听容器内的80端口和容器外的8080端口 所以应该如下访问http://localhost:8080/api/speech

再次运行docker logs webapi-container

dockerlogswebapi-container

日志说发生错误,因为它无法连接到数据库 让我们在下一步修复它

SQL SERVER LINUX 容器化

在LogCorner.EduSync.Speech.Database项目中,打开项目属性,然后单击Project Settings选项卡,然后选中Create script (.sql file)

它将创建一个用于创建数据库的脚本文件。每当更新数据库时,都会更新此脚本。

单击选项卡Build Events,创建一个Post-build event命令,如下所示:

xcopy“$(ProjectDir)bin\$(Configuration)\LogCorner.EduSync.Speech.Database_Create.sql”“$(ProjectDir)Docker\Restore”/Y

它将上一步生成的sql脚本复制到特定目录(在我的情况下为Docker/Restore) DockerFile将使用此脚本创建数据库镜像

sql server linux Dockerfile

找到SQL Server Dockerfile所在目录,运行以下命令创建带有SA_PASSWORD的database-image

dockerbuild-tdatabase-image.–build-argSA_PASSWORD=’PassW0rd’

列出所有镜像

dockerimages–filter“dangling=false”

我们有两个附加镜像:microsoft/mssql-server-linux和database-image

运行容器

运行以下命令,根据database-image创建一个数据库容器(database-container),映射到容器内外的1433端口

dockerrun-d-p1433:1433–namedatabase-containerdatabase-image

列出正在运行的容器

dockerps-a

我们有一个基于数据库镜像的新容器

运行以下命令在数据库容器上附加shell

Dockerexec-itdatabase-container"bash"

运行以下命令连接到正在运行的容器的sql server实例

/opt/mssql-tools/bin/sqlcmd-Slocalhost-USA-P'PassW0rd'

运行以下命令列出所有数据库

selectnamefromsys.databasesgo

我们可以看到数据库LogCorner.EduSync.Speech.Database是通过Dockerfile上的脚本创建的

运行以下命令以选择该数据库上的[dbo].[Speech]表

use[LogCorner.EduSync.Speech.Database]goselect*from[dbo].[Speech]go

DOCKER-COMPOSE

Compose是一个用于定义和运行多容器Docker应用程序的工具。要了解有关Compose的更多信息,请参阅以下文档:/compose/overview/

打开docker-compose.yml文件,它已经包含一个logcorner.edusync.speech.presentation服务。更新此服务以使其依赖于数据库服务:logcorner.edusync.speech.presentation.data。

添加logcorner.edusync.speech.presentation.data服务,使用先前创建的SQL Dockerfile和SA_PASSWORD作为参数。

覆盖文件,顾名思义,可以包含现有服务或全新服务的配置覆盖:/compose/extends/

打开docker-compose.override.yml文件,并设置ASPNETCORE_ENVIRONMENT = Docker或其他内容。目标是使用appsettings.Docker.json文件来设置特定于该环境的所有配置参数。

web api服务侦听容器内部的端口80和外部的8080。

数据库服务监听容器内部的1433端口和外部的1433端口。

打开 appsettings.Docker.json文件并添加connectionString以使用SQL Server数据库

Data Source=logcorner.edusync.speech.presentation.data

Initial Catalog=LogCorner.EduSync.Speech.Database

User=sa;Password=PassW0rd

构建镜像

docker-composebuilddockerimages–filter"dangling=false"

运行容器

docker-composeupdockerps--all--format"table{{.ID}}\t{{.Image}}\t{{.Names}}"

测试

运行容器

docker-composeup

ATTACH SHELL

dockerexec-it1997“bash”

连接到正在运行的SQL SERVER容器实例

/opt/mssql-tools/bin/sqlcmd-Slocalhost-USA-P‘PassW0rd’

验证数据库表DBO.SPEECH是否为空

use[LogCorner.EduSync.Speech.Database]goselect*from[dbo].[Speech]go

执行Post请求

打开Postman并执行Post请求

验证数据库表DBO.SPEECH是否有一行数据

use[LogCorner.EduSync.Speech.Database]goselect*from[dbo].[Speech]go

欢迎关注我的个人公众号”My IO“

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。