docker部署mssql2017

文摘   2024-12-18 09:00   中国台湾  

前言

从 SQL Server 2017 开始,可以安装Linux 上的 SQL Server操作系统,同时也开始支持容器部署,更加方便了各位开发同学的使用。

先决条件

  • 任何受支持的 Linux 发行版上的 Docker 引擎 1.8 及更高版本。有关详细信息,请参阅 Install Docker(安装 Docker)。
  • 有关硬件要求和处理器支持的详细信息,请参阅 SQL Server 2016 和 2017:硬件和软件要求
  • Docker overlay2 存储驱动程序。此驱动程序是大多数用户的默认设置。如果你未使用此存储提供程序并且需要进行更改,请参阅有关配置 overlay2 的 Docker 文档中的说明和警告。
  • 在 Docker 主机上安装最新的 sqlcmd。
  • 至少   2 GB 的磁盘空间。
  • 至少 2 GB 的 RAM。
  • Linux 上的 SQL Server 的系统要求。

部署

docker部署请自行搜索其他博主文章,后续有时间完成docker部署教程后会在此添加连接

拉取镜像

docker pull mcr.microsoft.com/mssql/server:2017-latest

启动

docker run方式

docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=12345678" \
   -p 1433:1433 --name sql1 --hostname sql1 \
   -d \
   mcr.microsoft.com/mssql/server:2017-latest

docker run参数说明

参数
说明
-e "ACCEPT_EULA=Y"
将 ACCEPT_EULA 变量设置为任意值,以确认接受最终用户许可协议。SQL Server 映像的必需设置。
-e "MSSQL_SA_PASSWORD=YourStrong@Passw0rd"
指定至少包含 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 sql1
为容器指定一个自定义名称,而不是使用随机生成的名称。如果运行多个容器,则无法重复使用相同的名称。
--hostname sql1
用于显式设置容器主机名。如果未指定主机名,则主机名默认为容器 ID,这是随机生成的系统 GUID。
-d
在后台运行容器(守护程序)。
mcr.microsoft.com/mssql/server:2017-latest
SQL Server Linux 容器映像

❗️注:密码应符合 SQL Server 默认密码策略,否则容器无法设置 SQL Server,会停止工作。默认情况下,密码必须为至少八个字符且包含以下四种字符中的三种:大写字母小写字母十进制数字符号。可使用 docker logs 命令检查错误日志。

数据持久化:如果需要实现即使在容器停止后文件也能持久保存,可以在上面命令后添加 -v sqlvolume:/var/opt/mssql,其中sqlvolume就是宿主机的一个文件挂载名称,冒号后边的是容器内的目录,这样数据将会被存储在宿主机保留,避免数据丢失。

Docker-compose方式

在实际应用中,docker run方式由于参数繁多,每次启动都需要配置参数选项,所以docker-compose方式更适合日常部署。

编辑/data/mmssql/docker-compose.yml文件:

version: '3'
services:
  #服务名称
  sqlserver-db:
    #容器名称
    container_name: sqlserver-db
    #镜像名称
    image: microsoft/mssql-server-linux:2017-latest
    #端口映射
    ports:
      - 1433:1433
    #挂载宿主机目录,数据持久化
    volumes:
      - ./data:/var/opt/mssql
    #环境变量
    environment:
      - ACCEPT_EULA=Y
      #SA用户密码长度必须至少为 8 个字符,并包含以下四组中的三组字符:大写字母、小写字母、10 位基数和符号
      - MSSQL_SA_PASSWORD=Abc@1234
      - MSSQL_PID=EnterpriseCore
      - TZ=Asia/Shanghai

在docker-compose.yml文件同级目录创建挂载路径,并启动docker

[root@docker mssql]# mkdir data
[root@docker mssql]# docker compose up -d
[root@docker mssql]# docker ps
CONTAINER ID   IMAGE                                        COMMAND                  CREATED         STATUS         PORTS                                       NAMES
77ec13bea161   mcr.microsoft.com/mssql/server:2017-latest   "/opt/mssql/bin/nonr…"   5 minutes ago   Up 4 minutes   0.0.0.0:1433->1433/tcp, :::1433->1433/tcp   sqlserver-db

连接

sqlcmd方式

从 SQL Server 2017 (14.x) 开始,容器映像中加入了 SQL Server 命令行工具。如果使用交互式命令提示符附加至此映像,则可在本地运行工具。

  1. 进入docker容器内
[root@docker mssql]# docker exec -it 77e "bash"
root@77ec13bea161:/#
  1. 通过qlcmd进行本地连接
root@77ec13bea161:/# /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'Abc@1234'
1> select name from master.dbo.sysdatabases
2> go
name
--------------------------------------------------------------------------------------------------------------------------------
master
tempdb
model
msdb

容器外工具

可从支持 SQL 连接的任何 Linux、Windows 或 macOS 外部工具连接到容器主机上的 SQL Server 实例。

SSMS工具

备份还原

可以使用多个不同的选项备份 Linux 上的 SQL Server 中的数据库。在 Linux 服务器上,可以使用 sqlcmd 连接到 SQL Server 并进行备份。如果是 Windows,则可以在连接到 Linux 上的 SQL Server 后通过用户界面进行备份。各平台间的备份功能都是相同的

sqlcm工具

备份数据库

sqlcmd -S localhost -U SA -Q "BACKUP DATABASE [demodb] TO DISK = N'/var/opt/mssql/data/demodb.bak' WITH NOFORMAT, NOINIT, NAME = 'demodb-full'SKIP, NOREWIND, NOUNLOAD, STATS = 10"

备份事物日志

如果数据库处于完整恢复模式,还可以进行事务日志备份以获得更精细的还原选项

sqlcmd -S localhost -U SA -Q "BACKUP LOG [demodb] TO DISK = N'/var/opt/mssql/data/demodb_LogBackup.bak' WITH NOFORMAT, NOINIT, NAME = N'demodb_LogBackup', NOSKIP, NOREWIND, NOUNLOAD, STATS = 5"

还原数据库

NORECOVERY 选项用于其他日志文件备份的还原。如果不打算还原额外的日志文件,请删除 NORECOVERY 选项。

sqlcmd -S localhost -U SA -Q "RESTORE DATABASE [demodb] FROM DISK = N'/var/opt/mssql/data/demodb.bak' WITH FILE = 1, NOUNLOAD, REPLACE, NORECOVERY, STATS = 5"
  • 还原事物日志
sqlcmd -S localhost -U SA -Q "RESTORE LOG demodb FROM DISK = N'/var/opt/mssql/data/demodb_LogBackup.bak'"

SSMS工具

备份

可以从 Windows 计算机使用 SSMS 连接到 Linux 数据库并通过用户界面进行备份。

  1. 启动 SSMS 并连接到 Linux 上的 SQL Server 实例。
  2. 在“对象资源管理器”中,右键单击数据库,选择“任务”,然后选择“备份...”。
  3. 在“备份数据库”对话框中,验证参数和选项,然后选择“确定”。

还原

  1. 在 SSMS 中,右键单击“数据库”,然后选择“还原数据库...”。
  2. 在“源”下,选择“设备:”,然后选择省略号图标 (...)。
  3. 查找你的数据库备份文件,然后选择“确定”。
  4. 在“还原计划”下,验证备份文件和设置。选择“确定”。
  5. SQL Server 将还原数据库。



数据库实战派
泰莱大学人工智能专业硕士,专注数据库技术解析,涵盖主流数据库的优化、运维与开发技巧。分享最新技术趋势、实用工具和最佳实践,助力从业者提升专业能力。
 最新文章