摘要

SQL Server 2016以及SQL on Linux版本已经支持跑在Docker容器中,也展示微软拥抱开源的决心和勇气。这篇博文就是以SQL on Linux为例,看看如何将SQL Server实例部署在Docker容器中。

背景

大概在两个月之前,在SQL On Linux刚发布预览版本的时候,我写过一篇文章,讲如何将SQL Server on Linux (vNext)部署到CentOS 7.2上,详情参见:Happy Birthday to MSSQL On Linux
这篇文章则是谈谈如何将SQL on Linux实例部署在Docker容器中,包含以下几个方面内容:
几个前提
SQL on Linux Run on Docker
连接Docker容器中的SQL实例
多实例部署场景

几个前提

SQL on Linux要能够成功部署到Docker容器里,需要满足以下三个前提条件。
Docker引擎需要1.8以上版本

$ docker version
Client:Version:      1.13.0API version:  1.25Go version:   go1.7.3Git commit:   49bf474Built:        Wed Jan 18 16:20:26 2017OS/Arch:      darwin/amd64Server:Version:      1.13.0API version:  1.25 (minimum version 1.12)Go version:   go1.7.3Git commit:   49bf474Built:        Wed Jan 18 16:20:26 2017OS/Arch:      linux/amd64Experimental: true

至少4GB存储空间
至少4GB内存空间:使用以下方法修改:Docker icon on Menu Bar => Preferences => Advanced => Change the Memory to 4GB => Apply & Restart。

SQL on Linux Run on Docker

首先,我们使用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 mssql
NAME                                     DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
microsoft/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 images
REPOSITORY                     TAG                 IMAGE ID            CREATED             SIZE
microsoft/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-linux
7f275e4a31e1876e90d8ef02d321c8351ae89373d8273d75656eee7b8fecb80a
$ docker ps
CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS              PORTS                    NAMES
7f275e4a31e1        microsoft/mssql-server-linux   "/bin/sh -c /opt/m..."   10 seconds ago      Up 8 seconds        0.0.0.0:1433->1433/tcp   festive_saha

连接Docker容器中的SQL实例

SQL on Linux实例已经在Docker容器中部署完毕,接下来就是如何连接到我们的SQL Server实例,这个和我们平时使用SSMS连接常规SQL Server实例没有任何两样。但需要注意SSMS连接的Server Name应该是Docker容器母体机的IP和映射到的端口,用户名为Sa,密码是启动Docker容器时给定的密码,比如:

执行以下测试代码:

IF DB_ID('TestDb') IS NULLCREATE DATABASE TestDb;
GOUSE TestDb
GO
IF OBJECT_ID('dbo.Test', 'U') IS NOT NULLDROP TABLE dbo.Test
GOCREATE TABLE dbo.Test(
RowID INT IDENTITY(1, 1) NOT NULL PRIMARY KEY
,Name VARCHAR(20) NOT NULL
);INSERT INTO dbo.Test
SELECT '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 ps
CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS              PORTS                     NAMES
d03512ce3d70        microsoft/mssql-server-linux   "/bin/sh -c /opt/m..."   6 seconds ago       Up 4 seconds        0.0.0.0:51433->1433/tcp   competent_golick
b9418ce94a09        microsoft/mssql-server-linux   "/bin/sh -c /opt/m..."   57 seconds ago      Up 55 seconds       0.0.0.0:41433->1433/tcp   elegant_spence
7f275e4a31e1        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 d03512ce3d70
d03512ce3d70
$ docker stop b9418ce94a09
b9418ce94a09

在几秒过后,连接到多个实例,截图如下:

总结

SQL on Linux运行在Docker之上可以在秒级别新建、启动SQL Server实例,非常的方便快捷;并且还可以突破SQL on Linux在Linux系统只能够安装一个实例的限制。这是SQL Server拥抱开源的尝试,也是微软开源策略的全新尝试。

SQL on Linux Run on Docker相关推荐

  1. 迁移数据库到SQL on Linux Docker

    问题引入 前一篇文章,菜鸟找到了SQL on Linux Docker容器销毁后,容器中的数据库文件可以得以保留的方法,老鸟非常开心.所以,今天又提出了新的问题:"鸟儿,如果我想把我的数据库 ...

  2. 如何使Mac Docker支持SQL on Linux容器Volume特性

    问题引入 这天老鸟火急火燎的找到菜鸟:"鸟儿啊,按照你之前的文章SQL on Linux Run on Docker,当我销毁SQL on Linux Docker容器以后,我容器中的所有数 ...

  3. linux重启docker镜像没了,解决docker run 或者 docker restart 启动镜像就自动退出

    执行命令:docker run --name centos8 -d centos /bin/bash,通过docker ps查看正在运行中容器,找不到centos8. 通过docker ps -a查看 ...

  4. 基于事件驱动架构构建微服务第5部分:容器化(Web Api Core 和 SQL Server Linux)

    原文链接:https://logcorner.com/building-microservices-through-event-driven-architecture-part5-dockerizat ...

  5. Linux ssh/scp/docker学习

    文章目录 Linux ssh/scp/docker使用学习 1. ssh 登录 2. scp传输文件 3. docker 4. git checkout 替换指定分支的单个文件 Linux ssh/s ...

  6. linux运行dock打包的镜像,Linux部署之Docker方式部署项目

    Linux部署之Docker方式部署项目 1. 使用Docker对前端vue项目进行部署 1.1 环境准备 服务器或者虚拟机上先安装好Nginx和相关配置 docker pull nginx 拉去最新 ...

  7. linux版_巧用linux版powershell,管理linux下的docker

    owershell,docker,cli,命令,docker ps,docker image 第一章 在linux中搭建docker环境 目的: 在任意版本的linux(物理机,虚拟机,节点机)中,安 ...

  8. 巧用linux版powershell,管理linux下的docker

    owershell,docker,cli,命令,docker ps,docker image 第一章 在linux中搭建docker环境 目的: 在任意版本的linux(物理机,虚拟机,节点机)中,安 ...

  9. 使用Red Hat OS为Amazon EC2实例安装SQL Server Linux

    This article installs SQL Server on Linux on the Amazon EC2 instance with Red Hat OS prepared in the ...

最新文章

  1. One-hot encoding的不足及改进
  2. python笔记基础-Python基础教程学习笔记-1
  3. golang 编写的邮件客户端
  4. c#Struts框架理念和自制Struts框架下 复杂版
  5. 基于mybatis Interceptor的对 user_cache 表 address id_no 两个字段的加密解密;
  6. (转载)java中super的两种用法
  7. 纯文字海报如何排版更引人注目?
  8. python collection 和 heapq 模块使用说明
  9. 三江学院计算机答辩严格,三江学院论文答辩
  10. load()是python文件操作的函数_python深入(函数,文件操作)
  11. 好看的HTML登录模板
  12. 创建user01-user20 随机六位数密码 a-z A-Z 0-9
  13. ubuntu系统压力测试工具--stress
  14. luov之IT管理制度
  15. mysql 字段数量不确定_不定字段数目的数据库表设计和数据结构 | 学步园
  16. 电脑如何分盘、合盘?关于硬盘的分盘,你所不知道的那些事情
  17. ❤️微信小程序 云开发 教程合集(视频+图文)免费❤️
  18. esxi-linux-lvm磁盘扩容
  19. HDMI介绍及硬件实现原理
  20. PHP_PDO预处理

热门文章

  1. Qt Creator 插件开发(1):编译 Qt Creator
  2. JEE6 CDI 扩展实现 MVC (四) 实现多模板引擎支持,并提供扩展接口
  3. android-XML解析Dom,Sax,Pull
  4. 在ThinkPad W500 A98上升级Windows 7以及安装硬件驱动和相关程序(2/2)
  5. 下拉列表控制文本框的个数思路
  6. c语言作业 龟兔赛跑,c语言龟兔赛跑
  7. Metasploit漏洞利用基础教程要出版了
  8. iOS 11开发教程(四)iOS11模拟器介绍一
  9. Xamarin XAML语言教程模板视图TemplatedView(一)
  10. ipv6简写还原_用什么进制表示ipv6