SQL on Linux Run on Docker
摘要
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相关推荐
- 迁移数据库到SQL on Linux Docker
问题引入 前一篇文章,菜鸟找到了SQL on Linux Docker容器销毁后,容器中的数据库文件可以得以保留的方法,老鸟非常开心.所以,今天又提出了新的问题:"鸟儿,如果我想把我的数据库 ...
- 如何使Mac Docker支持SQL on Linux容器Volume特性
问题引入 这天老鸟火急火燎的找到菜鸟:"鸟儿啊,按照你之前的文章SQL on Linux Run on Docker,当我销毁SQL on Linux Docker容器以后,我容器中的所有数 ...
- linux重启docker镜像没了,解决docker run 或者 docker restart 启动镜像就自动退出
执行命令:docker run --name centos8 -d centos /bin/bash,通过docker ps查看正在运行中容器,找不到centos8. 通过docker ps -a查看 ...
- 基于事件驱动架构构建微服务第5部分:容器化(Web Api Core 和 SQL Server Linux)
原文链接:https://logcorner.com/building-microservices-through-event-driven-architecture-part5-dockerizat ...
- Linux ssh/scp/docker学习
文章目录 Linux ssh/scp/docker使用学习 1. ssh 登录 2. scp传输文件 3. docker 4. git checkout 替换指定分支的单个文件 Linux ssh/s ...
- linux运行dock打包的镜像,Linux部署之Docker方式部署项目
Linux部署之Docker方式部署项目 1. 使用Docker对前端vue项目进行部署 1.1 环境准备 服务器或者虚拟机上先安装好Nginx和相关配置 docker pull nginx 拉去最新 ...
- linux版_巧用linux版powershell,管理linux下的docker
owershell,docker,cli,命令,docker ps,docker image 第一章 在linux中搭建docker环境 目的: 在任意版本的linux(物理机,虚拟机,节点机)中,安 ...
- 巧用linux版powershell,管理linux下的docker
owershell,docker,cli,命令,docker ps,docker image 第一章 在linux中搭建docker环境 目的: 在任意版本的linux(物理机,虚拟机,节点机)中,安 ...
- 使用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 ...
最新文章
- One-hot encoding的不足及改进
- python笔记基础-Python基础教程学习笔记-1
- golang 编写的邮件客户端
- c#Struts框架理念和自制Struts框架下 复杂版
- 基于mybatis Interceptor的对 user_cache 表 address id_no 两个字段的加密解密;
- (转载)java中super的两种用法
- 纯文字海报如何排版更引人注目?
- python collection 和 heapq 模块使用说明
- 三江学院计算机答辩严格,三江学院论文答辩
- load()是python文件操作的函数_python深入(函数,文件操作)
- 好看的HTML登录模板
- 创建user01-user20 随机六位数密码 a-z A-Z 0-9
- ubuntu系统压力测试工具--stress
- luov之IT管理制度
- mysql 字段数量不确定_不定字段数目的数据库表设计和数据结构 | 学步园
- 电脑如何分盘、合盘?关于硬盘的分盘,你所不知道的那些事情
- ❤️微信小程序 云开发 教程合集(视频+图文)免费❤️
- esxi-linux-lvm磁盘扩容
- HDMI介绍及硬件实现原理
- PHP_PDO预处理
热门文章
- Qt Creator 插件开发(1):编译 Qt Creator
- JEE6 CDI 扩展实现 MVC (四) 实现多模板引擎支持,并提供扩展接口
- android-XML解析Dom,Sax,Pull
- 在ThinkPad W500 A98上升级Windows 7以及安装硬件驱动和相关程序(2/2)
- 下拉列表控制文本框的个数思路
- c语言作业 龟兔赛跑,c语言龟兔赛跑
- Metasploit漏洞利用基础教程要出版了
- iOS 11开发教程(四)iOS11模拟器介绍一
- Xamarin XAML语言教程模板视图TemplatedView(一)
- ipv6简写还原_用什么进制表示ipv6