以Docker形式部署Sqlserver
前言
最近朋友需要一个Sqlserver实例用来学习SQL语句,上(sou)网(suo)发现,微软的Sqlserver已经支持跑在Linux上,也同样提供了Docker版本,正好能跑在24小时开机的黑群晖上。
安装部署
-
环境
CPU: J1900
内存: 8G
系统: DSM 6.2.1-23824 Update 1
软件版本: Docker version 18.09.8, build 2c0a67b -
拉取镜像
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
- 启动容器
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
微软的仓库
- 查看容器状态
$ 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
- 修改密码
官方建议修改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的数据库。
小坑
- 使用Navicat连接Sqlserver数据库时,若端口号不是默认端口号,需要在主机IP后使用英文逗号加端口号的形式。
- 对于Navicat,以上设置后,需要安装SQL Server Native Client 10.0驱动,安装程序为Navicat软件根目录下的sqlncli_x64.msi,32位版也有提供。安装完成后,创建Sqlserver连接时高级选项卡中的Native Client驱动将有下拉选项可供选择。
参考
- 快速入门:使用 Docker 运行 SQL Server 容器映像 https://docs.microsoft.com/zh-cn/sql/linux/quickstart-install-connect-docker