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

105 篇文章 7 订阅
68 篇文章 5 订阅

原文链接:https://logcorner.com/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

图片

构建镜像

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

# 停止所有容器
docker stop $(docker ps -a -q)

# 删除所有容器
docker rm $(docker ps -a -q)
# 删除所有镜像
docker rmi $(docker images -q)

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

docker build -t webapi-image -f LogCorner.EduSync.Speech\LogCorner.EduSync.Speech.Presentation\Dockerfile .

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

docker images

图片

docker images –filter “dangling=false”

图片

创建了以下镜像:

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

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

  • webapi-image(来自构建命令)

运行容器

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

docker run -d  -p 8080:80  –name webapi-container webapi-image

图片

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

docker ps -a

图片

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

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

docker logs webapi-container

图片

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

图片

再次运行docker logs webapi-container

docker logs webapi-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

docker build -t database-image . –build-arg SA_PASSWORD=’PassW0rd’

列出所有镜像

docker images –filter “dangling=false”

图片

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

运行容器

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

docker run -d  -p 1433:1433  –name database-container database-image

图片

列出正在运行的容器

docker ps -a

图片

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

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

Docker exec -it database-container "bash"

图片

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

/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'PassW0rd'

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

select name from sys.databases

go

图片

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

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

use [LogCorner.EduSync.Speech.Database]

go

select * from [dbo].[Speech]
go

图片

DOCKER-COMPOSE

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

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

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

图片

覆盖文件,顾名思义,可以包含现有服务或全新服务的配置覆盖:https://docs.docker.com/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-compose build

docker images –filter "dangling=false"

图片

运行容器

docker-compose up

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

图片

测试

运行容器

docker-compose up

ATTACH SHELL

docker exec -it 1997 “bash”

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

/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P ‘PassW0rd’

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

use [LogCorner.EduSync.Speech.Database]
go

select * from [dbo].[Speech]
go

图片

执行Post请求

打开Postman并执行Post请求

图片

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

use [LogCorner.EduSync.Speech.Database]
go

select * from [dbo].[Speech]
go

图片

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值