快速,持续,稳定,傻瓜式
支持Mysql,Sqlserver数据同步

使用Docker设置SQL Server实例

在线QQ客服:1922638

专业的SQL Server、MySQL数据库同步软件

在SQL Server 2017中,微软宣布了令人振奋的消息,即SQL Server现在可以在Docker容器中运行。Laerte Junior提供了开始在Docker中创建SQL Server实例的指南。

我们的DBA倾向于从配置SQL Server实例中省钱。我们只是不习惯在没有冗长的设置和所有这些先决条件的情况下就能够启动并运行SQL Server实例的想法。但是,当我们的Ops朋友,特别是Linux人士,看到我们盯着SQL Server安装屏幕时,只是笑着摇头。他们通过使用Docker节省了大量时间。使用PowerShell编写流程脚本,我们可以做同样的事情。

现在为什么能够如此迅速地配置实例如此重要?这是因为,如果在开发,测试和CI / CD系统中进行的测试和实验在单独的隔离实例中进行维护,以确保避免破坏实例的后果,则可以使软件发行更加可靠。使用Docker,您只需运行docker run即可在主机上启动任意数量的SQL Server全新干净实例。完成它们的处理后,您可以再次将它们撕回,而不会留下任何凌乱的残留物。这是将SQL Server放在其自己的容器中最有用的地方。

您可以使用Linux Docker在Linux环境中运行SQL Server,并使用Docker Enterprise Edition在容器中的Linux中运行受支持的SQL Server版本。您也可以在Windows 10或Windows Server 2016的Windows Docker中运行SQL Server。也可以在Mac的Docker中运行SQL Server!

Docker概述

那么,Docker是什么?Docker是一个用Go编写的开源平台,这是Google的一种高性能语言。Go为Docker提供了极大的可移植性,因为已编译的应用程序不依赖外部依赖项。

Docker允许在隔离的系统中进行管理。Docker不是虚拟化引擎,因为它使用通用的内核库(主机和容器)资源,而不是拥有自己的隔离资源。在虚拟化中,我们拥有完整的操作系统,而在Docker中,我们只有内核库– Windows Nano Server中

码头工人的图像结果

因为我们大多数SQL Server DBA对Windows都比较熟悉,所以我们想利用我们可以在Windows Server和Windows 10上的Docker容器中运行SQL Server的事实。由于是Windows,我们可以全部编写脚本在PowerShell中。在这里,我将展示如何使用运行Windows Server 2016,PowerShell和Docker的Azure虚拟机来做到这一点。如果您喜欢这样做,脚本将在没有虚拟机的情况下运行。

在开始之前,请创建您的计算机(无论是否虚拟),安装Windows Server 2016,然后在Admin模式下逐步执行PowerShell代码(“以管理员身份运行”)

设置Docker

在撰写本文时,Docker已经提供了两个版本的Windows Docker。对于Windows 10,请使用Docker Community Edition。由于本文是关于使用Windows Server 2016的,因此如果您愿意遵循的话,将为Windows Server安装Docker企业版。

启动以管理员身份运行的PowerShell命令窗口,并运行以下命令以下载并安装最新版本的Docker:

如果提示您安装任何必备组件(例如NuGet),请键入Y并在安装完成后重新启动。

使用Docker设置SQL Server实例

测试您的Docker安装

通过运行以下命令检查Docker版本:

使用Docker设置SQL Server实例

然后,您可以通过下载Docker为此目的拥有的容器hello-world:nanoserver来测试Docker 

Docker首先检查以查看映像是否已经存在。如果没有,它将下载并运行它。

使用Docker设置SQL Server实例

检查Microsoft存储库并下载SQL Server

现在已成功安装并运行Docker,您可以开始创建SQL Server容器。在Docker上检查Microsoft存储库:

使用Docker设置SQL Server实例

在本地下载SQL Server存储库。这些是大文件。

使用Docker设置SQL Server实例

例如,最新的mssql映像大小超过12 GB。甚至“ Hello World”也要占用GB。下载图像可能需要花费几分钟。

使用Docker设置SQL Server实例

检查已下载的本地存储库映像:

使用Docker设置SQL Server实例

启动SQL Server实例

下载映像后,就可以启动SQL Server实例了。在提升的PowerShell会话中,您可以使用docker run命令设置所需的属性并运行实例。这是参数的说明:

  • 名称(为容器提供一个友好的名称)
  • -d(在后台执行容器)
  • -p(端口映射)
    • port:port(14331:1433) –这里我们将具有1433端口的容器(14331)的端口映射到SQL。我们这样做是因为我们将创建2个SQL Server容器。如果要从OS主机或仅一个容器连接到SQL,则可以映射为1433:1433,因为每个容器都有自己的IP。由于我们也在外部连接(也从我的物理机连接),因此只有一个IP(OS主机VM)。区分集装箱的是港口。
  • -e(在容器执行运行时下创建环境变量)
    • sa_password(分配SQL Server SA密码– s @ 12345)
    • ACCEPT_EULA(通过Y)

运行此命令并根据需要修改密码。

使用Docker设置SQL Server实例

完成后,检查正在执行的容器。

使用Docker设置SQL Server实例

连接到SQL Server

要从VM内部连接到SQL Server,您需要知道容器的IP。检查<容器名称>将返回很多信息。您需要在JSON文档中找到正确的节点并将其保存在变量中

使用Docker设置SQL Server实例

由于这将返回一个较大的JSON文档,因此比搜索它做得更好。相反,您可以使用此脚本访问所需的值。

使用Docker设置SQL Server实例

注意:每次启动容器时,无论是主机服务器重新启动还是容器重新启动,IP地址都可以更改

现在,您可以使用容器的内部IP在虚拟机中使用SSMS连接到SQL Server。替换您自己的IP,并在启动实例时将sa与您提供的密码一起使用。当然,您需要在VM上安装SSMS。

使用Docker设置SQL Server实例

并且我们已经确认它可以正常工作!

使用Docker设置SQL Server实例

在VM外部访问容器

要从外部访问容器,您将需要打开在创建容器时使用的防火墙端口。本示例使用端口14333。

使用Docker设置SQL Server实例

如果您正在使用Azure VM,则还必须将端口添加到VM的“网络”页面上Azure门户中的网络接口。在“入站”和“出站”安全规则中都将端口设置为“自定义”端口。

使用Docker设置SQL Server实例

您还需要确定VM的外部IP。如果在Azure中运行,则可以在VM的“网络”页面上找到IP。如果要继续使用其他方法,只需确定用于连接到VM的IP。

现在,您可以连接到SQL Server,传递容器端口以区分容器。在此示例中,为13.86.80.154,14333。

使用Docker设置SQL Server实例

管理容器

每当您重新启动VM时,您都会发现这些容器不再运行。如果运行先前用于查看正在运行的容器的docker ps命令,则重启后将看到此信息。

使用Docker设置SQL Server实例

容器没有消失,它们只是没有运行。您可以添加-a开关以查看所有容器,无论其状态如何。

使用Docker设置SQL Server实例

要启动容器,请使用docker container start命令。

您还可以使用Docker容器命令停止,重新启动,移除等等。例如,此脚本停止SQL Server实例,然后将其删除。

使用Docker设置SQL Server实例

快速创建和拆除实例的能力可能是使用Docker托管SQL Server的最大优势。

如果您通过遵循上一个示例删除了sql01,请再次运行此命令来创建它,以便您可以与本文的其余部分一起继续。

如果容器必须在主机重新启动后自动运行,则可以在命令中添加重新启动标志。

管理SQL Server实例

您会发现管理SQL Server实例与管理传统实例相似,但是由于容器在自己的空间中运行,因此存在一些差异。由于容器生活在自己的空间中,因此无法在该空间之外看到。例如,它不能直接备份到容器外部的文件夹。为了演示,首先列出VM上C:\驱动器的目录内容。

使用Docker设置SQL Server实例

您可能会看到与我在VM上看到的文件夹不同的一组文件夹。现在,通过运行以下命令将PowerShell会话直接连接到容器:

PowerShell窗口将更改,您将看到在容器内部运行的新会话。运行lsdir命令查看文件夹内容。

使用Docker设置SQL Server实例

文件夹列表与VM的列表非常不同,因为您正在容器内部查看。

将备份文件复制到容器

要备份和还原由运行在Docker容器中的实例托管的数据库,您将需要提供一种在实例与主机之间移动文件的方法。请按照以下说明来学习执行此操作的一种方法。

  1. 如果不存在,请在主机上创建一个C:\ Temp文件夹。
  2. 将WideWorldImporters_Full.bak文件下载到C:\ Temp文件夹。
  3. 确保您正在运行连接到容器的PowerShell会话。
  4. 在容器中创建一个C:\ Temp \ Backup文件夹

    使用Docker设置SQL Server实例

  5. 然后,您可以使用Exit在PowerShell会话中切换回主机。

    使用Docker设置SQL Server实例

  6. 现在已经创建了目录,您可以使用docker cp命令使用docker将.bak文件复制到容器中的备份文件夹中。请注意,目录名和文件名区分大小写。

    使用Docker设置SQL Server实例

  7. 连接回容器。

    使用Docker设置SQL Server实例

  8. 在新的PowerShell会话中,查找文件。

    使用Docker设置SQL Server实例

恢复数据库

现在,该文件位于SQL Server实例可以看到的位置,您应该连接SSMS并照常进行还原。如果希望从VM内部进行连接,则可能需要使用主机中运行的PowerShell会话中前面部分中的脚本再次确定IP地址:

还原可以照常在SSMS中完成:

使用Docker设置SQL Server实例

创建备份卷

代替备份到容器内的文件夹然后将文件复制到主机,管理备份的另一种方法是将卷安装到容器上,主机和容器都可以访问该卷。这样做时,您必须创建一个新的容器。

  1. 连接到在VM中运行的PowerShell,然后运行此命令,这将创建一个名为SQLBackups的新Docker卷。

    使用Docker设置SQL Server实例

  2. 查找新卷的位置。默认情况下,在隐藏位置C:\ ProgramData \ docker \ volumes创建卷使用Docker设置SQL Server实例
  3. 现在,您将创建一个名为sql02的新容器,该容器将能够使用新卷。该命令使用v开关将主机上的卷映射到容器。

    使用Docker设置SQL Server实例

  4. WorldWideImporters备份文件复制到新卷。

    使用Docker设置SQL Server实例

  5. 使用PowerShell连接到新容器。

    使用Docker设置SQL Server实例

  6. 在容器中查找备份文件。

    使用Docker设置SQL Server实例

    现在,主机和容器都可以看到一个文件夹。SQL Server实例可以直接备份到backups文件夹。如果您确实想将这些安装的卷之一用于数据库文件(mdf,ldf,ndf),则也可以。

结论

当微软宣布在Linux和Docker上支持SQL Server时,很明显,DBA的世界正在发生变化。从微软的角度来看,这是很聪明的,因为它可以在过去从未考虑过的商店中获得SQL Server。

本文介绍了如何使Docker在服务器上运行以及如何创建运行SQL Server的容器。然后讨论了如何使用容器和实例。请务必查看Docker文档,以获取有关如何更好地管理在Docker上运行的SQL Server的更多想法。

我要感谢我的好朋友Anderson Alves de Souza的初步研究。

相关推荐

咨询软件
 
QQ在线咨询
售前咨询热线
QQ1922638