以Docker形式部署Sqlserver

以Docker形式部署Sqlserver

前言

最近朋友需要一个Sqlserver实例用来学习SQL语句,上(sou)网(suo)发现,微软的Sqlserver已经支持跑在Linux上,也同样提供了Docker版本,正好能跑在24小时开机的黑群晖上。

安装部署

  1. 环境
    CPU: J1900
    内存: 8G
    系统: DSM 6.2.1-23824 Update 1
    软件版本: Docker version 18.09.8, build 2c0a67b

  2. 拉取镜像
    sudo docker pull mcr.microsoft.com/mssql/server:latest
    其中会拉取多个镜像层,其中倒数第二和第三个镜像层,速度尤为缓慢,可能与微软的相应服务器在海外有关,需要某些形式的加速服务。

$ sudo docker pull mcr.microsoft.com/mssql/server:latest
latest: Pulling from mssql/server
8e128b580ca0: Pull complete
069545734e12: Pull complete
5e3755f4d999: Pull complete
c1b41e6e4ba8: Pull complete
d8579de2f3a2: Pull complete
9d72f33eeb8c: Downloading [===================>                               ]  142.7MB/359.7MB
547793e22b5b: Download complete

拉取完后可用看到镜像已经躺好。

$ sudo docker images
Password:
REPOSITORY                       TAG                 IMAGE ID            CREATED             SIZE
mcr.microsoft.com/mssql/server   latest              a8948ed97d80        2 weeks ago         1.39GB
  1. 启动容器
sudo docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=Pass@w0rd"    -p 51433:1433 --name mssql -h mssql    -d mcr.microsoft.com/mssql/server:latest

-e "ACCEPT_EULA=Y" 为同意用户协议,保持不用改就行。
"SA_PASSWORD=Pass@w0rd" 为SA用户设置密码,强度要求是至少8位且大小写字母、数字、符号4种中有3种即可。
-p 51433:1433 为容器转发端口,前者为宿主机端口,后者为Sqlserver默认端口
--name mssql 为容器名,自己手动指定一个
-h mssql 为容器内的主机名,我设置的同容器名,避免混淆
-d 容器将在后台运行
mcr.microsoft.com/mssql/server:latest 微软的仓库

  1. 查看容器状态
$ sudo docker ps
CONTAINER ID        IMAGE                                   COMMAND                  CREATED             STATUS              PORTS                     NAMES
2cbfe02bf409        mcr.microsoft.com/mssql/server:latest   "/opt/mssql/bin/perm…"   6 hours ago         Up 6 hours          0.0.0.0:51433->1433/tcp   mssql
  1. 修改密码
    官方建议修改SA密码,因为在安装时设置的SA密码会保存在环境变量SA_PASSWORD中。
$ sudo docker exec -it mssql /bin/bash
Password:
mssql@mssql:/$
mssql@mssql:/$ echo $SA_PASSWORD
Pass@w0rd

通过以上查看环境变量,即可看到。

$ sudo docker exec -it mssql /opt/mssql-tools/bin/sqlcmd    -S localhost -U SA -P Pass@w0rd    -Q ‘ALTER LOGIN SA WITH PASSWORD=NewPass@w0rd‘

以上,通过sqlcmd工具,输入老密码,设置新密码。

接下来我们就可以使用Sqlserver数据库了。
4. 使用sqlcmd进入数据库

$ sudo docker exec -it mssql /opt/mssql-tools/bin/sqlcmd    -S localhost -U SA -P Pass@w0rd
Password:
1>
2>
3> create database TestDB001
4> go
1> select name from sys.databases
2> go
name
--------------------------------------------------------------------------------------------------------------------------------
master
tempdb
model
msdb
TestDB
TestDB001

(6 rows affected)

如图,sqlcmd中每次输入命令需要输入go才能提交执行。以上成功的创建了一个名为TestDB001的数据库。

小坑

  1. 使用Navicat连接Sqlserver数据库时,若端口号不是默认端口号,需要在主机IP后使用英文逗号加端口号的形式。
  2. 对于Navicat,以上设置后,需要安装SQL Server Native Client 10.0驱动,安装程序为Navicat软件根目录下的sqlncli_x64.msi,32位版也有提供。安装完成后,创建Sqlserver连接时高级选项卡中的Native Client驱动将有下拉选项可供选择。

参考

  1. 快速入门:使用 Docker 运行 SQL Server 容器映像 https://docs.microsoft.com/zh-cn/sql/linux/quickstart-install-connect-docker

以Docker形式部署Sqlserver

上一篇:mysql-索引方案


下一篇:SQL语句性能优化