最近朋友需要一个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
$ 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的数据库。
原文:https://www.cnblogs.com/mustard27/p/Sqlserver_Docker.html