日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

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

發(fā)布時間:2023/12/4 linux 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于事件驱动架构构建微服务第5部分:容器化(Web Api Core 和 SQL Server Linux) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

原文鏈接:https://logcorner.com/building-microservices-through-event-driven-architecture-part5-dockerization-web-api-core-and-sql-server-linux/

在本文中,我將談?wù)剋eb api和sql server linux數(shù)據(jù)庫的容器化

Web API將發(fā)布并上線,它需要一個數(shù)據(jù)庫。所以我將容器化Web API和SQL Server數(shù)據(jù)庫:LogCorner.EduSync.Speech.Presentation和LogCorner.EduSync.Speech.Database。將生成2個鏡像,這些鏡像將推送到容器注冊表的存儲庫并由Azure Kubernete服務(wù)使用。

WEB API 容器化

右鍵單擊LogCorner.EduSync.Speech.Presentation項目名稱,然后選擇容器業(yè)務(wù)流程協(xié)調(diào)程序支持

選擇Docker Compose并單擊OK

將生成以下Dockerfile

構(gòu)建鏡像

出于本演示的目的,我刪除了所有容器和鏡像,如果不想刪除所有鏡像,請不要運(yùn)行此命令

#?停止所有容器 docker?stop?$(docker?ps?-a?-q)#?刪除所有容器 docker?rm?$(docker?ps?-a?-q) #?刪除所有鏡像 docker?rmi?$(docker?images?-q)

要構(gòu)建之前的Dockerfile,請找到CommandInterfaces目錄并運(yùn)行以下命令:它從當(dāng)前目錄構(gòu)建DockerFile作為構(gòu)建上下文,并將生成的鏡像命名為webapi-image

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

運(yùn)行以下命令列出所有鏡像

docker?images

docker?images?–filter?“dangling=false”

創(chuàng)建了以下鏡像:

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

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

  • webapi-image(來自構(gòu)建命令)

運(yùn)行容器

運(yùn)行以下命令:它運(yùn)行webapi-image鏡像,創(chuàng)建容器webapi-container并將容器的80端口映射到容器外的8080端口

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

以下命令列出所有正在運(yùn)行的容器

docker?ps?-a

我們有一個名為webapi-container的正在運(yùn)行的容器

運(yùn)行以下命令查看webapi-container日志

docker?logs?webapi-container

Web api現(xiàn)在正在運(yùn)行并監(jiān)聽容器內(nèi)的80端口和容器外的8080端口 所以應(yīng)該如下訪問http://localhost:8080/api/speech

再次運(yùn)行docker logs webapi-container

docker?logs?webapi-container

日志說發(fā)生錯誤,因為它無法連接到數(shù)據(jù)庫 讓我們在下一步修復(fù)它

SQL SERVER LINUX 容器化

在LogCorner.EduSync.Speech.Database項目中,打開項目屬性,然后單擊Project Settings選項卡,然后選中Create script (.sql file)

它將創(chuàng)建一個用于創(chuàng)建數(shù)據(jù)庫的腳本文件。每當(dāng)更新數(shù)據(jù)庫時,都會更新此腳本。

單擊選項卡Build Events,創(chuàng)建一個Post-build event命令,如下所示:

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

它將上一步生成的sql腳本復(fù)制到特定目錄(在我的情況下為Docker/Restore) DockerFile將使用此腳本創(chuàng)建數(shù)據(jù)庫鏡像

sql server linux Dockerfile

找到SQL Server Dockerfile所在目錄,運(yùn)行以下命令創(chuàng)建帶有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

運(yùn)行容器

運(yùn)行以下命令,根據(jù)database-image創(chuàng)建一個數(shù)據(jù)庫容器(database-container),映射到容器內(nèi)外的1433端口

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

列出正在運(yùn)行的容器

docker?ps?-a

我們有一個基于數(shù)據(jù)庫鏡像的新容器

運(yùn)行以下命令在數(shù)據(jù)庫容器上附加shell

Docker?exec?-it?database-container?"bash"

運(yùn)行以下命令連接到正在運(yùn)行的容器的sql server實例

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

運(yùn)行以下命令列出所有數(shù)據(jù)庫

select?name?from?sys.databasesgo

我們可以看到數(shù)據(jù)庫LogCorner.EduSync.Speech.Database是通過Dockerfile上的腳本創(chuàng)建的

運(yùn)行以下命令以選擇該數(shù)據(jù)庫上的[dbo].[Speech]表

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

DOCKER-COMPOSE

Compose是一個用于定義和運(yùn)行多容器Docker應(yīng)用程序的工具。要了解有關(guān)Compose的更多信息,請參閱以下文檔:https://docs.docker.com/compose/overview/

打開docker-compose.yml文件,它已經(jīng)包含一個logcorner.edusync.speech.presentation服務(wù)。更新此服務(wù)以使其依賴于數(shù)據(jù)庫服務(wù):logcorner.edusync.speech.presentation.data。

添加logcorner.edusync.speech.presentation.data服務(wù),使用先前創(chuàng)建的SQL Dockerfile和SA_PASSWORD作為參數(shù)。

覆蓋文件,顧名思義,可以包含現(xiàn)有服務(wù)或全新服務(wù)的配置覆蓋:https://docs.docker.com/compose/extends/

打開docker-compose.override.yml文件,并設(shè)置ASPNETCORE_ENVIRONMENT = Docker或其他內(nèi)容。目標(biāo)是使用appsettings.Docker.json文件來設(shè)置特定于該環(huán)境的所有配置參數(shù)。

web api服務(wù)偵聽容器內(nèi)部的端口80和外部的8080。

數(shù)據(jù)庫服務(wù)監(jiān)聽容器內(nèi)部的1433端口和外部的1433端口。

打開 appsettings.Docker.json文件并添加connectionString以使用SQL Server數(shù)據(jù)庫

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

Initial Catalog=LogCorner.EduSync.Speech.Database

User=sa;Password=PassW0rd

構(gòu)建鏡像

docker-compose?builddocker?images?–filter?"dangling=false"

運(yùn)行容器

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

測試

運(yùn)行容器

docker-compose?up

ATTACH SHELL

docker?exec?-it?1997?“bash”

連接到正在運(yùn)行的SQL SERVER容器實例

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

驗證數(shù)據(jù)庫表DBO.SPEECH是否為空

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

執(zhí)行Post請求

打開Postman并執(zhí)行Post請求

驗證數(shù)據(jù)庫表DBO.SPEECH是否有一行數(shù)據(jù)

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

歡迎關(guān)注我的個人公眾號”My IO“

總結(jié)

以上是生活随笔為你收集整理的基于事件驱动架构构建微服务第5部分:容器化(Web Api Core 和 SQL Server Linux)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。