本文共 4422 字,大约阅读时间需要 14 分钟。
目录
本文将讨论以下内容:
本文假设您具有使用.NET Core 2.1的Docker,SQL Server Management Studio,VS 2017,EF Core 2.1和Web API的基本知识。
Microsoft SQL Server 2017现在可在多个平台上使用:Windows,Linux和Docker。
获取SQL Server的docker镜像就像运行docker image pull一样简单。
容器要便宜得多。
我们可以根据需要在内部部署服务器/笔记本电脑上启动尽可能多的实例。每个容器都是独立的(清新干净),当我们完成后将它们关闭。
Docker和容器化应用程序的速度和效率优势也可用于SQL Server 2017 Docker容器。
我们可以使用卷挂载在容器外部存储.mdf和.ldf文件。这样,那些.mdf和.ldf 文件将存储在持久性硬盘上。即使移除容器,该数据也将是安全的,因为它在容器外部托管。
我们可以访问找到我们想要拉到我们本地笔记本电脑的镜像。在本文中,我们将使用“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。
我们将执行没有卷挂的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
将ACCEPT_EULA变量设置为“Y”以确认接受最终用户许可协议。
使用sa用户名登录SQL实例的密码。
使用容器中的TCP端口(第二个值)映射主机环境(第一个值)上的TCP端口。在此示例中,SQL Server正在侦听容器中的TCP 1433,并且它将暴露给主机上的端口1433。
指定容器的名称,而不是随机生成的名称。
此外,执行docker ps -a以验证容器是否已成功创建并运行。
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 Professors和Students表。请查看下图:
让我们验证容器内是否存在数据库和日志文件。请执行“docker exec -it sqlserver2017withoutmount bash”命令。它应该带我们进入容器。我们可以执行ls(列出)目录列表。我们知道,文件的路径是“/var/opt/mssql/data”,让我们导航并验证我们的webapidemodb.mdf和webapidemodb_log.ldf是否存在。
docker exec -it sqlserver2017withoutmount bashcd /var/opt/mssql/datals
让我们在Web API解决方案中使用我们在Docker容器中创建的数据库。请在Visual Studio 2017中打开College.Services.sln解决方案。请打开appsettings.json并修改“CollegeDBConnectionString”里面的“ConnectionStrings”。“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)。请参考下图:
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.mdf和webapidemodb_log.ldf是否丢失。
docker exec -it sqlserver2017withoutmount bashcd /var/opt/mssql/datals
通过上面的实验,我们知道如果我们创建没有卷挂载的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,我们应该在浏览器中看到Professor(s)和Student(s)信息。假设我们创建了相同的数据库名称,就像我们在第一次练习中所做的那样。
原文地址:
转载地址:http://htzhj.baihongyu.com/