示例工程数据库教程后端【免费下载链接】sql-server-samplesAzure Data SQL Samples - Official Microsoft GitHub Repository containing code samples for SQL Server, Azure SQL, Azure Synapse, and Azure SQL Edge项目地址https://gitcode.com/gh_mirrors/sq/sql-server-samples点击查看免费下载本指南基于 sql-server-samples 仓库中的 SqlServerOnDocker 概念验证PoC项目完整讲解如何用 Docker Compose 同时编排 Microsoft SQL ServerLinux 版与 Django Web 应用两个容器并自动下载、恢复 AdventureWorksDW2017 示例数据仓库。读完本文你将掌握 SQL Server 容器化部署、备份文件恢复、ODBC 驱动配置、Django 连接 SQL Serverdjango-pyodbc-azure以及容器间网络通信的完整实战链路。项目概览一个容器化的 SQL Server Django 双服务示例SqlServerOnDocker 是一个概念验证Proof of Concept项目核心目标是在 Docker 容器中同时运行 Microsoft SQL Server 与 Django 框架并让两者协同工作。与常见的SQL Server 单独一个容器、应用连本机数据库的玩法不同这个示例把数据库恢复、应用迁移、Web 服务启动全部编排进容器生命周期用一条命令就能拉起一套完整的开发环境。从仓库目录结构看项目由三部分构成docker-compose.yml服务编排的核心定义了db与web两个服务docker/db/数据库容器构建上下文包含 Dockerfile负责安装 SQL Server 工具链并下载备份文件docker/web/Web 容器构建上下文包含 Dockerfile 与 requirements.txtSqlServerOnDocker/Django 工程配置目录其中 settings.py 是数据库连接配置的关键core/Django 应用目录其 models.py 是对 AdventureWorksDW2017 全部表结构的 Django 模型映射。环境准备开始之前需要在宿主机上安装dockerdocker-compose然后克隆本仓库sql-server-samples并进入samples/development-frameworks/SqlServerOnDocker目录。分步启动从构建镜像到数据库就绪README 给出了完整的启动流程这里结合源码逐条拆解。第一步构建数据库容器镜像docker-compose build db该命令会依据 docker/db/Dockerfile 构建数据库镜像。构建过程实际做了四件事以microsoft/mssql-server-linux:latest为基础镜像即 SQL Server 2017 时代的 Linux 官方镜像安装curl与apt-transport-https并配置微软软件源生成en_US.UTF-8localeSQL Server 容器运行所必需关键一步创建备份目录/var/opt/mssql/backup并通过 curl 直接下载AdventureWorksDW2017.bak备份文件到镜像内RUN mkdir -p /var/opt/mssql/backup WORKDIR /var/opt/mssql/backup RUN curl -L -o AdventureWorksDW2017.bak https://github.com/Microsoft/sql-server-samples/releases/download/adventureworks/AdventureWorksDW2017.bak同时该 Dockerfile 将/opt/mssql-tools/bin加入PATH使容器内可以直接使用sqlcmd命令行工具——这正是后续所有docker-compose run db sqlcmd ...命令能够工作的前提。提示由于备份文件在构建阶段就固化进镜像首次构建会受网络环境影响下载完成后后续启动不再重复下载。第二步以守护进程方式启动数据库容器docker-compose up -d db-d表示 detached后台模式。此时 SQL Server 容器在后台运行监听宿主机 1433 端口见 compose 文件中的ports: 1433:1433。第三步恢复前先验证备份文件docker-compose run db sqlcmd -S db1.internal.prod.example.com -U SA -P Alaska2017 -Q RESTORE FILELISTONLY FROM DISK N/var/opt/mssql/backup/AdventureWorksDW2017.bakRESTORE FILELISTONLY只读取备份内的文件清单而不实际恢复用于确认逻辑文件名这里即AdventureWorksDW2017与AdventureWorksDW2017_log为下一步WITH MOVE提供依据。这是恢复备份前的标准安全操作。第四步将 AdventureWorksDW2017 恢复到 SQL Serverdocker-compose run db sqlcmd -S db1.internal.prod.example.com -U SA -P Alaska2017 -Q RESTORE DATABASE AdventureWorksDW2017 FROM DISK N/var/opt/mssql/backup/AdventureWorksDW2017.bak WITH MOVE AdventureWorksDW2017 TO /var/opt/mssql/data/AdventureWorksDW2017.mdf, MOVE AdventureWorksDW2017_log TO /var/opt/mssql/data/AdventureWorksDW2017_log.ldf由于 Windows 版备份文件的默认文件路径在 Linux 容器内不存在必须用WITH MOVE将数据文件.mdf和日志文件.ldf重定向到 Linux 容器的/var/opt/mssql/data/目录这正是第三步先查询文件清单的原因。第五步对默认数据库执行 Django 迁移docker-compose run web python3 manage.py migratemigrate会把 Django 内置应用auth、admin、contenttypes、sessions 等所需的数据表应用到默认数据库——在本项目中即AdventureWorksDW2017。注意core应用在 models.py 中所有模型均声明了managed False因此 Django 不会改动 AdventureWorksDW 原有的任何业务表只做只读映射。第六步创建管理员账号docker-compose run web python3 manage.py createsuperuser按提示输入用户名、邮箱与密码即可访问 Django Admin 后台/admin/路由定义见 urls.py。运行项目docker-compose up web该命令会以前台方式同时启动db与web因为web通过depends_on依赖db。浏览器访问http://localhost:8080按CTRLC停止。由于web服务将宿主目录挂载进容器volumes: - .:/code/本地修改代码即可热生效符合开发场景定位。源码级解析Django 如何连上容器内的 SQL Server要让 Django 在 Linux 容器中连接 SQL Server链路中每一环都必须正确这也是本示例最有参考价值的部分。依赖层ODBC 驱动与数据库后端requirements.txt 只有两行却是整条链路的核心django ~ 1.11.15 django-pyodbc-azure1.11.0.0django-pyodbc-azure是 Django 的 SQL Server 数据库后端它基于 pyodbc 工作因此 Web 容器的 Dockerfile 必须在 Python 环境之外额外安装微软官方 ODBC 驱动RUN ACCEPT_EULAY apt-get install -y \ msodbcsql \ unixodbc-devmsodbcsql即 ODBC Driver 13 for SQL Serverunixodbc-dev提供 pyodbc 编译所需的头文件。该镜像同时安装了python3.5、python3-pip、python3-setuptools并通过pip3 install -r requirements.txt完成 Django 栈的安装。连接层settings.py 中的数据库配置settings.py 的DATABASES配置完整体现了容器化连接方式DATABASES { default: { ENGINE: sql_server.pyodbc, NAME: AdventureWorksDW2017, USER: sa, PASSWORD: Alaska2017, HOST: db1.internal.prod.example.com, PORT: 1433, OPTIONS: { driver: ODBC Driver 13 for SQL Server } } }各参数含义与源码对应关系如下参数值说明ENGINEsql_server.pyodbcdjango-pyodbc-azure 提供的数据库后端引擎NAMEAdventureWorksDW2017目标数据库即前面恢复的数据仓库USER/PASSWORDsa/Alaska2017与 compose 文件中SA_PASSWORD: Alaska2017保持一致HOSTdb1.internal.prod.example.com关键这不是真实域名而是 compose 网络别名见下文PORT1433SQL Server 默认端口OPTIONS.driverODBC Driver 13 for SQL Server与 Web 镜像中安装的 msodbcsql 版本严格对应网络层容器间如何用假域名互相访问为什么 Django 容器能用db1.internal.prod.example.com这种域名连到数据库容器答案在 docker-compose.yml 中两个服务被放在同一个自定义 bridge 网络mynetwork下并通过aliases为各自容器注册了内部 DNS 别名networks: mynetwork: driver: bridgedb服务的别名是db1.internal.prod.example.comweb服务的别名是web1.internal.prod.example.com。Docker 内置 DNS 会在该网络内解析这些别名因此看起来像生产域名的主机名实际只存在于容器网络中——这也是一个很实用的模式应用代码里写死业务域名通过 compose 网络别名映射到真实容器让开发、预发、生产环境的连接串保持一致。健康检查与启动顺序compose 文件中db服务还配置了 healthcheck用 sqlcmd 探测数据仓库是否已就绪healthcheck: test: sqlcmd -S db1.internal.prod.example.com -U SA -P Alaska2017 -Q select distinct 1 from AdventureWorksDW2017.dbo.DimDate只有当AdventureWorksDW2017.dbo.DimDate可查询时容器才被视为 healthy。web服务则通过depends_on: - db声明依赖避免 Django 在数据库未就绪时启动。web的启动命令由 compose 显式给出command: python3 manage.py runserver 0.0.0.0:8080并设置了DJANGO_SETTINGS_MODULE: SqlServerOnDocker.settings与 manage.py 中的默认值一致user: root与restart: unless-stopped则是开发容器常见的便利配置。进入容器与日常运维通过 sqlcmd 直查数据库sudo docker-compose run db sqlcmd -S db1.internal.prod.example.com -U SA -P Alaska2017 -Q select 1 from AdventureWorksDW2017进入数据库容器 Bashsudo docker exec -it sqlserverondocker_db_1 bash进入容器后备份文件位于/var/opt/mssql/backup/AdventureWorksDW2017.bak数据文件位于/var/opt/mssql/data/可直接查看或执行其他维护操作。模型映射让 Django ORM 直接操作数据仓库core应用下的 models.py 是典型的数据库先行database-first产物为 AdventureWorksDW2017 数据仓库中的核心表生成了 Django 模型例如维度表DimAccount、DimCustomer、DimDate、DimEmployee、DimGeography、DimProduct、DimProductCategory、DimProductSubcategory、DimPromotion、DimReseller、DimSalesReason、DimSalesTerritory、DimScenario、DimDepartmentGroup、DimOrganization、DimCurrency事实表FactInternetSales、FactResellerSales、FactCallCenter、FactFinance、FactCurrencyRate、FactProductInventory、FactSalesQuota、FactSurveyResponse、FactInternetSalesReason、FactAdditionalInternationalProductDescription系统表AuthUser、AuthGroup、DjangoMigrations、DjangoSession等。所有模型均声明managed False表示仅映射、不管理——Django 迁移不会创建、修改或删除这些表彻底保护数据仓库结构。同时字段统一使用db_column显式映射到 SQL Server 的 PascalCase 列名如db_columnSalesOrderNumber是数据库先行模式下保证 ORM 正确性的标准写法。实践要点与限制本示例定位是概念验证PoC从源码中可确认以下适用前提与注意事项版本是固定的SQL Server 镜像为mssql-server-linux:latest对应 SQL Server 2017 Linux 时代、基础系统为 Ubuntu 16.04、Django 1.11.15、ODBC Driver 13。若在更新的系统或新版 SQL Server 上复现需同步升级镜像源配置如新版系统需改用mssql-tools18与ODBC Driver 18。密码是硬编码的SA_PASSWORD: Alaska2017同时出现在 docker-compose.yml 与 settings.py 中且 Web 容器也以user: root运行仅适合本地开发生产环境必须通过环境变量或密钥管理注入凭据。ALLOWED_HOSTS [*]同样仅适合开发部署时应收紧为具体域名。恢复依赖网络备份文件在镜像构建阶段从官方 Release 下载构建环境需能访问该下载地址。重启后数据库仍在备份恢复与迁移完成后数据落在容器的数据卷内docker-compose down后再up不会清空但执行down -v删除卷会重置。总而言之SqlServerOnDocker 用最精简的编排展示了SQL Server Django 全容器化的一条完整可运行链路镜像构建阶段固化备份、sqlcmd 完成恢复、网络别名打通容器互访、ODBC django-pyodbc-azure 实现 ORM 直连、managed False保护既有数据仓库。这套组合拳既是理解 SQL Server on Linux 容器化的入门范例也是后续搭建 Django SQL Server 容器化开发环境时可复用的模板。赞分享示例工程数据库教程后端【免费下载链接】sql-server-samplesAzure Data SQL Samples - Official Microsoft GitHub Repository containing code samples for SQL Server, Azure SQL, Azure Synapse, and Azure SQL Edge项目地址https://gitcode.com/gh_mirrors/sq/sql-server-samples点击查看免费下载相关推荐基于 docker-compose 搭建 SQL Server 快照复制环境Publisher/Subscriber 容器化实操指南基于 docker compose 搭建 SQL Server 快照复制环境Publisher/Subscriber 容器化实操指南 导读 本文以 sampl示例工程数据库教程后端OneUptime 本地开发环境搭建指南基于 docker-compose.dev.yml 的完整实践OneUptime 本地开发环境搭建指南基于 docker compose.dev.yml 的完整实践 本指南围绕 OneUptime 官方文档中的《Déve可观测性后端运维前端云原生微服务AI AgentOneUptime 本地开发实战基于 docker-compose.dev.yml 与 npm run dev 的完整开发环境搭建OneUptime 本地开发实战基于 docker compose.dev.yml 与 npm run dev 的完整开发环境搭建 本文围绕 OneUptim可观测性后端运维前端云原生微服务AI Agent创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
CopyQ 版本发布全流程指南:从 CHANGES 更新到多平台产物签名发布 CopyQ 版本发布全流程指南:从 CHANGES 更新到多平台产物签名发布 【免费下载链接】CopyQ Clipboard manager with advanced features 项目地址: https://gitcode.com/gh_mirrors/co/CopyQ
CopyQ 是一个功能丰富的跨平台剪贴板管理器(官方描述为 &… · 2026/9/23 23:39:49
继保实验模版:三段式电流保护、差动与距离保护整定及重合闸逻辑 简介:继保实验模版面向电气工程、电力系统自动化等专业的本科生与继保实验学习者,围绕微机继电保护课程实验提供可直接套用的整定计算与操作参考。内容覆盖三段式电流保护及自动重合闸、变压器差动保护、微机型距离保护三大实验,包含简单线路… · 2026/9/23 23:39:49
Python多元统计教学源码:PCA、Ward聚类与数据预处理全链路实践 简介:本资源是面向高校统计学、数据科学及相关专业本科生与初学者的多元统计分析实践教学包,聚焦Python编程实现与真实数据分析场景,解决理论学习与代码实操脱节问题。压缩包共29个文件(22个.py脚本、4个.csv数据集、2个.md文档、… · 2026/9/24 0:13:10
SpringBoot宠物药品商城实战:积分兑换+推荐系统+处方药管理 简介:这是一套面向计算机专业本科生的毕业设计级宠物医疗药品商城系统源码,基于SpringBootMySQL实现前后端分离架构,完整覆盖电商核心业务场景,特别适合Java Web课程设计、毕设选题与全栈开发能力训练。资源包含1300个文件&#x… · 2026/9/24 0:13:03
Python实战5G调制对比:QPSK/16QAM/64QAM信号指纹分析 1. 这不是教科书里的调制图,是我在5G基站调试现场画出来的信号“指纹”你有没有在实验室里盯着示波器上那一堆密密麻麻的点发过呆?或者在看5G协议栈文档时,被QPSK、16QAM、64QAM这几个缩写绕得晕头转向?别急——这根本不是抽象概念… · 2026/9/24 0:13:03
使用 Mockery 检测 Mock 对象:基于 `MockInterface` 的类型判断实战指南 示例工程数据库教程后端 【免费下载链接】sql-server-samples Azure Data SQL Samples - Official Microsoft GitHub Repository containing code samples for SQL Server, Azure SQL, Azure Synapse, and Azure SQL Edge 项目地址: https://gitcode.com/gh_mirrors… · 2026/9/24 0:12:57
Ekko Studio 工具输出边界控制:terminal_exec 有界预览、超大流产物持久化与模型请求安全限制 AI 应用人工智能AI Agent本地部署前端后端工作流自动化 【免费下载链接】ekko-studio Ekko Studio is a local-first AI workspace for multi-agent chat, coding, and visual workflows, available on desktop and the web. 项目地址: https://gitcode.com/gh_mirr… · 2026/9/24 0:12:57
Fabric超级账本实战:资产管理与防伪溯源链码设计 简介:这是一套以Fabric超级账本为底层、面向企业级场景的开源区块链解决方案,覆盖资产管理、交易流转、防伪与溯源一体化功能,适合计算机相关专业学生、教师及企业开发人员用于毕业设计、课程设计、项目立项演示或进阶学习。资源包共约2000个… · 2026/9/24 0:12:44
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程 简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13
1D-CNN时间序列建模实战:从Conv1d原理到工业落地 简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26
柔软的L:汉语语流中被忽视的舌肌张力控制 1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44