概述
一般情况下,部署sql server,需要准备一台windows server服务器,然后再安装sql server。
但是windows太耗费资源了,在docker中运行,是比较方便的。
硬件和软件要求
要在 Docker 容器上安装 SQL Server 2019,主机服务器必须满足以下要求:
- 任何受支持的 Linux 分发版或 Windows 或 Mac 上装有 Docker 引擎 1.8 或更高版本
- 至少 2 GB 的内存
- 2 GB 的磁盘空间
下载镜像
docker hub地址:https://hub.docker.com/r/microsoft/mssql-server
目前最新版本是2022
docker pull mcr.microsoft.com/mssql/server:2022-latest
安装sql server
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=Y.saabcd@1234" -p 1433:1433 -e "MSSQL_PID=Evaluation" --name sqlpreview --hostname sqlpreview -d -u root mcr.microsoft.com/mssql/server:2022-latest
参数说明:
参数 | 说明 |
-e "ACCEPT_EULA=Y" | 将 ACCEPT_EULA 变量设置为任意值,以确认接受最终用户许可协议。 SQL Server 映像>的必需设置。 |
-e "MSSQL_SA_PASSWORD=Y.saabcd@1234" | 指定至少包含 8 个字符且符合密码策略的强密码。 SQL Server 映像的必需设置。 |
-e "MSSQL_COLLATION=<SQL_Server_collation>" | 指定自定义 SQL Server 排序规则,而不使用默认值 SQL_Latin1_General_CP1_CI_AS。 |
-p 1433:1433 | 将主机环境中的 TCP 端口(第一个值)映射到容器中的 TCP 端口(第二个值)。 在此示例中,SQL Server 侦听容器中的 TCP 1433,此容器端口随后会对主机上的 TCP 端口 1433 公开。 |
--name sqlpreview | 为容器指定一个自定义名称,而不是使用随机生成的名称。 如果运行多个容器,则无法重复使用相同的名称。 |
--hostname sqlpreview | 用于显式设置容器主机名。 如果未指定主机名,则主机名默认为容器 ID,这是随机生成的系统 GUID。 |
注意:MSSQL_SA_PASSWORD必须符合密码策略的强密码,如果密码太简单,会导致启动失败。
如果Docker容器启动报WARNING: IPv4 forwarding is disabled. Networking will not work
解决方法
打开sysctl配置文件/etc/sysctl.conf
添加如下代码
net.ipv4.ip_forward=1
刷新配置
sysctl -p
查看日志
docker logs -f sqlpreview
运行成功应该会看到与下面类似的输出:
...
2024-08-18 13:12:56.66 spid14s Recovery is complete. This is an informational message only. No user action is required.
2024-08-18 13:12:56.77 spid24s The default language (LCID 0) has been set for engine and full-text services.
2024-08-18 13:12:56.83 spid24s The tempdb database has 2 data file(s).
数据持久化
创建持久化目录
mkdir -p /data/mssql/
拷贝数据,-a保留文件权限
docker cp -a sqlpreview:/var/opt/mssql/data /data/mssql/
删除容器
docker rm -f sqlpreview
重新挂载目录运行
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=Y.saabcd@1234" -p 1433:1433 -e "MSSQL_PID=Evaluation" --name sqlpreview --hostname sqlpreview -d -u root -v /data/mssql/data:/var/opt/mssql/data mcr.microsoft.com/mssql/server:2022-latest
查看日志
docker logs -f sqlpreview
...
2024-08-18 13:29:55.57 spid27s The Service Broker endpoint is in disabled or stopped state.
2024-08-18 13:29:55.57 spid27s The Database Mirroring endpoint is in disabled or stopped state.
2024-08-18 13:29:55.58 spid27s Service Broker manager has started.
2024-08-18 13:29:55.59 spid13s Recovery is complete. This is an informational message only. No user action is required.