在本文中,将探讨如何利用Docker容器技术在本地环境中运行SQL Server 2017,以及如何将其应用于.NET CoreWeb API的开发。本教程假设已经具备Docker、SQL Server Management Studio、Visual Studio 2017、Entity Framework Core 2.1以及.NET Core Web API的基础知识。
为了开始,需要确保系统满足以下要求:
使用Docker容器运行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 Server2017镜像是否已成功拉取到本地。
将在没有卷挂载的情况下执行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 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解决方案中使用在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容器是否存在(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容器,并且数据库和日志文件存储在容器内,那么删除容器后这些文件将会丢失。现在让删除并重新创建带有卷挂载的容器。
验证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