标签:档案sqlserver

获得用于Linux CTP2.0 Docker映像的SQL Server 2019

如果用于从Microsoft存储库中提取MSSQL服务器映像,例如,

Docker Pull Microsoft/MSSQL服务器

这对2019年的CTP来说是行不通的。

我能够重新拉(又名更新)使用以前的存储库,但这对标记为CTP的CTP不起作用vNext-CTP2.0-ubuntu。

最后,我注意到docker hub页面上针对图像的新docker pull命令

它说:docker pull mcr.microsoft.com/mssql/server

所以使用它的标签拉CTP的命令如下:

码头工人拉mcr.microsoft.com/mssql/server:vNext-CTP2.0-ubuntu

新Pluralsight课程:在Win上与Visual Studio代码中的SQL Server数据交互,Mac,Linux

形象我最近上的多元视觉课,跨平台的SQL Server管理开发人员使用VS代码,这个月早些时候上线了(就在我准备登机参加为期两周的会议旅行的时候!)

这是一门关于Visual Studio代码扩展的课程,我非常喜欢使用它,所以想与您分享。它是MSSQL扩展,允许您以相当丰富的方式与SQL Server进行交互,这掩盖了它所扩展的IDE的轻量级。因为VS代码是跨平台的,它的所有扩展也是如此。所以你可以在Windows上编程的时候使用这个,Mac或Linux,希望与SQL Server数据库进行一些基本交互。

作为SQL Server的例子,我在Windows上使用SQL Server LocalDb,Mac上Docker容器中的SQL Server for Linux和云中的Azure SQL。本课程不仅向您展示如何安装VS代码(以及一些VS代码基础知识)和扩展,而且还将向您介绍如何设置每个数据库服务器。这意味着它也有关于Docker的一课,安装并运行一个映像,以及在Azure门户中快速创建一个新的SQL数据库。

一旦一切就绪,我深入研究了mssql扩展的特性和功能。我翻遍了所有可能的石头,以确保你不会错过有用的功能,这是一个规范,如果你只是开始使用这样的工具没有任何准备。

这门课主要是演示,ppt幻灯片很少,我在Windows下工作,在我的Macbook上,甚至在Linux虚拟机上。

形象我为这门课感到骄傲的是,如果你从未使用过VS代码,你将学会如何绕过这个令人惊叹的编辑。如果你从未使用过Docker,我提供了一个非常有帮助和温和的介绍,你将能够与它一起工作。我得到了负责这个扩展的团队的大力支持,因为他们很高兴能得到这种关注。

所以无论你用什么语言编码,无论你做什么手术,如果您正在使用SQL Server(或有兴趣使用它),这门课程应该对掌握这个非常方便的扩展大有帮助!

下面是课程的目录。

如果你需要30天的免费试用Pluralsight图书馆,这样你就可以看这个,给我寄张便条!


模块1:介绍和安装vs代码和mssql扩展

在本模块中,您将简要介绍跨平台和免费的开发人员IDE,Visual Studio代码及其mssql扩展,该扩展允许您在不离开IDE的情况下与SQL Server数据库执行一些关键交互。您还将了解如何在Windows和macOS上安装IDE和扩展

  • 模块及课程概述
  • 介绍Visual Studio代码和mssql扩展
  • 在Windows上安装Visual Studio代码
  • 在macOS上安装Visual Studio代码
  • 介绍Visual Studio Code的超级编程能力
  • 在VS代码中安装mssql扩展

模块2:为任何平台准备SQL Server,本地和云中

在这个模块中,您将学习如何设置各种SQL服务器。它们都可以快速安装。您将学习如何在Windows上安装SQL Server LocalDb,在云中创建一个Azure SQL数据库,并使用SQL Server for Linux的Docker映像在MacOS的容器中快速启动SQL Server。这将确保您在余下的课程中有一个SQL Server数据库可以与之交互。

  • SQL Server LocalDB:最简单的SQL Server
  • 在云中设置Azure SQL数据库
  • 验证新的Azure SQL数据库
  • 设置Azure SQL数据库的最后一个细节
  • 使用Docker容器在任何O/S上为Linux托管SQL Server
  • 安装Docker并运行SQL Server容器
  • 验证容器化数据库
  • 理解容器中的持久性和缺乏持久性
  • 使用示例数据库获取自定义图像

模块3:从各种平台连接到各种SQL服务器

在这个模块中,你会学到如何与当地各种各样的人联系,带有mssql扩展的云和容器化SQL服务器。您将学习如何使用命令和快捷方式,如何存储连接概要文件和密码,甚至如何创建一个方便的快捷方式来启动mssql。

  • mssql的命令和执行引擎
  • 连接到LocalDB,同时学习更多关于mssql连接的知识
  • 从Windows和macOS连接到Azure SQL
  • 演示mssql如何安全地存储您的密码
  • 使用ADO.NET连接字符串进行连接
  • 连接到Docker容器中的数据库
  • 连接键盘和状态栏快捷方式
  • 创建用于启动MSSQL和连接的键盘快捷方式

模块4:学习mssql基本连接,查询和创建

在这个模块中,你将开始与数据库交互,执行查询和命令,探索结果集。您将了解这些代码片段,还将了解如何附加到现有数据库文件并从头创建新的数据库。最重要的是,您将了解mssql扩展带来的强大的SQL编辑器和结果视图支持。

  • 附加现有数据库文件
  • 与第一个查询的结果进行交互
  • 智能编辑器窗口
  • 使用代码段加速命令生成
  • 进一步研究多个结果集
  • 使用代码片段查看数据库元数据
  • 创建数据库,表和数据

模块5:利用高级技巧

本模块将深入研究mssql,并提供一些技巧,不仅利用mssql的功能,而且,Visual Studio代码的功能使使用MSSQL更加容易。

  • 导出结果到CSV,JSON或Excel
  • mssql消息的本地化
  • 通过VS代码的设置控制行为
  • 在编辑器窗口中格式化代码
  • 结果窗口技巧,快捷方式和设置
  • 检查最后几个设置
  • 在VS代码中创建自己的SQL代码片段
  • 展望Mac和Linux上的集成身份验证

在mssql-sqlserver-linux docker映像上的sqlserver .sh文件中到底有什么?

更新6月3日2017年:团队修改了docker镜像,bash文件不见了,假设它的逻辑被分解到不同的位置。尽管如此,我还是很高兴我抓住了这个,以满足我的好奇心!

微软为SQL Server创建了4个官方Docker镜像:SQL Server for Linux,SQL Server开发人员版本,SQL Server Express和(windows) SQL Server vNext。它们可以在Docker Hub上找到(例如(https://hub.docker.com/r/microsoft/mssql-server-linux/),在github.com/Microsoft/mssql-docker中也有一个Github存储库。与该图像相关的一些文件不在Github上。每个映像的dockerfile文件运行某种类型的启动脚本。Windows映像有一个名为start.ps1的PowerShell脚本。你可以在Github回购中看到这些。Linux映像运行一个名为sqlservr.sh的bash文件。但这并不包括在回购协议中,我很好奇它做了什么。

注:我写了一篇关于在Linux容器中使用SQL Server (Mashup:使用Visual Studio代码在Mac上的Docker中运行Linux上的SQL Server我还写了一篇文章,关于如何使用容器来访问我的7月msdn杂志的数据点专栏。(看这个空间)。

还是有点菜鸟的味道我在……上学会了如何从Docker容器中读取文件,你猜对了……StackOverflow.遵循这些说明,我创建了一个运行容器的快照

mysqlserverlinuimagegit:(docker提交juliesqllinux mysnapshotsha256:9b552a1e24df7652af0c6c265ae5e2d7cb7832586c431d4b480c30663ab713f0

用bash运行快照:

mysqlserverlinuimagegit:(docker运行-t -i mysnapshot bin/bash(电子邮件保护)face2: / #

然后在新的提示下(),使用ls获取列表

(电子邮件保护):/ # lsSqlCmdScript.sqlSqlCmdStartup.sh引导deventrypoint.sh安装程序自由LB64媒体mnt选择proc运行sbin子深水救生艇systmp美国陆军var

然后导航到bash文件所在的文件夹,并列出其内容:

(电子邮件保护):/ opt /该软件/ bin # lscompress-dump.shgenerate-core.shmssql-confpaldumpersqlpackageSql ServRsqlservr.sh

在那里,我使用cat命令列出sqlserver .sh文件的内容,并查看它的作用。这是以防万一的秘方,像我一样,你需要知道在封面下面发生了什么!

(电子邮件保护):/ opt /该软件/ bin #猫sqlservr.sh# ! / bin / bash## Microsoft(R) SQL Server(R)启动Docker脚本#ACCEPT_EULA = $ {ACCEPT_EULA:}sa_password=$sa_password:-#整理= ${排序:-SQL_Latin1_General_CP1_CI_AS}have_sa_password = " "# have_collation = " "sqlservr_setup_prefix = " "配置= " "重新配置= " "#检查系统内存#让system_memory="$(awk '/MemTotal/ {print $2}' /proc/meminfo) / 1024"如果[$system_memory-lt 3250];然后echo "错误:这台机器必须至少有3.25 gb的内存来安装Microsoft(R) SQL Server(R)。"出口1fi#创建系统目录#mkdir - p /var/opt/mssql/datamkdir - p /var/opt/mssql/etcmkdir - p /var/opt/mssql/log检查EULA#如果(" $ ACCEPT_EULA "! = " Y "["$ACCEPT_EULA"] && ["$ACCEPT_EULA"]! = " y "];然后echo“ERROR:您必须在此容器之前接受最终用户许可协议”> /DEV/STDERecho”可以启动。最终用户许可协议可在“> /DEV/STDER回声“http://go.microsoft.com/fwlink/?LinkId=746388”。> /DEV/STDER回声”“echo“如果您接受协议,则将环境变量ACCEPT_EULA设置为'Y'。”> /DEV/STDER出口1fi#配置SQL引擎#如果[!-f/var/opt/mssql/data/master.mdf];然后配置= 1如果[!- z " $ SA_PASSWORD "] || [-f /var/opt/mssql/etc/sa_password];然后将密码设为1fi#如果[!- z " $排序”] || [-f /var/opt/mssql/etc/collation];然后# have_collation = 1γ-干扰素如果[-z "$have_sa_password"];然后echo "错误:没有配置系统管理员密码。你可以设置> /DEV/STDER回显“通过环境变量的密码(SA_PASSWORD)或配置文件”> /DEV/STDER回声”(/ var / opt /该软件/ etc / sa_password)。”> /DEV/STDER出口1fifi#如果用户想重新配置,设置配置标志#if [-f /var/opt/mssql/etc/reconfigure];然后重新配置= 1fi#如果我们需要配置或重新配置,通过配置运行#逻辑#如果(" $配置"= = " 1 "]||[“$重新配置”= = " 1 "];然后sqlservr_setup_options = " "# if [-f /var/opt/mssql/etc/collation];然后#sqlservr_setup_options+=“-q$(cat/var/opt/mssql/etc/collation)”否则#如果[!- z " $排序”];然后#sqlservr_setup_options+=“-q$collation”γ-干扰素γ-干扰素组+ eCD/var/opt/mssql(CD/var/opt/mssql)echo“配置Microsoft(R) SQL Server(R)…”if[-f/var/opt/mssql/etc/sa_password];然后sqlservr_sa_password_file=/var/opt/mssql/etc/sa_password/opt/mssql/bin/sqlservr--设置$sqlservr_setup_options 2>&1>/var/opt/mssql/log/setup-$(日期+%y%m%d-%h%m%s).logelif [!- z " $ SA_PASSWORD "];然后SQLSERVR_SA_PASSWORD_FILE=<(echo -n "$SA_PASSWORD") /opt/mssql/bin/sqlservr——setup $sqlservr_setup_options 2>和1 > /var/opt/mssql/log/setup-$(date +%Y%m%d-%H% m% S).log其他的如果[!- z ' sqlservr_setup_options美元'];然后/opt/mssql/bin/sqlservr--安装$sqlservr_安装选项2>&1>/var/opt/mssql/log/setup-$(日期+%y%m%d-%h%m%s).logfifiretcode = $ ?if [$retcode != 0];然后微软(R) SQL Server(R)设置失败,错误代码$retcode。有关详细信息,请查看安装日志/var/opt/mssql/log。“> /DEV/STDER出口1fi设置- erm - f /var/opt/mssql/etc/reconfigurerm - f /var/opt/mssql/etc/sa_password回声“配置完成。”fi#启动SQL Server#执行/ opt /该软件/ bin / sqlservr $ *

Mashup:使用Visual Studio代码在Mac上的Docker中运行Linux上的SQL Server

我对新的用于Visual Studio代码的MSSQL扩展非常感兴趣。我有一篇文章即将在MSDN杂志和计划更多的乐趣。我的最新实验是利用现在有Linux版本的SQL Server这一事实来做一个大型mashup。因此,我们不再局限于在Windows或Azure上托管它。在Linux上宿主SQL Server的最轻量级方法是在Docker容器中。当我坐在一台MacBook电脑前打字时,我绝不打算放弃Windows开发或Windows机器。我很高兴能有更多的选择,并且能够分享我正在学习的内容在Windows开发人员的世界之外工作。

容器没有状态。有很多方法可以解决这个问题(我将在下面向您展示),但是我只知道在这里很危险。这是在设计时使用SQL Server的好方法。将其用于生产是完全不同的情况,在使用该选项之前,您需要做更多的研究和自我反省。

另一方面,有些人确实有这个特定的目标:

为了做到这一点,我必须查阅大量的文档,当然,即使是我可以使用的那些资源,我也会陷入困境。所以我将分享我如何使这个设置工作的完整路径。

先决条件

我的MacBook上已经安装了用于Mac的Docker。这是安装链接如果需要执行这一步。请记住,您不能在VM上这样做。我试着用一个干净的设置重复这个过程。

确保Docker被设置为至少使用4GB内存。

2017 - 04 - 07 - _13 55 - 27. jpg

获取SQL Server Docker映像

这就是整件事如此简单的原因!微软已经为Linux创建了一个官方的docker镜像,其中包含SQL Server。

在终端窗口,您可以使用

sudo docker拉microsoft/mssql-server-linux

一旦安装,“docker images”命令将显示该映像现在可以在您的机器上使用。

2017 - 04 - 07 - _14 10 - 55

虽然我今天才安装,你可以看到我正在使用的图像-这是最新的版本-是由微软3周前创建的。

从图像中旋转一个(或两个)容器

现在Docker意识到了这个图像,您可以从中创建一个容器——它正在运行映像的实例。

因为我们用的是Mac电脑等待一个“bug”得到固定,我们将创建两个容器。

取决于你对Docker的熟悉程度,您可能知道也可能不知道容器是没有状态的。一旦你删除了一个容器,一切都不见了!如果你在那个容器中保存了数据,它,同样,都消失了。然而,Docker有一个名为“volume”的特性这是在docker实例之间保留状态的一种方法。所以当一个实例被关闭时,状态存储在卷中。当打开另一个容器实例时,该卷为容器提供了前一个实例的状态。这就是为数据库使用容器的方法。

这里有一个关于卷的很好的教程:https://rominirani.com/docker-tutorial-series-part-7-data-volumes-93073a1b5b72
官方的docker doc:https://docs.docker.com/engine/tutorials/dockervolumes/#/creating-and-mounting-a-data-volume-container

但是,在Mac上使用Docker托管sql-server-linux映像存在一个问题(看起来解决方案即将到来)。这使我们无法以简单的方式使用卷进行持久性。所以,我们将创建一个单独的容器,它是一个“数据卷容器”,然后,我们将运行SQL Server的容器指向数据卷容器。

创建卷容器

我将命名我的mssqldata。这是创建它的命令。(不要错过命令的完整长度!)

docker创建-v /var/opt/mssql——命名为mssqldata微软/ mssql-server-linux /bin/true

这个卷容器仍然使用图像作为其基础。但是我们不会从这个实例运行SQL Server。

创建SQL Server容器

现在可以创建一个容器,在其中运行SQL Server,该容器将使用数据卷容器存储数据。

docker运行-e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=Passw0rd' -p 1433:1433—volumes—from mssqldata -d—name sql-server microsoft/mssql-server-linux

需要两个环境变量(accept_eula和sa_password)。用户id是(gulp) ' sa'。密码要求是:“至少8个字符,包括大写字母,小写字母,以10位数和/或非字母数字符号为基础。我真的很喜欢!

一旦这些存在,

码头工人ps

只显示常规容器。卷容器是隐藏的,所以您需要

码头工人ps -

看到它。

2017 - 04 - 07 - _16 - 07 - 49. - jpg注意,我将运行SQL Server的容器位于端口上,而数据卷容器具有不同的状态“Created”,并且不暴露在端口上。

从SQL命令行测试连接

你不必这么做,但这让我很开心,也很有趣。您知道可以通过命令行与SQL Server交互吗?这些工具安装在容器中,但是使用起来很麻烦。直接把它们安装到你的电脑上就容易多了。Mac的命令行工具是sql-cli

注:5月16日微软发布了macOS版本的sqlcmd和bcp(批量复制)。很高兴知道您是否已经熟悉sqlcmd。下面是他们的博客文章。

你可以安装与:

npm安装-g sql-cli

使用mssql命令启动它。

您需要连接的最小值是标识服务器(默认位于localhost,您不需要指定端口)和密码。它将假定sa为userid。

mssql -s localhost -p Passw0rd

如果它是成功的,你会得到一些信息,然后是一个新的提示符,该软件。

连接到localhost……0.4.14 sql-cli版本输入“帮助”使用提示。MSSQL

足够的。现在我可以使用我最喜欢的新工具了。的mssql扩展在Visual Studio代码中

在Visual Studio代码中连接

一旦在vs代码中安装了mssql,您可以从创建一个新的sql文件开始。或者通过命令(F1 for the command pallete,MS SQL查看命令,然后查看新查询。这将提示您输入一个连接—一次一个参数。您还可以从MS SQL Connect命令(C)开始。扩展将提示您输入每个参数。

服务器名称:本地主机数据库名称:(输入)用户名:sa密码:passw0rd保存密码(是或否)配置文件名称:【您的选择】

如果你输入正确,它不仅会连接,但是,在VS代码设置中,详细信息将作为连接配置文件存储,并可用于后续连接。

您可以在IDE的右下角看到正在连接的连接状态,以及连接时的连接状态。

2017 - 04 - 07 - _18 19 - 37. jpg

在编辑器中打开的SQL文件中,您可以键入SQL并查看一些现有的代码片段,还可以从Intellisense获得帮助,因为后者已经读取了服务器上数据的模式。到目前为止还没有多少。

选择sqlListDatabases片段然后执行它(右键单击上下文菜单上执行查询或⇧⌘E)显示数据库:

2017 - 04 - 07 - _18 - 22 - 45. jpg

现在你可以使用TSQL创建数据库,数据库对象,查询数据。在结果窗格中,您将看到数据作为一个网格,类似于您在SSMS中可能看到的网格。您还可以将结果导出到CSV或JSON。我最近写了一篇关于你可以用mssql做的所有很酷的事情的文章,将在2017年6月的MSDN杂志上发表。但是它连接到一个SQL Azure数据库。与此同时,您可以直接进入扩展的文档(aka.ms/mssql-marketplace)。

创建数据库和表

我让更多的代码片段帮助我创建数据库和表。

第一次是我改变了片段的sqlCreateDatabase创建一个新的数据库的数据库名称placholder称为LinuxReally然后执行与⇧⌘E。

重新运行select name from sys.databases命令表明新数据库现在在列表中。

接下来,我利用sqlCreateTable片段来帮助创建一个新表。我将这个表命名为DatabasesIKnow,并给它三个列

创建表dbo.databasesiknow(id int非空主键,——主键列DatabaseName [NVARCHAR](50) NOT NULL,KnowIt[一些]);

出于某种原因,当我创建这个时,智能感知缓存没有自动刷新。可能是因为它是一个新的数据库。甚至mssql扩展的Refresh Intellisense Cache命令也没有启用它。这次我选择了LinuxReally数据库,而不是默认情况下让扩展连接到master,通过断开和重新连接,我让它工作起来了。当我这么做的时候,我可以看到消息“正在更新智能感知……”在状态栏中。在我做完这些之后,每当我修改数据库模式时,智能感知就会自动刷新。

一旦我有了新的数据库,我可以执行"select * from dbo.DatabasesIKnow"看看正确的结果。在我看来,因为我没有添加数据,没有争吵。但很明显,它是从我的桌子上读出来的。

2017年4月8日

取下sql-server容器

现在是大型docker卷测试。我第一次从数据库断开连接在VS代码与⇧⌘E。然后我停止并用以下两个命令删除了SQL Server容器:

Docker停止SQL Server Docker RM SQL Server

但我让数据卷容器(mssqldata)继续运行。

然后,我使用与前面相同的命令创建了一个新的容器实例:

docker运行-e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=Passw0rd' -p 1433:1433—volumes—from mssqldata -d—name sql-server microsoft/mssql-server-linux

在VS代码中,我认为重新连接到服务器和我的新数据库很容易,因为它已经存储在连接配置文件中。这是第一个,localhost: LinuxReally。

2017 - 04 - 08 - _09 - 11 - 50. - jpg

连接成功,列出的数据库显示了我的新数据库SikNow数据库。Select *显示了模式。因此,即使我已经杀死并重新创建了sql server容器,我的数据库仍然保存在数据卷容器中。

下一个测试:取下两个容器。

现在是时候看看当我停止并移除两个容器时会发生什么了!

码头工人停止sql server码头工人rm sql serverDocker停止MSSQLData码头工人rm mssqldata

接下来,我使用与前面相同的命令重新启动sql-server容器,并使用参数来使用(未运行)mssqldata卷容器。

docker运行-e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=Passw0rd' -p 1433:1433—volumes—from mssqldata -d—name sql-server microsoft/mssql-server-linux

失败了。我需要首先运行数据卷容器。不幸的是,我重新运行了create命令并覆盖了现有的容器,所以一切都失去了。很好的教训!

所以我从零开始。在全新的数据卷容器中,我重新创建了数据库和表。

经过更多的实验,我意识到我误解了关于卷的Docker文档。您可以创建数据卷容器的副本并删除它们。但是你需要成为一个码头忍者。虽然你可以制作容器的各种副本,一旦你对所有相关的卷进行RM,它不见了。这篇博客文章澄清了一些我对WRT创建/备份/恢复数据卷容器仍感到困惑的信息:tricksofthetrades.net/2016/03/14/docker-data-volumes./

因此,底线是您需要让数据卷容器以某种格式(原始的或某种形式的复制)运行。(我仍然很难相信它没有以某种方式存储为一个文件,您可以重新运行,所以只要有人纠正我,我就会更新它!)

窗户,Mac,Linux,Azure和Anwhere可以承载Docker容器

如果你认为这只是在OS X上做的一些事情(因为这就是我要做的)..不不不!你知道现在Windows有Docker了吗?VS代码是跨平台的吗?这是在开发环境中快速启动和运行SQL Server的好方法。

2017 - 04 - 08 - _10 - 49 - 59. - jpg

正如我在推特上所说,将拖拽docker映像并旋转容器的体验与在windows上安装SQL Server的体验进行比较如下: