IRONSOFTWAREHOME

在Linux上使用Docker运行SQL Server

在Linux上使用Docker中的SQL Server

Tim Corey

18m 20s

直接在开发机器上安装数据库引擎是一种常见的快捷方式,可能会导致长期问题。 数据库服务器是为专用硬件设计的。 它们消耗大量内存和CPU,当您安装多个版本时,积累配置债务,并在需要针对不同版本测试时增加升级的难度。 Docker容器通过在轻量级、一次性环境中隔离每个数据库实例解决了所有这些问题。

在他的视频"SQL Server in Docker on Linux"中,Tim Corey演示了如何使用一个Docker命令在Linux上启动一个Microsoft SQL Server实例,从VS Code连接到它,并对其执行查询。 他还展示了如何并排运行多个SQL Server版本以及如何在完成后清理。 如果您在遵循C# on Linux系列或想要一种快速、可重复的方式来使SQL Server在开发中运行,此演练涵盖了完整的设置。

为什么选择Docker而不是本地安装

[0:00 - 0:57] Tim以反对本地数据库安装的论点作为开场。 核心论点:数据库引擎是为专用服务器设计的。 本地安装意味着它们无论您是否使用都会消耗资源,并且在同一盒子上管理多个版本(SQL 2019, 2022, 2025)很快就会成为维护负担。

Docker容器颠覆了这种模式。 每个数据库都在自己的隔离环境中运行。 当您需要时启动,不需要时停止。 删除它,并以零剩余配置重新开始。 对于开发和测试,这种方法比传统安装设置更快,维护更干净,且比传统安装方法更灵活。

修复Portainer重启策略

[0:57 - 2:17] 在启动SQL Server之前,Tim意识到Portainer(在前一集中用于Docker容器的GUI管理工具)并未运行。 因为没有设置重启策略,它在上次关机时退出了。

修复有两个命令:

// Set Portainer to restart automatically (unless manually stopped)
docker update --restart unless-stopped portainer

// Start it now
docker start portainer
C#

unless-stopped 策略意味着Portainer将在重启时自动重启,但如果您显式停止它,它将保持关闭。 启动后,Portainer可以在浏览器中通过 localhost:9000 访问。 Tim推荐这种策略用于您想一直运行的管理工具,同时保持数据库容器在手动启动。

SQL Server的Docker运行命令

[2:17 - 6:09] 整个SQL Server设置归结为一条命令。 Tim使用LocalSend(在之前的支线任务视频中介绍过)从他的Windows机器上转移,然后逐个分解:

// Single command to launch SQL Server 2025 in Docker
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=Test12345" -p 1433:1433 --name sql2025 mcr.microsoft.com/mssql/server:2025-latest
C#

每个标志都有特定的用途。 -e "ACCEPT_EULA=Y" 标志接受微软的许可协议。 -e "SA_PASSWORD=Test12345" 标志以明文设置系统管理员密码,Tim承认这对于本地开发是可以接受的,但绝不应该用于任何面向生产的用途。 -p 1433:1433 标志将容器的内部SQL Server端口映射到主机上的同一端口。--name sql2025 标志给容器一个人类可读的标签。 镜像标签 2025-latest 从微软的容器注册表中拉取最新的SQL Server 2025构建。

运行命令后,Docker下载镜像层,解压它们,并启动服务器。 整个过程需要几分钟,其中大部分时间是初始下载。

在Portainer中验证

[6:09 - 7:04] 回到Portainer,新SQL Server容器出现在容器列表中,显示其状态为正在运行。 Tim在这里做了一个故意的选择:没有为数据持久性挂载卷。 如果容器被删除,里面的数据库也会消失。

这对于开发设置是有意为之。重新开始意味着没有累积的测试数据,没有先前实验产生的架构漂移,也没有旧状态导致的"它在我的机器上工作"问题。 如果您需要在删除容器之前保留数据库,您可以先导出它们,但清除的方式是本地工作的首选流程。

从VS Code进行连接

[7:04 - 8:50] 为了管理数据库,Tim 从 Microsoft 为 VS Code 安装了 SQL Server 扩展。 安装后,侧边栏中会出现一个新的 SQL Server 面板,您可以在其中添加连接。

连接参数是最小的。 服务器名称是 . (点),意为localhost。由于容器映射了1433端口(SQL Server默认端口),无需指定端口号。 用户名是 sa,密码是来自Docker命令的密码,默认数据库是 master。 当提示时,请信任服务器证书。

一旦连接上,VS Code 会在连接旁显示 Docker 图标,确认检测到了容器化环境。 系统数据库(master, model, msdb, tempdb)出现在树中,准备好使用。

创建数据库和运行查询

[8:50 - 12:45] 连接建立后,Tim直接从VS Code侧边栏创建了一个名为 PeopleDB 的新数据库。 在其中,他使用可视化设计器创建了一个 People 表,添加了一个自动递增的 Id 列,一个 FirstName 列和一个 LastName 列(两者均为 NVARCHAR(50),不允许为空)。

然后他打开了一个新的查询窗口并插入了测试数据:

INSERT INTO dbo.People (FirstName, LastName)
VALUES
    ('Tim', 'Corey'),
    ('Sue', 'Storm'),
    ('Dave', 'Corey')
C#

运行 SELECT 确认行已就位:

SELECT * FROM dbo.People
-- Returns: Tim Corey, Sue Storm, Dave Corey

SELECT * FROM dbo.People WHERE LastName = 'Corey'
-- Returns: Tim Corey, Dave Corey
C#

整个周期(创建数据库、设计表、插入数据、带过滤器查询)仅需几分钟。 所有操作均在 Docker 容器中运行,通过 VS Code 管理,主机上不安装 SQL Server。

停止、启动和资源管理

[12:45 - 14:20] 当您完成 SQL Server 工作时,在 Portainer 中单击一次或在终端中输入一条命令即可停止它:

docker stop sql2025
C#

停止的容器会释放所有 CPU 和内存资源。 唯一继续占用的是用于镜像和容器文件的磁盘空间,通常比本地安装的 SQL Server 小。

Tim 指出这是比传统安装的核心优势。 本地安装的 SQL Server 作为 Windows 或 Linux 服务运行,始终消耗资源。 Docker 容器只有在启动时才使用资源。

同时运行多个版本

[14:20 - 17:17] Docker 在数据库开发中最实用的功能之一是能够同时运行多个版本。 Tim 通过在现有 2025 容器旁启动 SQL Server 2022 来演示:

// SQL Server 2022 on a different port
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=Test12345" -p 2022:1433 --name sql2022 mcr.microsoft.com/mssql/server:2022-latest
C#

关键区别在于端口映射:-p 2022:1433 将容器的内部端口1433映射到主机上的端口2022。这避免了与已使用1433的2025实例的端口冲突。下载完成后,两个容器都会出现在Portainer中,并且都同时运行。

当客户端在生产中运行 SQL Server 2022 而团队针对 2025 进行开发时,这很有用。切换版本无需重新安装,只需启动正确的容器。 所有可用的SQL Server镜像(2017、2019、2022、2025)都列在 mcr.microsoft.com,同样的方法可用于MySQL、PostgreSQL、MongoDB和Cosmos DB。

总结:一条命令即可完成完整的数据库环境

[17:17 - 17:47] 演练中展示了一条 Docker 命令替代了过去需要多步骤安装流程的配置向导、服务管理和版本冲突。 容器在几分钟内启动,只有在需要时运行,可以删除而不留下主机系统上的痕迹。

对于在多个项目中工作的开发人员来说,这种模式可以干净地扩展。 每个项目都有自己的容器、自己的版本和自己的独立数据。

结论

[17:47 - 18:20] 总结一下:SQL Server在Linux上的Docker中通过一个命令 docker run 运行。 通过 SQL Server 扩展在 VS Code 中与之连接,通过侧边栏创建数据库和表,并编写查询,就像对其他 SQL Server 实例一样。 完成后,停止容器并回收资源。

通过 Docker 进行数据库管理以及 VS Code 进行查询的组合为您提供完整的 Linux SQL 开发工作流程,无需进行本地数据库安装。

示例提示:如果您需要针对特定SQL Server版本进行测试,请检查 mcr.microsoft.com 以获取所有可用的标签。 通过为每个容器分配不同的主机端口(1433、2019、2022、2025),可以同时运行 2017、2019、2022 和 2025。 以描述性名称命名它们 (sql2019, sql2022),这样Portainer和 docker ps 的输出保持可读性。

在他的 YouTube 视频频道观看完整视频,获取在 Linux 上进行 C# 数据库开发的更多见解。

Earn More by Sharing What You Love

Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Let's Stay in Touch!

Join our newsletter, you’ll get exclusive access on article updates. We value your privacy

Key in blue circle

立即获取免费的 30 天试用版密钥

Your trial license will be sent to your email address

无任何限制。100% 解锁。无需信用卡。

bullet_checked无需信用卡或创建账户无任何限制。100% 解锁。无需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
获取您的无义务咨询
填写下面的表格或通过sales@ironsoftware.com
您的资料将始终保密。
深受全球数百万工程师信赖
Iron Software 的客户徽标
立即获取您的免费30 天试用密钥
无需信用卡或创建账户