使用 Docker 运行 SQL Server 容器映像 在Windows操作系统上,重设置密码和操作数库

快速入门:使用 Docker 运行 SQL Server 容器映像
2020/09/07
V
O
G

M
Choose your command shell
适用于: 是SQL Server(所有支持的版本) - Linux
备注

下面显示的示例使用 docker.exe,但其中的大多数命令也使用 Podman。 它提供与 Docker 容器引擎类似的 CLI。 可以在此处详细了解 Podman。
备注

自 SQL Server 2019 CU3 起,支持 Ubuntu 18.04。
在本快速入门中,请使用 Docker 拉取和运行 SQL Server 2019 容器映像 mssql-server。 然后使用 sqlcmd 连接,以创建第一个数据库并运行查询。
提示

本快速入门将创建 SQL Server 2019 容器。 如果希望创建 SQL Server 2017 容器,请参阅本文的 SQL Server 2017 版本。
此映像包含在基于 Ubuntu 18.04 的 Linux 上运行的 SQL Server。 它可与 Linux 上或用于 Mac/Windows 的 Docker 上的 Docker 引擎 1.8+ 配合使用。 本快速入门专门介绍 Linux 上 SQL Server 映像的使用。 虽然未介绍 Windows 映像,但可在 mssql-server-windows-developer Docker 中心页上找到关于它的详细信息。
先决条件
任何受支持的 Linux 分发或用于 Mac/Windows 的 Docker 上的 Docker 引擎 1.8+。 有关详细信息,请参阅 Install Docker(安装 Docker)。
Docker overlay2 存储驱动程序。 这是大多数用户的默认设置。 如果发现自己未使用此存储提供程序并且需要进行更改,请参阅 docker 文档中有关配置 overlay2 的说明和警告。
至少 2 GB 的磁盘空间。
至少 2 GB 的 RAM。
Linux 上的 SQL Server 的系统要求。
拉取并运行 2019 容器映像
在开始执行以下步骤之前,请确保已在本文顶部选择了首选的 shell(bash、PowerShell 或 cmd)。
从 Microsoft 容器注册表中拉取 SQL Server 2019 Linux 容器映像。
Bash

复制
sudo docker pull mcr.microsoft.com/mssql/server:2019-latest
提示

本快速入门使用 SQL Server 2019 Docker 映像。 若要运行 SQL Server 2017 映像,请参阅本文的 SQL Server 2017 版本。
前一命令拉取基于 Ubuntu 的 SQL Server 2019 容器映像。 若要改为使用基于 RedHat 的容器映像,请参阅运行基于 RHEL 的容器映像。 要查看所有可用映像,请参阅 mssql-server-linux Docker 中心页。
对于本文中的 bash 命令,将使用 sudo。 在 MacOS 上,可能不需要 sudo。 在 Linux 上,如果不想使用 sudo 来运行 Docker,可以配置一个 docker 组,并将用户添加到该组。 有关详细信息,请参阅 Post-installation steps for Linux(适用于 Linux 的安装后步骤)。
要使用 Docker 运行容器映像,可以从 Bash Shell (Linux/macOS) 或提升的 PowerShell 命令提示符使用以下命令。
Bash

复制
sudo docker run -e “ACCEPT_EULA=Y” -e “SA_PASSWORD=YourStrong@Passw0rd
-p 1433:1433 --name sql1 -h sql1
-d mcr.microsoft.com/mssql/server:2019-latest
备注

密码应符合 SQL Server 默认密码策略,否则容器无法设置 SQL Server,将停止工作。 默认情况下,密码的长度必须至少为 8 个字符,并且必须包含以下四种字符中的三种:大写字母、小写字母、十进制数字和符号。 你可以通过执行 docker logs 命令检查错误日志。
默认情况下,这会创建一个使用 SQL Server 2019 开发人员版的容器。
下表对前一个 docker run 示例中的参数进行了说明:
表 2
参数 说明
-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 为容器指定一个自定义名称,而不是使用随机生成的名称。 如果运行多个容器,则无法重复使用相同的名称。
-h sql1 用于显式设置容器主机名,如果不指定它,则默认为容器 ID,该 ID 是随机生成的系统 GUID。
mcr.microsoft.com/mssql/server:2019-latest SQL Server 2019 Ubuntu Linux 容器映像。
要查看 Docker 容器,请使用 docker ps 命令。
Bash

复制
sudo docker ps -a
应会看到与以下屏幕截图类似的输出:
Docker ps 命令输出

如果“状态”列显示“正常运行”,则 SQL Server 将在容器中运行,并侦听“端口”列中指定的端口 。 如果 SQL Server 容器的“状态”列显示“已退出”,请参阅 SQL Server Docker 容器故障排除 。
如上所述的 -h(主机名)参数将容器的内部名称更改为自定义值。 这会将容器的内部名称更改为一个自定义值。 也就是以下 Transact-SQL 查询中返回的名称:
SQL

复制
SELECT @@SERVERNAME,
SERVERPROPERTY(‘ComputerNamePhysicalNetBIOS’),
SERVERPROPERTY(‘MachineName’),
SERVERPROPERTY(‘ServerName’)
将 -h 和 --name 设为相同的值是一种很好的方法,可以轻松地识别目标容器。
最后一步,更改 SA 密码,因为 SA_PASSWORD 在 ps -eax 输出中可见,并存储在同名的环境变量中。 请参阅以下步骤。
更改 SA 密码
SA 帐户是安装过程中在 SQL Server 实例上创建的系统管理员。 创建 SQL Server 容器后,通过在容器中运行 echo $SA_PASSWORD,可发现指定的 SA_PASSWORD 环境变量。 出于安全考虑,请考虑更改 SA 密码。
选择 SA 用户要使用的强密码。
使用 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。
使用 docker exec -it 命令在运行的容器内部启动交互式 Bash Shell。 在下面的示例中,sql1 是在创建容器时由 --name 参数指定的名称。
Bash

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

复制
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P “YourNewStrong@Passw0rd
提示

可以省略命令行上提示要输入的密码。
如果成功,应会显示 sqlcmd 命令提示符:1>。
创建和查询数据
以下部分将引导你使用 sqlcmd 和 Transact-SQL 完成新建数据库、添加数据并运行查询的整个过程。
新建数据库
以下步骤创建一个名为 TestDB 的新数据库。
在 sqlcmd 命令提示符中,粘贴以下 Transact-SQL 命令以创建测试数据库:
SQL

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

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

复制
GO
插入数据
接下来创建一个新表 Inventory,然后插入两个新行。
在 sqlcmd 命令提示符中,将上下文切换到新的 TestDB 数据库:
SQL

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

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

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

复制
GO
选择数据
现在,运行查询以从 Inventory 表返回数据。
通过 sqlcmd 命令提示符输入查询,以返回 Inventory 表中数量大于 152 的行:
SQL

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

复制
GO
退出 sqlcmd 命令提示符
要结束 sqlcmd 会话,请键入 QUIT:
SQL

复制
QUIT
要在容器中退出交互式命令提示,请键入 exit。 退出交互式 Bash Shell 后,容器将继续运行。
从容器外连接
还可以从支持 SQL 连接的任何 Linux、Windows 或 macOS 外部工具连接到 Docker 计算机上的 SQL Server 实例。
以下步骤在容器外使用 sqlcmd 连接在容器中运行的 SQL Server。 这些步骤假定你已在容器外安装了 SQL Server 命令行工具。 使用其他工具时,同样的原则依然适用,但连接过程因工具而异。
查找承载容器的计算机的 IP 地址。 在 Linux 上,使用 ifconfig 或 ip addr。在 Windows 上,使用 ipconfig。
对于本示例,请在客户端计算机上安装 sqlcmd 工具。 有关详细信息,请参阅在 Windows 上安装 sqlcmd 或在 Linux 上安装 sqlcmd。
运行 sqlcmd,指定 IP 地址和映射容器中的端口 1433 的端口。 本例中为主机上的相同端口 1433。 如果在主机上指定了不同的映射端口,则在此处使用它。 还需要在防火墙上打开相应的入站端口以允许连接。
Bash

复制
sqlcmd -S <ip_address>,1433 -U SA -P “YourNewStrong@Passw0rd
运行 Transact-SQL 命令。 完成后,键入 QUIT。
连接到 SQL Server 的其他常见工具包括:
Visual Studio Code
适用于 Windows 的 SQL Server Management Studio (SSMS)
Azure Data Studio
mssql-cli(预览版)
PowerShell Core
删除容器
如果想删除本教程中使用的 SQL Server 容器,请运行以下命令:
Bash

复制
sudo docker stop sql1
sudo docker rm sql1
警告

停止并永久删除容器会删除容器中的所有 SQL Server 数据。 如果你需要保留数据,请在容器外创建并复制备份文件或使用容器数据暂留技术。
Docker 演示
尝试对 Docker 使用 SQL Server 容器映像后,你可能想知道如何 Docker 是如何用于改进开发和测试的。 下面的视频介绍如何在持续集成和部署方案中使用 Docker。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值