加入收藏 | 设为首页 | 会员中心 | 我要投稿 鹰潭站长网 (https://www.0701zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

部署并连接到 SQL Server Docker 容器

发布时间:2022-10-28 15:31:07 所属栏目:MsSql教程 来源:网络
导读: 本文内容
适用于:

SQL Server(所有受支持的版本)- Linux
本文介绍如何部署和连接到 SQL Server Docker 容器。
有关其他部署方案,请参阅:
注意
本文专门重点介绍 mssql-server-linux

本文内容

适用于:

SQL Server(所有受支持的版本)- Linux

本文介绍如何部署和连接到 SQL Server Docker 容器。

有关其他部署方案,请参阅:

注意

本文专门重点介绍 mssql-server-linux 映像的使用。 Windows 容器中的 SQL Server 部署不在支持范围内。 对于开发和测试mssql 内部连接,你可以创建自己的自定义容器映像,以便在 Windows 容器中与 SQL Server 配合使用。 可在 GitHub 上找到示例文件。 示例文件仅供参考。

重要

在选择运行 SQL Server 容器以用于生产用例之前,请查看 SQL Server 容器的支持策略,以确保在支持的配置上运行。

本视频时长 6 分钟,介绍了如何在容器上运行 SQL Server:

拉取并运行容器映像

若要拉取并运行 SQL Server 2017 (14.x) 和 SQL Server 2019 (15.x) 的 Docker 容器映像,请按照以下快速入门中的先决条件和步骤执行操作:

本配置文章在以下部分中提供其他使用方案。

连接和查询

可从容器外部或内部对容器中的 SQL Server 进行连接和查询。 以下部分介绍这两种方案。

容器外的工具

可从支持 SQL 连接的任何 Linux、Windows 或 macOS 外部工具连接到 Docker 计算机上的 SQL Server 实例。 一些常用工具包括:

以下示例使用 sqlcmd 连接到在 Docker 容器中运行的 SQL Server。 连接字符串中的 IP 地址为运行容器的主机的 IP 地址。

sqlcmd -S 10.3.2.4 -U SA -P ''

sqlcmd -S 10.3.2.4 -U SA -P ""

sqlcmd -S 10.3.2.4 -U SA -P ""

如果映射的主机端口不是默认的 1433,请将该端口添加到连接字符串中。 例如,如果在 docker run 命令中指定了 -p 1400:1433,则请通过显式指定端口 1400 来进行连接。

sqlcmd -S 10.3.2.4,1400 -U SA -P ''

sqlcmd -S 10.3.2.4,1400 -U SA -P ""

sqlcmd -S 10.3.2.4,1400 -U SA -P ""

容器内的工具

从 SQL Server 2017 (14.x) 开始,容器映像中加入了 SQL Server 命令行工具。 如果使用交互式命令提示符附加至此映像,则可在本地运行工具。

使用 docker exec -it 命令在运行的容器内部启动交互式 Bash Shell。 在以下示例中,e69e056c702d 是容器 ID。

docker exec -it e69e056c702d "bash"

提示

并非始终需要指定完整的容器 ID。 只需指定能够唯一标识它的足够字符即可。 因此,在本示例中,使用 e6 或 e69 足矣,无需使用完整 ID。 若要查找容器 ID,请运行命令 docker ps -a。

在容器内部使用完整路径通过 sqlcmd 进行本地连接。

/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P ''

使用 sqlcmd 完成操作后,键入 exit。

使用交互式命令提示符完成操作后,键入 exit。 退出交互式 Bash Shell 后,容器将继续运行。

检查容器版本

如果想要了解正在运行的 Docker 容器中的 SQL Server 的版本,请运行以下命令以显示它。 将 替换为目标容器 ID 或名称。 将 替换为系统管理员 (SA) 帐户的 SQL Server 密码。

sudo docker exec -it  /opt/mssql-tools/bin/sqlcmd \
-S localhost -U SA -P '' \
-Q 'SELECT @@VERSION'

docker exec -it  /opt/mssql-tools/bin/sqlcmd `
-S localhost -U SA -P "" `
-Q "SELECT @@VERSION"

docker exec -it  /opt/mssql-tools/bin/sqlcmd ^
-S localhost -U SA -P "" ^
-Q "SELECT @@VERSION"

还可以标识目标 Docker 容器映像的 SQL Server 版本和生成号。 以下命令显示 mcr.microsoft.com/mssql/server:2019-latest 映像的 SQL Server 版本和生成信息。 它通过运行具有环境变量 PAL_PROGRAM_INFO=1 的新容器来实现此目的。 生成的容器会立即退出,且 docker rm 命令会将其删除。

sudo docker run -e PAL_PROGRAM_INFO=1 --name sqlver \
-ti mcr.microsoft.com/mssql/server:2019-latest && \
sudo docker rm sqlver

docker run -e PAL_PROGRAM_INFO=1 --name sqlver `
-ti mcr.microsoft.com/mssql/server:2019-latest; `
docker rm sqlver

docker run -e PAL_PROGRAM_INFO=1 --name sqlver ^
-ti mcr.microsoft.com/mssql/server:2019-latest && ^
docker rm sqlver

上一个命令显示类似以下输出的版本信息:

sqlservr
  Version 15.0.4198.2
  Build ID 52e9e8d493d41fd93627371c4c7d3e2a6b52a65f47f07c8c737931a208c45824
  Build Type release
  Git Version d6f11919
  Built at Sat Jan 22 05:09:51 GMT 2022
PAL
  Build ID 2d0b057b139c49b6933e896f56af464a2893fd9aa3da2e2a709d5fc220cb0225
  Build Type release
  Git Version 52a534725
  Built at Sat Jan 22 05:07:25 GMT 2022
Packages
  system.security                         6.2.9200.11,52a534725+hls-win4-20220122044858,
  system.certificates                     6.2.9200.11,52a534725+hls-win4-20220122044858,
  secforwarderxplat                       15.0.4198.2
  sqlservr                                15.0.4198.2
  system.common                           10.0.17134.2145.202104262
  system.netfx                            4.7.0.0.202104262
  system                                  6.2.9200.11,52a534725+hls-win4-20220122044858,
  sqlagent                                15.0.4198.2

运行特定 SQL Server 容器映像

注意

在某些情况下,可能不希望使用最新的 SQL Server 容器映像。 若要运行特定 SQL Server 容器映像,请使用以下步骤:

确定想要使用的版本的 Docker 标记。 若要查看可用标记,请参阅 mssql-server-linux Docker Hub 页。

使用标记拉取 SQL Server 容器映像。 例如,若要拉取 2019-CU15-ubuntu-20.04 映像,请将以下命令中的 替换为 2019-CU15-ubuntu-20.04。

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

若要使用该映像运行新容器,请在 docker run 命令中指定标记名称。 在以下命令中,将 替换为想要运行的版本。

重要

SA_PASSWORD 环境变量已弃用。 请改用 MSSQL_SA_PASSWORD。

docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=' -p 1401:1433 -d mcr.microsoft.com/mssql/server:

docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=" -p 1401:1433 -d mcr.microsoft.com/mssql/server:

docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=" -p 1401:1433 -d mcr.microsoft.com/mssql/server:

这些步骤也可用于降级现有容器。 例如,你可能会希望回滚或降级正在运行的容器以进行故障排除或测试。 若要降级正在运行的容器,必须对数据文件夹使用持久性技术。 按照所述的相同步骤进行操作,但在运行新容器时指定早期版本的标记名称。

运行基于 RHEL 的容器映像

SQL Server Linux 容器映像的文档指向基于 Ubuntu 的容器。 从 SQL Server 2019 (15.x) 开始,可使用基于 Red Hat Enterprise Linux (RHEL) 的容器。 RHEL 映像的示例类似于 mcr.microsoft.com/mssql/rhel/server:2019-CU15-rhel-8。

例如,以下命令拉取使用 RHEL 8 的 SQL Server 2019 (15.x) 容器的累积更新 15:

sudo docker pull mcr.microsoft.com/mssql/rhel/server:2019-CU15-rhel-8.4

docker pull mcr.microsoft.com/mssql/rhel/server:2019-CU15-rhel-8.4

docker pull mcr.microsoft.com/mssql/rhel/server:2019-CU15-rhel-8.4

运行生产容器映像

上一部分中的快速入门从 Docker Hub 运行免费的 SQL Server Developer Edition。 如果想要运行生产容器映像(例如 Enterprise、Standard 或 Web Edition),大部分信息仍然适用。 但是,存在一些差异,此处将其列出。

查看快速入门中的要求并运行过程。 必须使用 MSSQL_PID 环境变量指定生产版本。 以下示例介绍如何运行 Enterprise Edition 的最新 SQL Server 2019 (15.x) 容器映像:

docker run --name sqlenterprise \
-e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=' \
-e 'MSSQL_PID=Enterprise' -p 1433:1433 \
-d mcr.microsoft.com/mssql/server:2019-latest

docker run --name sqlenterprise `
-e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=" `
-e "MSSQL_PID=Enterprise" -p 1433:1433 `
-d "mcr.microsoft.com/mssql/server:2019-latest"

docker run --name sqlenterprise `
-e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=" ^
-e "MSSQL_PID=Enterprise" -p 1433:1433 ^
-d "mcr.microsoft.com/mssql/server:2019-latest"

重要

通过将值 Y 传递给环境变量 ACCEPT_EULA 并将版本值传递给 MSSQL_PID,你表明自己拥有打算使用的 SQL Server 版本的现行有效有许可证。 你还同意自己对在 Docker 容器映像中运行的 SQL Server 软件的使用将受 SQL Server 许可条款的约束。

备注

有关 MSSQL_PID 的可能值的完整列表,请参阅在 Linux 上使用环境变量配置 SQL Server 设置。

运行多个 SQL Server 容器

Docker 支持在同一主机上运行多个 SQL Server 容器。 对要求在同一主机上运行多个 SQL Server 实例的方案使用此解决办法。 每个容器必须在不同的端口上公开自己。

以下示例创建两个 SQL Server 2017 (14.x) 容器,并将它们映射到主机的 1401 和 1402 端口。

docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=' -p 1401:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=' -p 1402:1433 -d mcr.microsoft.com/mssql/server:2017-latest

docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2017-latest

docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2017-latest

以下示例创建两个 SQL Server 2019 (15.x) 容器,并将它们映射到主机的 1401 和 1402 端口。

docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=' -p 1401:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=' -p 1402:1433 -d mcr.microsoft.com/mssql/server:2019-latest

docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2019-latest

docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2019-latest

现在,两个 SQL Server 实例在单独的容器内运行。 客户端可通过使用 Docker 主机的 IP 地址和容器的端口号连接到每个 SQL Server 实例。

sqlcmd -S 10.3.2.4,1401 -U SA -P ''
sqlcmd -S 10.3.2.4,1402 -U SA -P ''

sqlcmd -S 10.3.2.4,1401 -U SA -P ""
sqlcmd -S 10.3.2.4,1402 -U SA -P ""

sqlcmd -S 10.3.2.4,1401 -U SA -P ""
sqlcmd -S 10.3.2.4,1402 -U SA -P ""

升级容器中的 SQL Server

若要使用 Docker 升级容器映像,请先确定升级版本的标记。 使用 docker pull 命令从注册表中拉取此版本:

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

此操作会更新创建的任何新容器的 SQL Server 映像,但不会更新任何正在运行的容器中的 SQL Server。 为此,必须使用最新的 SQL Server 容器映像创建新容器,并将数据迁移到该新容器。

确保为现有 SQL Server 容器使用一种。 这样便可以启动具有相同数据的新容器。

使用 docker stop 命令停止 SQL Server 容器。

使用 docker run 创建新的 SQL Server 容器,并指定映射主机目录或数据卷容器。 确保使用特定标记进行 SQL Server 升级。 新容器现在使用新版 SQL Server 和现有 SQL Server 数据。

重要

目前仅支持在 RC1、RC2 和 GA 之间升级。

在新容器中验证数据库和数据。

使用 docker rm 删除旧容器(可选)。

后续步骤

(编辑:鹰潭站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!