容器的世界庞大而复杂,使用者可能会感到困扰,这里我们将列出一些示例,以便引导您顺利完成SQL Server容器的创建和管理。 对容器提供支持,是Windows Server 2016新增的一项重要功能,它对于SQL Server来说同样意义重大。如果你希望虚拟化数据库,那把它们放到SQL Server 容器中将会是个不错的选择。 容器可以实现操作系统级别的虚拟化,这远比使用虚拟机(VM)更轻量级。
正因为如此,你可以在一个物理服务器上运行比VM数量更多的SQL Server 容器。 此外,容器是无状态的,其可以被快速创建、克隆和删除。在删除容器时,其中所包含的数据会连同容器一起被删除。这使得容器……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属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所示。
图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命令。
图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所示。
图3. 使用SQL Server Management连接到SQL Server实例
使用SSMS连接SQL Server Express 2016实例,如图4所示。
图4. 使用SSMS管理SQL Server 容器
想要连接到另一个网络系统的SQL Server容器,你需要在Docker Run命令中指定主机服务器IP地址,SQL Server端口号,SQL Server系统管理员账号。
这个时候,就可以像使用其他SQL Server实例一样管理SQL Server容器。在你最终处理掉容器后,所有针对附加数据库文件的改变都会持续生效。但在容器内部所做的任何更改,例如,启用帐户,更改密码或修改配置设置等,都会被丢弃。
作者
翻译
TechTarget特邀编辑。北京邮电大学计算机科学与技术专业硕士。熟悉软件开发流程,对系统管理,网络配置,数据库应用等方面有深入的理解和实践经验。现就职于IBM(中国)投资有限公司,从事IBM服务器相关软件的开发工作。业余时间喜欢游泳登山,爱健身,喜欢结交朋友。
相关推荐
-
云端SQL Server高可用性最佳做法
与内部部署相比,在云端运行SQL Server可为数据库软件用户提供更多的灵活性和可扩展性,也可能更省钱。但云 […]
-
绘制数据关系图的利器:SQL Server 图像数据库工具
SQL Server 2017新增了图形数据库功能,你可以使用图结构来表示不同数据元素之间的关系。
-
如何在Azure部署时选择合适的SQL Server?
想要在Azure上运行SQL Server,企业一般会面临两种选择:在Azure虚拟机上安装SQL Server或使用Azure SQL Database。
-
Linux支持的引入 推动了SQL Server 2016集成服务的发展
随着SQL Server的不断发展,集成服务也在发生相应的变化。在最新的SSIS更新中,增加Linux支持和SQL Server 2016升级向导。