使用Docker构建SQL Server开发数据库
我习惯在Linux下开发,但目前的产品采用的是SQL Server,众所周知,MSSQL在Linux下臃肿笨重,故决定使用Docker搭建SQL Server Express作为开发数据库。以下是具体过程。
拉取镜像并启动实例
image还是非常大的,再拉取之前一定要先添加加速器,否则会等到天荒地老。如果添加加速器,请参见我的另一篇文章
docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=your_password' -e 'MSSQL_PID=Express' -p 1433:1433 --name mssql -v mssql_db:/data/db --privileged=true -d microsoft/mssql-server-linux:latest |
ACCEPT_EULA=Y
接受用户协议SA_PASSWORD=your_password
设置sa的密码,这个密码必须是高强度密码,有数字大小写字母,不小于8位MSSQL_PID=Express
SQL Server的版本,默认是Developer版本。可选的值有:Developer, Express, Standard, Enterprise, EnterpriseCore 。- -p 指定端口映射
- -v 将宿主机的mssql_db目录映射为容器中的/data/db
- -d 以deamon模式运行容器,即在后台运行
- –name 指定容器的名字
- 最后一个参数是指定使用的image,如果本地没有会自动从云端pull
使用方式
使用DB客户端连接
可以使用各种支持SQL Server的客户端连接,ip即为本机地址,端口为1433,用户名sa,密码就是上面的命令中的your_password。
命令行连接
可以使用命令直接进入容器中的SQL Server命令行环境。
docker exec -it <container_id|container_name> /opt/mssql-tools/bin/sqlcmd -H localhost -U sa -P <your_password>
也可以进入bash,以便执行其他非数据库命令
docker exec -it <container_id|container_name> bash
还原数据库
可以将备份文件放入映射目录,然后命令行连接到容器中使用sqlserver 命令还原,下面以数据库备份文件名为
hlht_db20171214.bak
为例来说明在宿主机拷贝到映射目录中
cp hlht_db20171214.bak /var/lib/docker/volumes/mssql_db/_data/
进入容器
docker exec -it <container_id|container_name> bash
找到备份文件
cd /data/db/
进入SQLServer交互命令行
/opt/mssql-tools/bin/sqlcmd -H localhost -U sa -P password
查看备份文件对应的逻辑卷名,注意查看打印出来的第一个字段 LogicalName,还原时要用到
restore filelistonly from disk = '/data/db/hlht_db20171214.bak'
go
执行还原,move后面的两个参数分别是上一步中查看的mdf,ldf文件对应的LogicName
restore database HLHTDB
from disk = '/data/db/hlht_db20171214.bak'
with move 'HLHTDB' to '/data/db/HLHTDB/hlhtdb.mdf',
move 'HLHTDB_log' to '/data/db/HLHTDB/hlhtdb_log.ldf'
go
测试是否还原成功
use HLHTDB
go
END
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 LeFer!
评论