基于事件驱动架构构建微服务第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/

在本文中,我将谈谈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.databasesgo

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

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

use [LogCorner.EduSync.Speech.Database]goselect * 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 builddocker images –filter "dangling=false"

运行容器

docker-compose updocker 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]
goselect * from [dbo].[Speech]
go

执行Post请求

打开Postman并执行Post请求

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/299141.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

eclipse工程 'cocostudio/CocoStudio.h' file not found

android.mk里有这样配置: LOCAL_PATH : $(call my-dir)include $(CLEAR_VARS)$(call import-add-path,$(LOCAL_PATH)/../../cocos2d) $(call import-add-path,$(LOCAL_PATH)/../../cocos2d/external) $(call import-add-path,$(LOCAL_PATH)/../../cocos2d/cocos) $(…

爆笑!物理书上的照片能不能好好选选啊喂!

全世界只有3.14 % 的人关注了爆炸吧知识在物理书里,有各种物理大佬的照片。他们正襟危坐,他们不苟言笑,他们看起来就很“物理”。但是,知识君想说,谁不是个有血有肉的人啊?!选照片的时候给我好好…

java字符数组转化为字符串_java字符数组转字符串,java数组转字符串

字符串转数组使用Java split() 方法split() 方法根据匹配给定的正则表达式来拆分字符串。注意: . 、 | 和 * 等转义字符,必须得加 \\。多个分隔符,可以用 | 作为连字符。// 字符串转数组 java.lang.StringString str "0,1,2,3,4,5"…

计算机网络体系结构概述

1.Internet结构 2.计算机网络的体系结构 1)网路协议主要由以下三要素组成: 语法,即数据与控制信息的结构或格式; 语义,即需要发出何种控制信息,完成何种动作以及做出何种响应; 同步,…

如何识别是三层交换机还是二层交换机

举例说明:302620125012看第2位是0~4的说明它是2层交换机3550看第2位是5~9的说明它是3层交换机LI(LitesoftwareImage)表示设备为弱特性版本。SI(StandardsoftwareImage)表示设备为标准版本,包含基础特性。 EI(EnhancedsoftwareImage)表示设备为增强版本,包…

.NET 6 全新指标 System.Diagnostics.Metrics 介绍

前言工友们, .NET 6 Preview 7 已经在8月10号发布了, 除了众多的功能更新和性能改进之外, 在 preview 7 版本中, 也新增了全新的指标API, System.Diagnostics.Metrics, 为了让应用能有更好的可观测性, 在之前的发布的.NET 5中, 也把 Activity 增强为 ActivitySource, 主要原因还…

java实验3_Java 实验3

实验3 /* * (#)AverageNumbers2 * * Copyright 2008 School of Software, Yunnan University. * All rights reserved */ package cn.edu.ynu.sei.Java_Labs.Lab3; /** * 求1-50的平均数 * version 1.0.0.0 Jan 22, 2008 …

42张动图带你走进神奇的物理世界,超震撼!

全世界只有3.14 % 的人关注了爆炸吧知识世界之大,无奇不有。生活中其实有许多神奇的物理化学现象。下面就一起来看看吧!图片加载慢稍加等待即可哦~神 奇 的 物 理 反 应1.锤击被液氮冻上的康乃馨,求康乃馨的心理阴影面积。2.比重比空气还大的…

Linux优化之IO子系统监控与调优

Linux优化之IO子系统作为服务器主机来讲,最大的两个IO类型 :1.磁盘IO 2.网络IO这是我们调整最多的两个部分所在磁盘IO是如何实现的在内存调优中,一直在讲到为了加速性能,linux内核一般情况下都会尝试将磁盘上的慢速设备上的文件缓…

window 2008 和 windows vista windows 7 安装 MSMQ

从MSDN找到的资料,详见:http://msdn.microsoft.com/zh-cn/library/aa967729.aspx安装“消息队列 (MSMQ)”以下过程介绍如何安装“消息队列 4.0”和“消息队列 3.0”。 注意: 消息队列 4.0 在 Windows XP 和 Windows Server 2003 中不可用。 在 Windows S…

Oh no no no i'm a rocket man

She packed my bags last night pre-flight火箭队员昨晚整理行李准备打客场 Zero hour nine a.m.9分钟之前是午夜12点 And im gonna be high as a kite by then我象风筝那样跟向前 I miss the earth so much i miss my wife我曾错过这么多客场随队旅行的机会我错过了亲眼目睹火…

如何洗牌 ListT 中的元素?

咨询区 mirezus&#xff1a;是否有一个最佳的方式对 List<T> 进行洗牌排序&#xff0c;我的项目有一个抽奖模块&#xff0c;需要对一个有 75个元素的 List<T> 进行随机排序&#xff0c;请问大家有什么好的实现方式。回答区 user453230&#xff1a;如果你仅仅是想对…

用3年时间破解学界200多年难题,年仅21岁的天才竟因谈了一场恋爱挂掉了.........

全世界只有3.14 % 的人关注了爆炸吧知识俗话说&#xff0c;英雄难过美人关&#xff0c;即便是智商超群的数学天才也毫不例外。破得了百年的世界难题&#xff0c;却解不开一个小小的爱情谜团......没错&#xff0c;这位为情所困的数学天才&#xff0c;便是今天的主人公——伽罗瓦…

投影变换与视口变换

一些说明&#xff1a; 0. 投影变换&#xff1a;描述如何指定视景体(viewing volume)的形状和方向。视口变换&#xff1a;解释如何控制三维模型坐标到屏幕坐标的变换。 1. 无论是透视投影还是平行投影&#xff08;正交投影&#xff09;&#xff0c;只有在视景体中的物体才可见。…

java 按钮设置图片_Java中如何设置带图片按钮的大小

在java部分需要用到图形界面编程的项目中&#xff0c;经常会使用图片设置对按钮进行美化&#xff0c;但是使用时会出现一个很麻烦的问题&#xff0c; 按照方法&#xff1a;JButton jb1 new JButton();jb1.setBounds(0, 0, 25, 20);ImageIcon ii new ImageIcon("images/x…

JAVA 异常库

为什么80%的码农都做不了架构师&#xff1f;>>> 1.java.lang.NumberFormatException: multiple points已解决 多线程方法中使用了共享变量SimpleDateFormat&#xff0c;报如下错误&#xff1a; java.lang.NumberFormatException: multiple points at sun.misc.Floa…

WPF ComboBox 使用 ResourceBinding 动态绑定资源键并支持语言切换

WPF ComboBox 使用 ResourceBinding 动态绑定资源键并支持语言切换独立观察员 2021 年 8 月 23 日我们平常在 WPF 中进行资源绑定操作&#xff0c;一般就是用 StaticResource 或者 DynamicResource 后面跟上资源的 key 这种形式&#xff0c;能满足大部分需求。但是有的时候&am…

2009年最佳80后科技创业者

近日&#xff0c;《商业周刊》公布了2009年最有前途的科技初创公司及青年创业者名单&#xff0c;这些企业创始人年龄都在30岁及以下。商业周刊表示&#xff0c;从这些创业公司来看&#xff0c;创新依然存在并发展良好。以下为其详细名单&#xff0c;包括入选初创的业务描述以及…

Commons里的DButil

今天试用了一下&#xff0c;感觉还不错。说下需求&#xff1a;直接用jdbc天天开连接&#xff0c;关连接么的头疼。要将结果转化为xml格式&#xff0c;这个用XStream格式。用hibernate来搞这个有点杀鸡用牛刀的意思&#xff0c;如果直接用jdbc又有点繁琐。所以试用了一下这个东西…

你一直憋着的那个屁,放出来时真的有人知道吗?我先告诉你憋着不放的屁会到哪去……...

全世界只有3.14 % 的人关注了爆炸吧知识制作团队制作人 超模君编剧 恐恐恐插画 杨羊羊友情出演 超模君 想增加更多的奇怪知识&#xff1f;带你入学↓↓↓关注“爆炸吧知识”日增怪知识&#xff01;