博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用SQL Server 2017 Docker容器在.NET Core中进行本地Web API开发
阅读量:3528 次
发布时间:2019-05-20

本文共 4422 字,大约阅读时间需要 14 分钟。

目录


介绍

本文将讨论以下内容:

  1. 如何找到SQL Server 2017镜像并在本地下载
  2. 在本地执行SQ​​L Server 2017 docker容器
  3. 使用Docker容器内托管的SQL Server 2017进行本地.NET Core Web API开发

先决条件

  1. Windows 10
  2. Visual Studio 2017
  3. Microsoft SQL Server Management Studio 18
  4. Docker for WindowsLinux容器)
  5. 客户端:Docker Engine——社区
    1. 版本:18.09.2
    2. API版本:1.39
  6. 服务器:Docker Engine——社区
    1. 版本:18.09.2
    2. API版本:1.39(最低版本1.12

最好事先知道

  1. Docker
  2. EF Core 2.1
  3. 使用.NET Core 2.1Web API
  4. SQL Server Management Studio 18

假设

本文假设您具有使用.NET Core 2.1DockerSQL Server Management StudioVS 2017EF Core 2.1Web API的基本知识。

动机

跨平台

Microsoft SQL Server 2017现在可在多个平台上使用:WindowsLinuxDocker

快速安装

获取SQL Serverdocker镜像就像运行docker image pull一样简单。

经济有效

容器要便宜得多。

不同版本/多个实例

我们可以根据需要在内部部署服务器/笔记本电脑上启动尽可能多的实例。每个容器都是独立的(清新干净),当我们完成后将它们关闭。

速度

Docker和容器化应用程序的速度和效率优势也可用于SQL Server 2017 Docker容器。

持久性

我们可以使用卷挂载在容器外部存储.mdf.ldf文件。这样,那些.mdf.ldf 文件将存储在持久性硬盘上。即使移除容器,该数据也将是安全的,因为它在容器外部托管。

找到SQL Server 2017镜像并在本地下载它

我们可以访问找到我们想要拉到我们本地笔记本电脑的镜像。在本文中,我们将使用mcr.microsoft.com/mssql/server:2017-latest

首先,让我们通过使用命令行执行下面提到的命令来验证我们笔记本电脑上的可用镜像列表。

docker images

在命令提示符下,请执行下面提到的命令以在本地提取SQL Server 2017镜像。我们需要等待几分钟才能将镜像拉到本地。

docker pull mcr.microsoft.com/mssql/server:2017-latest

让我们验证SQL Server 2017镜像是否已在本地成功提取。我们可以看到镜像被拉出,其大小为1.33 GB

在没有卷挂载的情况下在本地执行SQ​​L Server 2017容器

我们将执行没有卷挂的SQL Server 2017容器。这样做的效果是,每当删除容器时,SQL Server数据库中存储的所有数据都将丢失。在命令行中执行下面提到的命令。确保端口1433可用。

docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=Sample123$" -p 1433:1433 --name sqlserver2017withoutmount -d mcr.microsoft.com/mssql/server:2017-latest
  • -e ACCEPT_EULA

ACCEPT_EULA变量设置为“Y”以确认接受最终用户许可协议。

  • -e SA_PASSWORD

使用sa用户名登录SQL实例的密码。

  • -p 1433:1433

使用容器中的TCP端口(第二个值)映射主机环境(第一个值)上的TCP端口。在此示例中,SQL Server正在侦听容器中的TCP 1433,并且它将暴露给主机上的端口1433

  • - name

指定容器的名称,而不是随机生成的名称。

此外,执行docker ps -a以验证容器是否已成功创建并运行。

docker ps -a

使用SQL Server Management Studio连接到在容器内运行的SQL Server 2017

我们可以看到,SQL Server正在端口1433上执行。请指定服务器名称localhost,1433,登录sa和密码Sample123$以登录到容器内运行的SQL Server

成功登录后,右键单击数据库 ” ->“新建数据库... ”。它将显示一个对话框,您需要指定webapidemodb。另外,请注意数据库和日志文件是在容器内的/var/opt/mssql/data中创建的。请参考下图:

打开一个新的查询窗口(右键单击webapidemodb” - >新建查询)。从SqlScripts文件夹中,仅执行1Create_Professors.sql2Create_Students.sql3Insert_Professors.sql文件。它应该创建两个表并填充Professors表。

一旦我们成功执行了3个脚本文件,我们就可以执行select * from ProfessorsStudents表。请查看下图:

让我们验证容器内是否存在数据库和日志文件。请执行docker exec -it sqlserver2017withoutmount bash命令。它应该带我们进入容器。我们可以执行ls(列出)目录列表。我们知道,文件的路径是/var/opt/mssql/data,让我们导航并验证我们的webapidemodb.mdfwebapidemodb_log.ldf是否存在。

docker exec -it sqlserver2017withoutmount bashcd /var/opt/mssql/datals

连接到在Web API中的容器内运行的SQL Server 2017创建的数据库

让我们在Web API解决方案中使用我们在Docker容器中创建的数据库。请在Visual Studio 2017中打开College.Services.sln解决方案。请打开appsettings.json并修改CollegeDBConnectionString里面的ConnectionStringsCollegeDBConnectionStringServer=tcp:localhost,1433;Database=webapidemodb;User Id=sa;Password=Sample123$;

请参考下图:

完成后,请执行Web API项目,我们应该能够在浏览器中看到3位教授的信息(在我们的例子中,它是Chrome)。

验证,删除和重新创建SQL Server 2017容器以确保我们创建的数据库(webapidemodb)已丢弃

验证SQL Server容器是否存在(docker ps -a)。然后,使用docker stop ContainerIddocker rm ContainerId停止并删除容器。此外,验证SQL Server容器不可用(docker ps -a)。请参考下图:

docker ps -adocker stop ContainerIddocker rm ContainerIddocker ps -a

执行命令以创建没有卷挂载的SQL Server 2017容器,并验证我们的webapidemodb文件是否丢失。

docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=Sample123$" -p 1433:1433            --name sqlserver2017withoutmount -d mcr.microsoft.com/mssql/server:2017-latest

请参考下图:

让我们验证数据库和容器内的日志文件是否丢失。请执行docker exec -it sqlserver2017withoutmount bash命令。它应该带我们进入容器。我们可以执行ls来查看目录列表。我们知道,文件的路径是/var/opt/mssql/data,让我们导航并验证我们的webapidemodb.mdfwebapidemodb_log.ldf是否丢失。

docker exec -it sqlserver2017withoutmount bashcd /var/opt/mssql/datals

使用卷挂载重新创建SQL Server 2017容器以存储容器外部的数据库和日志文件

通过上面的实验,我们知道如果我们创建没有卷挂载的SQL Server容器并且在容器内部有数据库和日志文件,那么如果我们删除容器,它们将会丢失。现在让我们删除并重新创建带卷挂载的容器。

验证SQL Server容器是否存在(docker ps -a)。然后,使用docker stop ContainerId docker rm ContainerId” 停止并删除容器。此外,验证SQL Server容器不可用(docker ps -a)。

docker ps -adocker stop ContainerIddocker rm ContainerIddocker ps -a

让我们执行下面提到的命令来创建带卷挂载的SQL Server 2017容器。C:\DockerVolumes\formssql是我们本地笔记本电脑的路径,而/var/opt/mssql/data是容器内的文件夹。这将在容器内部创建数据库和日志文件(C:\DockerVolumes\formssql)。请参考下图:

docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=Sample123$" -p 1433:1433 --name sql1 -v C:\LordKrishna\DockerVolumes\formssql:/var/opt/mssql/data -d mcr.microsoft.com/mssql/server:2017-latest

让我们创建webapidemodb数据库并执行SqlScripts文件夹中的所有4个脚本。执行Web API,我们应该在浏览器中看到Professors)和Students)信息。假设我们创建了相同的数据库名称,就像我们在第一次练习中所做的那样。

 

原文地址:

转载地址:http://htzhj.baihongyu.com/

你可能感兴趣的文章
牛客的AI模拟面试(1)
查看>>
深入浅出MyBatis:MyBatis解析和运行原理
查看>>
Mybatis与Ibatis
查看>>
字节码文件(Class文件)
查看>>
java中的IO流(一)----概述
查看>>
StringBuilder
查看>>
集合,Collection
查看>>
泛型详解
查看>>
泛型实现斗地主
查看>>
List集合
查看>>
ArrayList集合,LinkedList集合,Vector集合
查看>>
HashSet集合
查看>>
并发与并行,线程与进程
查看>>
方法引用,通过对象名引用成员变量
查看>>
常用工具类 Math:数学计算 Random:生成伪随机数 SecureRandom:生成安全的随机数 2020-2-13
查看>>
Java的异常Exception 2020-2-13
查看>>
Java标准库定义的常用异常,自定义异常 2020-2-15
查看>>
Java问题百度/Google记录 2020-2-16
查看>>
【PADS9.5】9,对比ECO核心板,Router移动元件后布线消失,Router找不到自动布线策略文件丢失或损坏
查看>>
【STM32+w5500汇总】23,HTTP_Client 连接到ONENET上传了一段数据之后会断开,数据上传格式的设置
查看>>