本文共 4415 字,大约阅读时间需要 14 分钟。
SQL Server 2016以及SQL on Linux版本已经支持跑在Docker容器中,也展示微软拥抱开源的决心和勇气。这篇博文就是以SQL on Linux为例,看看如何将SQL Server实例部署在Docker容器中。
大概在两个月之前,在SQL On Linux刚发布预览版本的时候,我写过一篇文章,讲如何将SQL Server on Linux (vNext)部署到CentOS 7.2上,详情参见:
这篇文章则是谈谈如何将SQL on Linux实例部署在Docker容器中,包含以下几个方面内容:几个前提SQL on Linux Run on Docker连接Docker容器中的SQL实例多实例部署场景SQL on Linux要能够成功部署到Docker容器里,需要满足以下三个前提条件。
Docker引擎需要1.8以上版本$ docker versionClient: Version: 1.13.0 API version: 1.25 Go version: go1.7.3 Git commit: 49bf474 Built: Wed Jan 18 16:20:26 2017 OS/Arch: darwin/amd64Server: Version: 1.13.0 API version: 1.25 (minimum version 1.12) Go version: go1.7.3 Git commit: 49bf474 Built: Wed Jan 18 16:20:26 2017 OS/Arch: linux/amd64 Experimental: true
至少4GB存储空间
至少4GB内存空间:使用以下方法修改:Docker icon on Menu Bar => Preferences => Advanced => Change the Memory to 4GB => Apply & Restart。首先,我们使用docker search mssql查找Docker Hub上的mssql-server-linux镜像模板;
接着,我们使用docker pull把这个microsoft/mssql-server-linux镜像拉到本地;然后,我们使用docker run命令启动sql on linux的实例,这个过程(相当于SQL on Linux的安装)大概不到2秒钟就完成了。这里需要注意几个参数:终端用户的许可协议Y;SA的密码;docker容器母体机映射的端口1433;SQL on Linux在docker容器中的端口1433;docker镜像的名字microsoft/mssql-server-linux。最后,我们使用docker ps查看这个Docker容器进程信息。$ docker search mssqlNAME DESCRIPTION STARS OFFICIAL AUTOMATEDmicrosoft/mssql-server-linux Official images for Microsoft SQL Server o... 148 rsmoorthy/mssql MSSQL Database (version SQL2000) 6 [OK]ppoffice/mssql-odbc Dockerfile of Ubuntu Trusty with Microsoft... 3 [OK]swapnillinux/mssql Microsoft SQL Server (mssql) vNext CTP 1.1... 2 [OK]...$ docker pull microsoft/mssql-server-linux$ docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEmicrosoft/mssql-server-linux latest 54df779d52d7 2 weeks ago 1.05 GB$ docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=SQLOnLinux@123' -p 1433:1433 -d microsoft/mssql-server-linux7f275e4a31e1876e90d8ef02d321c8351ae89373d8273d75656eee7b8fecb80a$ docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES7f275e4a31e1 microsoft/mssql-server-linux "/bin/sh -c /opt/m..." 10 seconds ago Up 8 seconds 0.0.0.0:1433->1433/tcp festive_saha
SQL on Linux实例已经在Docker容器中部署完毕,接下来就是如何连接到我们的SQL Server实例,这个和我们平时使用SSMS连接常规SQL Server实例没有任何两样。但需要注意SSMS连接的Server Name应该是Docker容器母体机的IP和映射到的端口,用户名为Sa,密码是启动Docker容器时给定的密码,比如:
执行以下测试代码:
IF DB_ID('TestDb') IS NULL CREATE DATABASE TestDb;GOUSE TestDbGOIF OBJECT_ID('dbo.Test', 'U') IS NOT NULL DROP TABLE dbo.TestGOCREATE TABLE dbo.Test(RowID INT IDENTITY(1, 1) NOT NULL PRIMARY KEY,Name VARCHAR(20) NOT NULL);INSERT INTO dbo.TestSELECT 'A' UNION ALL SELECT 'B';SELECT * FROM dbo.Test;
执行情况如下:
由于直接将SQL on Linux部署在Linux系统平台,SQL Server只支持一个系统部署一个SQL on Linux实例。那么,如何将多实例的SQL on Linux部署在一个系统里面呢?那么,就是要借助于我们的Docker了,我们只需要在Docker母体机上多起几个SQL Server模板的Docker容器,映射到母体机不同的端口号上即可。比如,我这里再部署两个SQL on Linux实例,分别映射到41433和51433端口上。
$ docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=SQLOnLinux@123' -p 41433:1433 -d microsoft/mssql-server-linux$ docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=SQLOnLinux@123' -p 51433:1433 -d microsoft/mssql-server-linux$ docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESd03512ce3d70 microsoft/mssql-server-linux "/bin/sh -c /opt/m..." 6 seconds ago Up 4 seconds 0.0.0.0:51433->1433/tcp competent_golickb9418ce94a09 microsoft/mssql-server-linux "/bin/sh -c /opt/m..." 57 seconds ago Up 55 seconds 0.0.0.0:41433->1433/tcp elegant_spence7f275e4a31e1 microsoft/mssql-server-linux "/bin/sh -c /opt/m..." 6 minutes ago Up 6 minutes 0.0.0.0:1433->1433/tcp festive_saha$ docker stop d03512ce3d70d03512ce3d70$ docker stop b9418ce94a09b9418ce94a09
在几秒过后,连接到多个实例,截图如下:
SQL on Linux运行在Docker之上可以在秒级别新建、启动SQL Server实例,非常的方便快捷;并且还可以突破SQL on Linux在Linux系统只能够安装一个实例的限制。这是SQL Server拥抱开源的尝试,也是微软开源策略的全新尝试。
转载地址:http://lchax.baihongyu.com/