docker sql server安装

在Docker容器中安装SQL Server 2022

概述

一般情况下,部署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.

要连接运行在 Docker 中的 SQL Server,可按以下步骤操作: ### 1. 确保 SQL Server 容器正常运行 首先要保证 SQL Server 容器已成功启动。可以使用以下命令查看容器的运行状态: ```bash sudo docker ps ``` 如果容器正常运行,会在列表中看到相应的容器信息。 ### 2. 明确连接所需信息 - **主机地址**:通常使用 `localhost` 或 Docker 主机的 IP 地址。因为容器的端口已经映射到主机上,所以可以通过主机来访问容器内的 SQL Server。 - **端口号**:根据容器运行时的端口映射,一般是 `1433` 端口。例如在运行容器的命令中使用了 `-p 1433:1433`,这就将主机的 `1433` 端口映射到了容器内的 `1433` 端口。 - **用户名和密码**:用户名一般为 `SA`,密码是在运行容器时通过 `-e "MSSQL_SA_PASSWORD=<password>"` 设置的密码。 ### 3. 使用工具连接 SQL Server 以下以 SQL Server Management Studio(SSMS,适用于 Windows)和 `sqlcmd`(适用于 Linux 和 macOS)为例说明连接方法。 #### 使用 SQL Server Management Studio(SSMS) - 打开 SSMS 工具。 - 在“连接到服务器”对话框中: - “服务器类型”选择“数据库引擎”。 - “服务器名称”输入 `localhost,1433`(如果使用 Docker 主机的 IP 地址,将 `localhost` 替换为相应的 IP)。 - “身份验证”选择“SQL Server 身份验证”。 - “登录名”输入 `SA`。 - “密码”输入运行容器时设置的密码。 - 点击“连接”按钮,如果信息正确,即可成功连接到运行在 Docker 中的 SQL Server。 #### 使用 `sqlcmd`(在 Linux 或 macOS 上) 首先要确保已经安装了 `sqlcmd` 工具。然后在终端中使用以下命令进行连接: ```bash sqlcmd -S localhost,1433 -U SA -P <password> ``` 其中 `<password>` 是运行容器时设置的 `MSSQL_SA_PASSWORD`。如果连接成功,会进入 `sqlcmd` 的命令行界面,可以执行 SQL 语句。 ### 示例命令解释 以引用中的命令为例: ```bash sudo docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" \ -p 1433:1433 --name sql2022 --hostname sql2022 \ -d \ mcr.microsoft.com/mssql/server:2022-latest ``` - `-e "ACCEPT_EULA=Y"`:表示接受最终用户许可协议。 - `-e "MSSQL_SA_PASSWORD=<password>"`:设置 `SA` 用户的密码。 - `-p 1433:1433`:将主机的 `1433` 端口映射到容器内的 `1433` 端口,方便外部连接。 - `--name sql2022`:为容器指定名称为 `sql2022`。 - `-d`:以守护式(后台)模式运行容器。 连接时,主机地址使用 `localhost`,端口号为 `1433`,用户名是 `SA`,密码是 `<password>`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值