基于事件驱动架构构建微服务第5部分:容器化(Web Api Core 和 SQL Server Linux)
原文鏈接: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-containerWeb 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] goDOCKER-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?upATTACH 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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Blazor Server 应用程序中进
- 下一篇: 持续20年,一场威胁Linux存亡的诉讼