Mac下Docker容器运行SQL Server 2017方法讲解

首先下载sql server2017的最新镜像:

为了运行,需要调整docker的运行ram大小最小为4gb:

启动一个容器(注意,命令的参数中,在linux/mac平台下是单引号,而在windows平台下是双引号):

docker run -e ‘accept_eula=y’ -e ‘mssql_sa_password=<yourstrong!passw0rd>’ -e ‘mssql_pid=developer’ -p 1433:1433 –name sql_server2017 -d microsoft/-server-linux:2017-latest

(初始密码必须为<yourstrong!passw0rd>,否则启动后失败退出容器,后面再修改密码即可)

sql server2017容器已经启动好了。

为了可以持久化数据,实际使用需要加-v参数来映射数据卷到/var/opt/mssql

修改sa用户的密码

 docker exec -it sql_server2017 /opt/mssql-tools/bin/sqlcmd -s localhost -u sa -p ‘<yourstrong!passw0rd>’ -q ‘alter login sa with password=”******”‘

如果密码过于简单会报如下错误,我们设复杂一点的即可:

连接到sql server容器

docker exec -it sql_server2017 “sh”    –> 从启动的容器信息看到,使用的shell是/bin/sh,因此需要使用”sh”

进入容器后,连接到:

/opt/mssql-tools/bin/sqlcmd -s localhost -u sa -p ‘jin*******’

登录数据库后会出现提示符:’1>’

再输入命令后,需要执行go才会执行上面输入的语句。

上面是在容器内进行的,下面回到宿主机,这里是mac进行连接,首先,需要安装homebrew:

ruby -e “$(curl -fssl https://raw.githubusercontent.com/homebrew/install/master/install)”

接着安装odbc驱动和针对sql server的sql命令行工具

brew tap microsoft/mssql-release https://github.com/microsoft/homebrew-mssql-release

brew update

accetp_eula=y brew install –no-sandbox msodbcsql mssql-tools

安装成功后,现在来连接容器的数据库,命令如下:

sqlcmd -s 127.0.0.1 -u sa -p ****    (此时,该命令是在宿主机下执行的了)

查看下数据库版本:

正常连接。现在基于python来测试下,首先需要安装针对sql server的python驱动: pip install virtualenv,然后依次执行如下命令:

注意,此时使用的是venv目录下的python:

为了测试,建立一个测试的数据库:

sqlcmd -s 127.0.0.1 -u sa -p **** -q “create database ihouse;”

创建一个表:

sqlcmd -s 127.0.0.1 -u sa -p jingtian,nuli9 -q “use ihouse; create table test(id int, name varchar(10));”

编写python测试脚本:

import pyodbc  
  
server='127.0.0.1' # localhost会连接超时,需要为ip地址  
database='ihouse'  
username='sa'  
password='*****'  
cnxn=pyodbc.connect('driver={odbc driver 13 for sql server};server='+server+';port=1433;database='+database+';uid='+username+';pwd='+password)  
cursor=cnxn.cursor()  
  
print('insert data...')  
tsql = "insert into test (id, name) values(?,?);"  
with cursor.execute(tsql, 1, 'jim'):  
    print ('insert ok.')  
      
print('read data...')  
tsql = "select * from test;"  
with cursor.execute(tsql):  
    row = cursor.fetchone()  
    while row:  
        print(str(row[0]) + " " + str(row[1]))  
        row = cursor.fetchone()  

结果:

(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐