五大技巧构建首个SQL Server容器

日期: 2017-03-21 作者:Michael Otey翻译:杨宏玉 来源:TechTarget中国 英文

容器的世界庞大而复杂,使用者可能会感到困扰,这里我们将列出一些示例,以便引导您顺利完成SQL Server容器的创建和管理。 对容器提供支持,是Windows Server 2016新增的一项重要功能,它对于SQL Server来说同样意义重大。如果你希望虚拟化数据库,那把它们放到SQL Server 容器中将会是个不错的选择。 容器可以实现操作系统级别的虚拟化,这远比使用虚拟机(VM)更轻量级。

正因为如此,你可以在一个物理服务器上运行比VM数量更多的SQL Server 容器。 此外,容器是无状态的,其可以被快速创建、克隆和删除。在删除容器时,其中所包含的数据会连同容器一起被删除。这使得容器……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

容器的世界庞大而复杂,使用者可能会感到困扰,这里我们将列出一些示例,以便引导您顺利完成SQL Server容器的创建和管理。

对容器提供支持,是Windows Server 2016新增的一项重要功能,它对于SQL Server来说同样意义重大。如果你希望虚拟化数据库,那把它们放到SQL Server 容器中将会是个不错的选择。

容器可以实现操作系统级别的虚拟化,这远比使用虚拟机(VM)更轻量级。正因为如此,你可以在一个物理服务器上运行比VM数量更多的SQL Server 容器。

此外,容器是无状态的,其可以被快速创建、克隆和删除。在删除容器时,其中所包含的数据会连同容器一起被删除。这使得容器对于开发和测试场景非常有用,当你移动SQL Server实例时,不必再等待漫长的安装过程。SQL Sever容器也适用于其他用途,例如它可以在多租户架构下最大化数据库密度,隔离应用程序,以便使用者能够更好地进行管理控制。

我将向你展示如何使用微软预建的SQL Server Express镜像在Docker容器运行SQL Server,以及如何附加数据库到容器中,如何管理SQL Server实例。

现在,SQL Server 2016的开发版也有了可用的镜像,接下来的SQL Server公共预览也会有对应的镜像,这个公共预览版本添加了对Linux支持。您还可以为SQL Server2016标准版本和企业版本构建对应的SQL Server容器。

在Windows Server中使用容器

在容器运行SQL服务器,您必须开启Windows Server 2016对容器的支持功能。要做到这一点,你需要打开Server Manager,使用Manage选项,选择Add Roles and Features选项。在Add Roles and Features Wizard界面单击Next,进入Features页面,如图1所示。

为Windows Server 2016 添加容器支持功能

图1. 为Windows Server 2016 添加容器支持功能

在Features页面,选择Containers特性,单击Next。然后,点击Install完成对容器支持的配置。安装需要几分钟;然后,你必须重新启动Windows Server系统。

接下来,你需要安装Docker。打开PowerShell控制台,运行如下命令:

Install-Module -Name DockerMsftProvider -Repository PSGallery -Force

Install-Package -Name docker -ProviderName DockerMsftProvider

安装完Docker后,你还需要重启系统。你可以打开命令行,运行Docker version 命令来查看Docker是否安装成功。

安装SQL Server Express 镜像

在Docker 安装完后,你可以继续下载SQL Server Express 镜像。

容器是一个运行着镜像的实例,它包含一个文件系统和运行时所需的代码集合。你可以运行下面Docker Pull命令,下载SQL Server 2016 Express镜像:

docker pull microsoft/mssql-server-windows-express

下载这个镜像将需要一些时间,因为它包含了Windows 2016 Server核心操作系统和SQL Server 2016 Express。Docker Pull命令运行完成后,您可以通过运行Docker Images命令查看可用的图像,你将会看到类似如下的结果:

PS C:UsersAdministrator> docker images

REPOSITORY                       TAG              IMAGE ID

microsoft/dotnet-             dotnetapp

samples                             -nanoserver      a331d851e765

microsoft/mssql-

server-windows                  latest                6fb5a1dbd3c8

microsoft/aspnet                latest                 e761eca2f8df

microsoft/

windowsservercore            latest                4d83c32ad497

microsoft/mssql-

server-windows-express    latest                 d5cc84b603b4

SQL Server容器启停

操作到这一步,你就可以使用Docker Run命令启动SQL Server容器了,如下面的例子所示:

docker run -d -p 1433:1433 -e sa_password= TempPa550wd# -e ACCEPT_EULA=Y microsoft/mssql-server-windows-express

-d 参数的意思是detach--它表示容器将在后台运行。-p 参数表示将会开放主机的部分TCP 端口。例如绑定主机端口1433到容器的1433端口,所有连接主机1433端口的网络请求都会被转发到容器的1433端口上。

“-e sa_password”参数为容器化的SQL Server实例提供sa账户或系统管理员及密码--你需要确定这个参数符合Windows系统密码复杂度要求。

最后, microsoft/mssql-server-windows-express 的值用于制定运行的容器所使用的镜像。

到了这一步,SQL Server的容器将会启动。你可以使用Docker PS命令来列出启动中的容器:

PS C:UsersAdministrator> docker ps

CONTAINER ID         IMAGE                    COMMANDs            CREATED

98c9cb874f27    microsoft/mssql-   "cmd /S /C 'powers..."  43 minutes ago

                              server-windows-

                              express                    

如果你想要停止容器运行,你可以使用Docker stop,Docker Kill 或者Docker rm命令。Docker Stop命令将会试图自然结束容器进程,但如果十秒内没有结束的话,Docker将会强行终止进程。Docker Kill命令将会立即停掉容器,并不会给它自然退出的机会。Docker rm命令通常用于删掉已经停止的容器,但如果同时使用-f参数,那么这个命令将首先停止容器,然后对其进行删除。

使用Docker Stop 命令停止SQL Server容器,你只需要输入容器ID的前三个字符,作为一个唯一的标识符:

docker Stop 98c

如果该命令工作正常,停止运行容器仍将存在。你可以运行下面的命令进行删除:

docker rm 98c

为容器附加数据库

启动容器后,容器还不具备持久性存储,如果没有SQL Server数据库,那这个容器将毫无用处。幸运的是,Docker可以使用命令来挂载数据库文件。数据库文件可以驻留在容器中,文件共享中,或者共享存储中(主机可以进行访问)。

下面的示例显示如何使用Docker Run命令来启动SQL Server容器,以及附加一个位于主机C/temp目录中数据库:

docker run -d -p 1433:1433 -e sa_password=TempPa550wd# -e ACCEPT_EULA=Y -v C:/temp/:C:/temp/

-e attach_dbs="[{'dbName':'EditorialDb','dbFiles':['C:\temp\editorialdb.mdf','C:\temp\ editorialdb_log. ldf']}]"

microsoft/mssql-server-windows-express

在这个示例中,-v 参数用于挂载主机存储ctemp到容器中。你可能注意到此处类似于Linux,使用了“\”的方式。

在-e参数与attach_dbs参数一起用来控制数据库的连接,选择数据库.md文件和.ldf文件。你在上面可以看到,attach_dbs使用JSON格式来指定数据库和文件。

连接容器

接下来,你可以使用Docker Exec 命令来启动新容器中的SQLCMD 工具,使用前三个字符作为它的ID:

docker exec -it 5e9 sqlcmd -S.

在这里,SQLCMD 将使用Windows身份验证连接到SQL Server实例。-it参数为SQLCMD工具提供了交互式命令行,如图2所示。一旦连接成功,您可以运行任何SQL Server支持的T-SQL命令。

使用SQLCM的命令连接到容器

图2 使用SQLCM的命令连接到容器

你也可以使用SQL Server Management Studio (SSMS)连接到Docker SQL Server实例中。从主机使用SSMS连接到SQL Server容器,你需要知道SQL Server使用的TCP / IP地址以及端口,即使你使用默认的1433端口也是一样。你可以使用Docker Inspect 命令来获取容器的TCP / IP地址,与之前一样,你需要使用容器的前三个字符作为唯一ID标识。

docker inspect -format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 5e9

当你使用SSMS打开数据库连接时,你也需要使用SQL Server身份验证。

我发现,sa帐户在SQL Server Express镜像中是被禁用的,它需要我在使用SQLCMD之前进行启用。使用SSMS连接数据库的对话框如图3所示。

 使用SQL Server Management连接到SQL Server实例

图3. 使用SQL Server Management连接到SQL Server实例

使用SSMS连接SQL Server Express 2016实例,如图4所示。

使用SSMS管理SQL Server 容器

图4. 使用SSMS管理SQL Server 容器

想要连接到另一个网络系统的SQL Server容器,你需要在Docker Run命令中指定主机服务器IP地址,SQL Server端口号,SQL Server系统管理员账号。

这个时候,就可以像使用其他SQL Server实例一样管理SQL Server容器。在你最终处理掉容器后,所有针对附加数据库文件的改变都会持续生效。但在容器内部所做的任何更改,例如,启用帐户,更改密码或修改配置设置等,都会被丢弃。

翻译

杨宏玉
杨宏玉

TechTarget特邀编辑。北京邮电大学计算机科学与技术专业硕士。熟悉软件开发流程,对系统管理,网络配置,数据库应用等方面有深入的理解和实践经验。现就职于IBM(中国)投资有限公司,从事IBM服务器相关软件的开发工作。业余时间喜欢游泳登山,爱健身,喜欢结交朋友。

相关推荐