使用Docker容器运行SQL Server 2017进行.NET Core Web API开发

在本文中,将探讨如何利用Docker容器技术在本地环境中运行SQL Server 2017,以及如何将其应用于.NET CoreWeb API的开发。本教程假设已经具备Docker、SQL Server Management Studio、Visual Studio 2017、Entity Framework Core 2.1以及.NET Core Web API的基础知识。

先决条件

为了开始,需要确保系统满足以下要求:

  • Windows 10操作系统
  • 安装了Visual Studio 2017
  • 安装了Microsoft SQL Server Management Studio 18
  • 安装了Dockerfor Windows(支持Linux容器)
  • DockerEngine - Community版本至少为18.09.2

动机

使用Docker容器运行SQL Server 2017具有以下优势:

  • 跨平台:SQL Server 2017现在可以在Windows、Linux和Docker等多个平台上使用。
  • 快速安装:获取SQL Server的Docker镜像非常简单,只需运行一个Docker镜像拉取命令。
  • 成本效益:容器的成本远低于传统部署方式。
  • 不同版本/多个实例:可以在本地服务器/笔记本电脑上启动任意数量的实例。每个容器都将是独立的(全新且干净),并在完成后可以轻松地将其删除。
  • 速度:Docker和容器化应用的速度和效率优势也适用于SQL Server 2017 Docker容器。
  • 持久性:可以使用卷挂载来存储.mdf和.ldf文件,这样即使容器被删除,数据也会安全地存储在持久硬盘上。

可以访问来找到想要拉取的镜像。在本文中,将使用“mcr.microsoft.com/mssql/server:2017-latest”镜像。

docker images

首先,通过执行上述命令来验证本地可用的镜像列表。然后,通过执行以下命令从命令行拉取SQL Server 2017镜像到本地。这可能需要几分钟的时间:

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

拉取完成后,可以验证SQL Server2017镜像是否已成功拉取到本地。

在没有卷挂载的情况下本地执行SQL 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

执行完毕后,可以使用以下命令来验证容器是否已成功创建并运行:

docker ps -a

使用SQL ServerManagement Studio 18连接到容器中的SQL Server 2017

如所见,SQL Server正在端口1433上运行。请指定服务器名称“localhost,1433”,登录名“sa”和密码“Sample123$”来登录到容器中运行的SQL Server。

登录成功后,右键单击“数据库”->“新建数据库…”。这将显示一个对话框,需要在其中指定“webapidemodb”数据库。同时,请注意数据库和日志文件正在容器内的“/var/opt/mssql/data”中创建。

打开一个新的查询窗口(右键单击“webapidemodb”->新建查询)。从“SqlScripts”文件夹中,仅执行1Create_Professors.sql、2Create_Students.sql和3Insert_Professors.sql文件。这将创建两个表并填充“Professors”表。

成功执行这3个脚本文件后,可以执行select * from both Professors和Students表。

Web API中连接到容器中创建的数据库

现在,将在Web API解决方案中使用在Docker容器内创建的数据库。请在Visual Studio 2017中打开College.Services.sln解决方案。请打开appsettings.json并修改“ConnectionStrings”内的“CollegeDBConnectionString”。

"CollegeDBConnectionString": "Server=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 ContainerId和docker rm ContainerId命令停止并删除容器。同时,验证SQL Server容器是否不再可用(docker 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

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

通过上述实验,了解到如果不使用卷挂载创建SQL Server容器,并且数据库和日志文件存储在容器内,那么删除容器后这些文件将会丢失。现在让删除并重新创建带有卷挂载的容器。

验证SQL Server容器是否存在(docker ps -a)。然后,使用“docker stop ContainerId”和“docker rm ContainerId”命令停止并删除容器。同时,验证SQL Server容器是否不再可用(docker 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
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485