SQL on Linux Run on Docker

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
简介: # 摘要 SQL Server 2016以及SQL on Linux版本已经支持跑在Docker容器中,也展示微软拥抱开源的决心和勇气。这篇博文就是以SQL on Linux为例,看看如何将SQL Server实例部署在Docker容器中。 # 背景 大概在两个月之前,在SQL On Linux刚发布预览版本的时候,我写过一篇文章,讲如何将SQL Server on Linux (vNext

摘要

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.0
 API version:  1.25
 Go version:   go1.7.3
 Git commit:   49bf474
 Built:        Wed Jan 18 16:20:26 2017
 OS/Arch:      darwin/amd64

Server:
 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。
01.png

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容器时给定的密码,比如:
02.png

执行以下测试代码:

IF DB_ID('TestDb') IS NULL
    CREATE DATABASE TestDb;
GO

USE TestDb
GO
IF OBJECT_ID('dbo.Test', 'U') IS NOT NULL
    DROP TABLE dbo.Test
GO

CREATE 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;

执行情况如下:
03.png

多实例部署

由于直接将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

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

总结

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

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
1月前
|
SQL 数据库
LangChain-09 Query SQL DB With RUN GPT 查询数据库 并 执行SQL 返回结果
LangChain-09 Query SQL DB With RUN GPT 查询数据库 并 执行SQL 返回结果
33 2
|
20天前
|
消息中间件 Linux RocketMQ
在Red Hat Enterprise Linux 9上使用Docker快速安装并部署
通过以上步骤,你可以在Red Hat Enterprise Linux 9上使用Docker快速安装并部署RocketMQ。这种方法不仅简化了安装过程,还提供了一个灵活的环境来管理和扩展消息队列系统。RocketMQ作为一款高性能的分布式消息系统,通过Docker可以实现快速部署和高效管理。
48 2
|
21天前
|
消息中间件 Linux RocketMQ
在Red Hat Enterprise Linux 9上使用Docker快速安装并部署
通过以上步骤,你可以在Red Hat Enterprise Linux 9上使用Docker快速安装并部署RocketMQ。这种方法不仅简化了安装过程,还提供了一个灵活的环境来管理和扩展消息队列系统。RocketMQ作为一款高性能的分布式消息系统,通过Docker可以实现快速部署和高效管理。
30 3
|
1月前
|
Linux Docker 容器
Centos安装docker(linux安装docker)——超详细小白可操作手把手教程,包好用!!!
本篇博客重在讲解Centos安装docker,经博主多次在不同服务器上测试,极其的稳定,尤其是阿里的服务器,一路复制命令畅通无阻。
583 4
Centos安装docker(linux安装docker)——超详细小白可操作手把手教程,包好用!!!
|
24天前
|
关系型数据库 MySQL Linux
基于阿里云服务器Linux系统安装Docker完整图文教程(附部署开源项目)
基于阿里云服务器Linux系统安装Docker完整图文教程(附部署开源项目)
199 3
|
24天前
|
存储 关系型数据库 MySQL
|
2月前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
2月前
|
Linux Docker 容器
linux之docker命令
linux之docker命令
|
1月前
|
Linux 开发工具 Docker
各个类linux服务器安装docker教程
各个类linux服务器安装docker教程
55 0
|
1月前
|
Shell 应用服务中间件 nginx
docker学习--最详细的docker run 各子命令解释与应用
`docker run` 是 Docker 中用于启动容器的基本命令。常用子命令包括 `-i`(交互模式)、`-t`(分配终端)、`-d`(后台运行)、`-p`(端口映射)、`--name`(指定容器名)。例如,`docker run -it nginx:1.20 /bin/bash` 可以创建并进入交互式容器。使用 `-d` 可在后台运行容器,`-p` 可将容器端口映射到主机端口,`--name` 则用于自定义容器名称以便管理。
169 0