您当前的位置: 首页 >  sql

寒冰屋

暂无认证

  • 0浏览

    0关注

    2286博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

寒冰屋 发布时间:2021-08-24 15:14:50 ,浏览量:0

原文链接: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

图片

关注
打赏
1665926880
查看更多评论
立即登录/注册

微信扫码登录

0.0470s