218 lines
5.5 KiB
Markdown
218 lines
5.5 KiB
Markdown
# SQL Server 2022 Linux Docker Compose 部署指南
|
||
|
||
## 概述
|
||
|
||
这是一个完整的SQL Server 2022 Linux Docker Compose部署方案,包含数据库初始化、用户管理、性能优化等配置。
|
||
|
||
## 文件结构
|
||
|
||
```
|
||
├── docker-compose-sqlserver.yml # Docker Compose 配置文件
|
||
├── sqlserver.env # 环境变量配置文件
|
||
├── sqlserver/ # SQL Server 相关目录
|
||
│ ├── init/ # 初始化脚本目录
|
||
│ │ ├── 01-create-database.sql # 创建数据库和表
|
||
│ │ ├── 02-create-user.sql # 创建用户和权限
|
||
│ │ └── 03-performance-config.sql # 性能优化配置
|
||
│ ├── data/ # 数据文件目录
|
||
│ ├── logs/ # 日志文件目录
|
||
│ ├── backup/ # 备份文件目录
|
||
│ └── web-config/ # Web管理界面配置
|
||
└── SQLServer-README.md # 本说明文档
|
||
```
|
||
|
||
## 快速开始
|
||
|
||
### 1. 配置环境变量
|
||
|
||
复制并修改环境变量文件:
|
||
|
||
```bash
|
||
cp sqlserver.env .env
|
||
```
|
||
|
||
编辑 `.env` 文件,修改以下关键配置:
|
||
|
||
```bash
|
||
# 修改SA密码(必须)
|
||
SQLSERVER_SA_PASSWORD=YourStrong@Password123!
|
||
|
||
# 修改端口(可选,避免冲突)
|
||
SQLSERVER_PORT=1433
|
||
|
||
# 选择SQL Server版本
|
||
SQLSERVER_EDITION=Developer # 免费开发版本
|
||
```
|
||
|
||
### 2. 启动服务
|
||
|
||
```bash
|
||
# 启动SQL Server
|
||
docker-compose -f docker-compose-sqlserver.yml --env-file .env up -d
|
||
|
||
# 查看服务状态
|
||
docker-compose -f docker-compose-sqlserver.yml ps
|
||
|
||
# 查看日志
|
||
docker-compose -f docker-compose-sqlserver.yml logs -f sqlserver
|
||
```
|
||
|
||
### 3. 连接数据库
|
||
|
||
#### 使用 sqlcmd 连接
|
||
|
||
```bash
|
||
# 进入容器
|
||
docker exec -it sqlserver-2022 /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P 'YourStrong@Password123!'
|
||
|
||
# 或者直接执行SQL
|
||
docker exec -it sqlserver-2022 /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P 'YourStrong@Password123!' -Q "SELECT name FROM sys.databases"
|
||
```
|
||
|
||
#### 使用外部工具连接
|
||
|
||
- **服务器**: `localhost` 或你的服务器IP
|
||
- **端口**: `1433`(或你在.env中配置的端口)
|
||
- **用户名**: `sa`
|
||
- **密码**: 你在.env中配置的密码
|
||
- **数据库**: `SampleDB`(初始化脚本创建的示例数据库)
|
||
|
||
## 配置说明
|
||
|
||
### SQL Server 版本选择
|
||
|
||
在 `sqlserver.env` 中配置 `SQLSERVER_EDITION`:
|
||
|
||
- `Developer`: 免费开发版本(推荐用于开发环境)
|
||
- `Express`: 免费轻量版本
|
||
- `Standard`: 标准版
|
||
- `Enterprise`: 企业版
|
||
|
||
### 资源限制
|
||
|
||
默认配置:
|
||
- CPU限制: 4核心
|
||
- 内存限制: 8GB
|
||
- 数据目录: `./sqlserver/data`
|
||
- 日志目录: `./sqlserver/logs`
|
||
|
||
### 网络配置
|
||
|
||
- 默认端口: 1433
|
||
- 网络子网: 172.24.0.0/16
|
||
- 容器间通信: 通过 `sqlserver-net` 网络
|
||
|
||
## 初始化脚本说明
|
||
|
||
### 01-create-database.sql
|
||
- 创建 `SampleDB` 示例数据库
|
||
- 创建 `Users` 示例表
|
||
- 插入示例数据
|
||
- 创建 `GetActiveUsers` 存储过程
|
||
|
||
### 02-create-user.sql
|
||
- 创建 `appuser` 应用程序用户
|
||
- 配置用户权限
|
||
- 授予必要的数据库权限
|
||
|
||
### 03-performance-config.sql
|
||
- 配置最大内存使用量
|
||
- 设置最大并行度
|
||
- 启用查询存储
|
||
- 创建性能监控视图
|
||
|
||
## 常用操作
|
||
|
||
### 备份数据库
|
||
|
||
```bash
|
||
# 创建备份
|
||
docker exec -it sqlserver-2022 /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P 'YourStrong@Password123!' -Q "BACKUP DATABASE SampleDB TO DISK = '/var/opt/mssql/backup/SampleDB.bak'"
|
||
```
|
||
|
||
### 恢复数据库
|
||
|
||
```bash
|
||
# 恢复备份
|
||
docker exec -it sqlserver-2022 /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P 'YourStrong@Password123!' -Q "RESTORE DATABASE SampleDB FROM DISK = '/var/opt/mssql/backup/SampleDB.bak'"
|
||
```
|
||
|
||
### 查看性能统计
|
||
|
||
```bash
|
||
# 查看性能统计
|
||
docker exec -it sqlserver-2022 /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P 'YourStrong@Password123!' -d SampleDB -Q "SELECT * FROM PerformanceStats"
|
||
```
|
||
|
||
### 停止和清理
|
||
|
||
```bash
|
||
# 停止服务
|
||
docker-compose -f docker-compose-sqlserver.yml down
|
||
|
||
# 停止并删除数据卷(谨慎使用)
|
||
docker-compose -f docker-compose-sqlserver.yml down -v
|
||
```
|
||
|
||
## 故障排除
|
||
|
||
### 常见问题
|
||
|
||
1. **容器启动失败**
|
||
- 检查密码是否符合复杂度要求
|
||
- 确保端口没有被占用
|
||
- 查看容器日志: `docker-compose logs sqlserver`
|
||
|
||
2. **连接失败**
|
||
- 确认防火墙设置
|
||
- 检查网络配置
|
||
- 验证用户名和密码
|
||
|
||
3. **性能问题**
|
||
- 调整内存限制
|
||
- 检查磁盘空间
|
||
- 查看性能监控视图
|
||
|
||
### 日志查看
|
||
|
||
```bash
|
||
# 查看SQL Server日志
|
||
docker-compose -f docker-compose-sqlserver.yml logs sqlserver
|
||
|
||
# 查看系统日志
|
||
docker exec -it sqlserver-2022 cat /var/opt/mssql/log/errorlog
|
||
```
|
||
|
||
## 安全建议
|
||
|
||
1. **修改默认密码**: 使用强密码
|
||
2. **限制网络访问**: 配置防火墙规则
|
||
3. **定期备份**: 设置自动备份策略
|
||
4. **监控访问**: 启用审计日志
|
||
5. **更新补丁**: 定期更新SQL Server镜像
|
||
|
||
## 扩展功能
|
||
|
||
### 添加更多数据库
|
||
|
||
在 `sqlserver/init/` 目录下创建新的 `.sql` 文件,它们将按文件名顺序执行。
|
||
|
||
### 集成其他服务
|
||
|
||
可以将此SQL Server配置集成到现有的Docker Compose网络中:
|
||
|
||
```yaml
|
||
networks:
|
||
- your-existing-network
|
||
```
|
||
|
||
## 许可证
|
||
|
||
SQL Server 2022 Developer Edition 可免费用于开发和测试环境。生产环境请确保使用适当的许可证。
|
||
|
||
## 支持
|
||
|
||
如有问题,请查看:
|
||
- [SQL Server 2022 官方文档](https://docs.microsoft.com/en-us/sql/sql-server/)
|
||
- [Docker Hub SQL Server 页面](https://hub.docker.com/_/microsoft-mssql-server)
|