开始使用 Docker (Linux 上运行 SQL Server) 上的 SQL Server 容器 - SQL Server | Microsoft Docs

时间:2022-10-02 12:23:42

原文:开始使用 Docker (Linux 上运行 SQL Server) 上的 SQL Server 容器 - SQL Server | Microsoft Docs

快速入门:使用 Docker 运行 SQL Server 容器映像Quickstart: Run SQL Server container images with Docker

  • 2019/01/10
  • 作者

Choose your command shell

BashPowerShell

适用于: 开始使用 Docker (Linux 上运行 SQL Server) 上的 SQL Server 容器 - SQL Server | Microsoft DocsSQL Server (仅限 Linux)开始使用 Docker (Linux 上运行 SQL Server) 上的 SQL Server 容器 - SQL Server | Microsoft DocsAzure SQL 数据库开始使用 Docker (Linux 上运行 SQL Server) 上的 SQL Server 容器 - SQL Server | Microsoft DocsAzure SQL 数据仓库开始使用 Docker (Linux 上运行 SQL Server) 上的 SQL Server 容器 - SQL Server | Microsoft Docs并行数据仓库

在本快速入门教程中,你使用 Docker 请求和运行 SQL Server 2017 容器映像 mssql server linux。 然后使用 sqlcmd 进行连接,以便创建第一个数据库并运行查询。

提示

如果你想要试用 SQL Server 2019 预览图像,请参阅这篇文章的 SQL Server 2019 预览版本

此映像包含在 Linux(基于 Ubuntu 16.04)上运行的 SQL Server。 它可与适用于 Linux 的 Docker 引擎 1.8 以上版本或适用于 Mac/Windows 的 Docker 配合使用。 本快速入门专门重点介绍使用 SQL Server 上linux映像。 虽然未介绍 Windows 映像,但可在mssql-server-windows-developer Docker 中心页上找到关于它的详细信息。

先决条件

  • 适用于支持的任一 Linux 分发版的 Docker 引擎 1.8 以上版本,或适用于 Mac/Windows 的 Docker。 有关详细信息,请参阅Install Docker(安装 Docker)。
  • Docker overlay2存储驱动程序。 这是大多数用户的默认值。 如果发现未使用此存储提供程序,需要进行更改,请参阅说明和中的警告docker 文档配置 overlay2
  • 2 gb 的磁盘空间最小值。
  • 2 GB 的 RAM 的最小值。
  • Linux 上的 SQL Server 的系统要求

请求和运行容器映像

  1. 从 Microsoft 容器注册表拉取 SQL Server 2017 Linux 容器映像。

    bash复制
    sudo docker pull mcr.microsoft.com/mssql/server:2017-latest

    提示

    如果你想要试用 SQL Server 2019 预览图像,请参阅这篇文章的 SQL Server 2019 预览版本

    前一个命令请求最新的 SQL Server 2017 容器映像。 如果想请求某个特定映像,需添加一个冒号和标记名称(例如 mcr.microsoft.com/mssql/server:2017-GA-ubuntu。 若要查看所有可用映像,请参阅mssql server Docker 中心页

    在本文中,bash 命令sudo使用。 在 MacOS 上,sudo可能不需要。 在 Linux 上,如果不想要使用sudo若要运行 Docker,可以配置docker组,并将用户添加到该组。 有关详细信息,请参阅安装后步骤适用于 Linux

  2. 要使用 Docker 运行容器映像,可以从 Bash Shell (Linux/macOS) 或提升的 PowerShell 命令提示符使用以下命令。

    bash复制
    sudo docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=<YourStrong!Passw0rd>' \
    -p 1433:1433 --name sql1 \
    -d mcr.microsoft.com/mssql/server:2017-latest

    备注

    密码应符合 SQL Server 默认密码策略,否则容器无法设置 SQL Server,将停止工作。 默认情况下,密码必须至少为 8 个字符长,且包含三个以下四种字符集的字符:大写字母、 小写字母、 十进制数字和符号。 你可以通过执行 docker logs 命令检查错误日志。

    备注

    默认情况下,这会创建一个使用 SQL Server 2017 开发人员版的容器。 在容器中运行生产版本的过程略有不同。 有关详细信息,请参阅运行生产容器映像

    下表对前一个 docker run 示例中的参数进行了说明:

    参数 Description
    -e 'ACCEPT_EULA=Y' 将 ACCEPT_EULA 变量设置为任意值,以确认接受最终用户许可协议。 SQL Server 映像的必需设置。
    -e 'SA_PASSWORD=<YourStrong!Passw0rd>' 指定至少包含 8 个字符且符合 SQL Server 密码要求的强密码。 SQL Server 映像的必需设置。
    -p 1433:1433 建立主机环境(第一个值)上的 TCP 端口与容器(第二个值)中 TCP 端口的映射。 在此示例中,SQL Server 侦听容器中的 TCP 1433 并公开的端口 1433,在主机上。
    --name sql1 为容器指定一个自定义名称,而不是使用随机生成的名称。 如果运行多个容器,则无法重复使用相同的名称。
    mcr.microsoft.com/mssql/server:2017-latest SQL Server 2017 Linux 容器映像。
  3. 要查看 Docker 容器,请使用 docker ps 命令。

    bash复制
    sudo docker ps -a

    将看到与如下屏幕截图相似的输出:

    开始使用 Docker (Linux 上运行 SQL Server) 上的 SQL Server 容器 - SQL Server | Microsoft Docs

  4. 如果“状态”列显示“正常运行”,则 SQL Server 将在容器中运行,并侦听“端口”列中指定的端口。 如果 SQL Server 容器的“状态”列显示“已退出”,则参阅配置指南的疑难解答部分

-h(主机名)参数也非常有用,但为了简单起见,本教程中不使用它。 这会将容器的内部名称更改为一个自定义值。 也就是以下 Transact-SQL 查询中返回的名称:

SQL复制
SELECT @@SERVERNAME,
SERVERPROPERTY('ComputerNamePhysicalNetBIOS'),
SERVERPROPERTY('MachineName'),
SERVERPROPERTY('ServerName')

将 -h 和 --name 设为相同的值是一种很好的方法,可以轻松地识别目标容器。

更改 SA 密码

SA 帐户是安装过程中在 SQL Server 实例上创建的系统管理员。 创建 SQL Server 容器后,通过在容器中运行 echo $MSSQL_SA_PASSWORD,可发现指定的 MSSQL_SA_PASSWORD 环境变量。 出于安全考虑,请考虑更改 SA 密码。

  1. 选择 SA 用户要使用的强密码。

  2. 使用 docker exec 运行sqlcmd,以使用 Transact-SQL 更改密码。 将 <YourStrong!Passw0rd> 和 <YourNewStrong!Passw0rd> 替换为自己的密码值。

    bash复制
    sudo docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd \
    -S localhost -U SA -P '<YourStrong!Passw0rd>' \
    -Q 'ALTER LOGIN SA WITH PASSWORD="<YourNewStrong!Passw0rd>"'

连接到 SQL Server

下列步骤在容器内部使用 SQL Server 命令行工具 sqlcmd 来连接 SQL Server。

  1. 使用 docker exec -it 命令在运行的容器内部启动交互式 Bash Shell。 在下面的示例中,sql1 是在创建容器时由 --name 参数指定的名称。

    bash复制
    sudo docker exec -it sql1 "bash"
  2. 一旦位于容器内部,使用 sqlcmd 进行本地连接。 默认情况下,sqlcmd 不在路径之中,因此需要指定完整路径。

    bash复制
    /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P '<YourNewStrong!Passw0rd>'

    提示

    可以省略命令行上提示要输入的密码。

  3. 如果成功,应会显示 sqlcmd 命令提示符:1>

创建和查询数据

以下部分将引导你使用 sqlcmd 和 Transact-SQL 完成新建数据库、添加数据并运行简单查询的整个过程。

新建数据库

以下步骤创建一个名为 TestDB 的新数据库。

  1. 在 sqlcmd 命令提示符中,粘贴以下 Transact-SQL 命令以创建测试数据库:

    SQL复制
    CREATE DATABASE TestDB
  2. 在下一行中,编写一个查询以返回服务器上所有数据库的名称:

    SQL复制
    SELECT Name from sys.Databases
  3. 前两个命令没有立即执行。 必须在新行中键入 GO 才能执行以前的命令:

    SQL复制
    GO

插入数据

接下来创建一个新表 Inventory,然后插入两个新行。

  1. 在 sqlcmd 命令提示符中,将上下文切换到新的 TestDB 数据库:

    SQL复制
    USE TestDB
  2. 创建名为 Inventory 的新表:

    SQL复制
    CREATE TABLE Inventory (id INT, name NVARCHAR(50), quantity INT)
  3. 将数据插入新表:

    SQL复制
    INSERT INTO Inventory VALUES (1, 'banana', 150); INSERT INTO Inventory VALUES (2, 'orange', 154);
  4. 要执行上述命令的类型 GO

    SQL复制
    GO

选择数据

现在,运行查询以从 Inventory 表返回数据。

  1. 通过 sqlcmd 命令提示符输入查询,以返回 Inventory 表中数量大于 152 的行:

    SQL复制
    SELECT * FROM Inventory WHERE quantity > 152;
  2. 执行命令:

    SQL复制
    GO

退出 sqlcmd 命令提示符

  1. 要结束 sqlcmd 会话,请键入 QUIT

    SQL复制
    QUIT
  2. 要在容器中退出交互式命令提示,请键入 exit。 退出交互式 Bash Shell 后,容器将继续运行。

从容器外连接

还可以从支持 SQL 连接的任何 Linux、Windows 或 macOS 外部工具连接到 Docker 计算机上的 SQL Server 实例。

以下步骤在容器外使用 sqlcmd 连接在容器中运行的 SQL Server。 这些步骤假定你已在容器外安装了 SQL Server 命令行工具。 该原理同样适用时使用其他工具,但连接的过程是唯一的每个工具。

  1. 查找承载容器的计算机的 IP 地址。 在 Linux 上,使用 ifconfig 或 ip addr。在 Windows 上,使用 ipconfig。

  2. 运行 sqlcmd,指定 IP 地址和映射容器中的端口 1433 的端口。 在此示例中,这是同一个端口,1433,在主机上。 如果主机计算机上指定其他映射的端口,你将在此处使用它。

    bash复制
    sqlcmd -S 10.3.2.4,1433 -U SA -P '<YourNewStrong!Passw0rd>'
  3. 运行 Transact-SQL 命令。 完成后,键入 QUIT

连接到 SQL Server 的其他常见工具包括:

删除容器

如果想删除本教程中使用的 SQL Server 容器,请运行以下命令:

bash复制
sudo docker stop sql1
sudo docker rm sql1

警告

停止并永久删除容器会删除容器中的所有 SQL Server 数据。 如果你需要保留数据,请在容器外创建并复制备份文件或使用容器数据暂留技术

Docker 演示

尝试对 Docker 使用 SQL Server 容器映像后,你可能想知道如何 Docker 是如何用于改进开发和测试的。 下面的视频介绍如何在持续集成和部署方案中使用 Docker。

后续步骤

有关如何将数据库备份文件还原到容器中的教程,请参阅在 Linux Docker 容器中还原 SQL Server 数据库。 若要浏览其他方案,例如运行多个容器数据暂留和故障排除,请参阅Docker 上的配置 SQL Server 容器映像

并且,请查看 mssql-docker GitHub 存储库,了解资源、反馈和已知问题。

开始使用 Docker (Linux 上运行 SQL Server) 上的 SQL Server 容器 - SQL Server | Microsoft Docs的更多相关文章

  1. 如何在Android studio上运行从github上下载的RN项目

    想要编译别人的RN项目,还是要踩踩坑才能走上正轨啊,分享下我试过多种方法后最喜欢的方法(其实是因为我多次用VS Code编译都是以失败而告终,所以才选择的studio) 注意:这一步是你的开发环境都安 ...

  2. 将 java 项目打包成可运行的 jar 包(main 函数带参数),并上传到 linux 服务器上运行

    一.概述 java项目有两种架构,一种是 B/S 架构的,一种是 C/S 架构的. 对于 B/S 架构来说,我们常见的 java ee 即是 B/S 架构,通常,开发人员会在本地进行开发,然后将项目打 ...

  3. ios8&period;1上运行程序,程序界面只显示一部分

    在ios 9.1上运行程序没问题 但是在8.1上运行发现模拟器上只显示了程序的一小部分界面,没有显示完全. 结果发现由以下代码设置问题引起的 - (BOOL)application:(UIApplic ...

  4. SpringBoot 项目运行在 tomcat7 上

    SpringBoot 项目如何打成 war 包 SpringBoot项目的默认打包方式是将工程打包成为一个 jar 包.部分情况下,我们需要将项目打包成一个 war 包,以方便我们将工程部署在 tom ...

  5. web项目访问路径上为什么不能写上WebContent

    我们常常在WEB项目中要写很多的访问路径,比如说/good/target.jsp;目录结构中从来不会带有项目目录结构的WebContent?这到底的为什么呢? 我们知道WEB项目是放在容器上运行的,而 ...

  6. Docker在Linux上运行NetCore系列(三)在Linux上使用Docker运行Asp&period;NetCore

    转发请注明此文章作者与路径,请尊重原著,违者必究. 系列文章:https://www.cnblogs.com/alunchen/p/10121379.html 开始说明 上几篇文章都是通过Linux运 ...

  7. Docker在Linux&sol;Windows上运行NetCore文章系列

    Windows系列 因为Window很简单,VS提供界面化配置,所以只写了一篇文章 Docker在Windows上运行NetCore系列(一)使用命令控制台运行.NetCore控制台应用 Linux( ...

  8. Docker在Linux上运行NetCore系列(五)更新应用程序

    转发请注明此文章作者与路径,请尊重原著,违者必究. 本篇文章与其它系列文章不同,为了方便测试,新建了一个ASP.Net Core视图应用. 备注:下面说的应用,只是在容器中运行的应用程序. 查看现在运 ...

  9. Docker在Linux上运行NetCore系列(四)使用私有Nuget与多个本地包引用运行ASPNetCore

    转发请注明此文章作者与路径,请尊重原著,违者必究. 本篇文章演示了使用Dockerfile在Linux(ubuntu16.04)系统上构建ASPNetCore应用,并且在一个解决方案中存在多个项目之间 ...

随机推荐

  1. 线程中调用python win32com

    在python的线程中,调用win32com.client.Dispatch 调用windows下基于COM组件的应用接口, 需要在调用win32com.client.Dispatch前,调用pyth ...

  2. C&plus;&plus; map 映照容器

    map映照容器的元素数据是一个键值和一个映照数据组成的,键值与映照数据之间具有一一映照的关系. map映照容器的数据结构是采用红黑树来实现的,插入键值的元素不允许重复,比较函数只对元素的键值进行比较, ...

  3. netlink&plus;netfilter

    http://blog.chinaunix.net/uid-21768364-id-3618377.html

  4. LocalContainerEntityManagerFactoryBean

    http://doc.okbase.net/liuyitian/archive/109276.html

  5. C&num;委托与事件之观察者Observer设计模式

    前言    委托: 委托是一种在对象里保存方法引用的类型,同时也是一种类型安全的函数指针. 或委托可以看成一种表示函数的数据类型,类似函数指针. 事件是特殊的委托 观察者模式:两种角色:(1)Subj ...

  6. Some good iOS questions

    这里,我列举了一些在*中一些比较好的关于iOS的问题.大部分我列举的问题都是关于Objective C.所有问题中,我比较喜欢“为什么”这一类型的问题. 问题 1. What’ ...

  7. 4&period;Swift教程翻译系列——Swift基本运算符

    英文版PDF下载地址http://download.csdn.net/detail/tsingheng/7480427 运算符是指一个特殊的符号,能够用来查看.更改值或者相加.比方说加法运算符+能够讲 ...

  8. 非阻塞模式(ioctlsocket)

    //Server.cpp #include <stdio.h> #include <winsock2.h> //winsock.h (2种套接字版本) #pragma comm ...

  9. mac安装linux双系统的吐槽

    [First day] 尝试安装mac - linux 双系统 首先,尝试的是ubuntu16.06版本,要把双系统安装至电脑硬盘512G SSD中, *** 分盘 1.1 打开实用工具中的磁盘管理工 ...

  10. Jenkins可用环境变量以及使用方法

    Jenkins可用环境变量以及使用方法