SQLServer IN Windows Container初探

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
全局流量管理 GTM,标准版 1个月
简介: # SQLServer IN Windows Container初探 ## 背景 微软早在14年就宣布与Docker合作把容器技术搬到Windows上,终于在去年9月Windows Server 2016 中落地了这一承诺,推出了能与Docker相容的Container技术. 关于Windows Container具体也有2种类型[Windows Containers]

SQLServer IN Windows Container初探

背景

微软早在14年就宣布与Docker合作把容器技术搬到Windows上,终于在去年9月Windows Server 2016
中落地了这一承诺,推出了能与Docker相容的Container技术.

关于Windows Container具体也有2种类型Windows Containers

Windows Server Containers – provide application isolation through process and namespace isolation technology. A Windows Server container shares a kernel with the container host and all containers running on the host.

Hyper-V Containers – expand on the isolation provided by Windows Server Containers by running each container in a highly optimized virtual machine. In this configuration the kernel of the container host is not shared with the Hyper-V Containers.

简单理解Server Containers更像是Linux上的Docker容器-共享kernel,而Hyper-V Containers则是有自己独立的kernel,其它关于隔离性、安全性等区别也基于此扩展开。

后续的实验部分我们都是在阿里云ECS上使用Windows Server Containers做测试

--ECS OS Versin
Windows Server 2016 Datacenter <X64>

--SQLServer Versin    
Microsoft SQL Server vNext (CTP1.4) - 14.0.405.198 (X64) 

Docker

--可用的providers    
get-packageprovider
Install-Module -Name DockerMsftProvider -Repository PSGallery -Force

1.png

--安装Docker
Install-Package -Name docker -ProviderName DockerMsftProvider -Verbose

3.png


--重启生效
Restart-Computer -Force

--利用Windows 2016的OneGet(PackageManagement)找到最后我们需要的Docker
--前两个步骤可以看出OneGet实际更像是一个管理包管理的工具

--已安装的包
get-package

4.png

这里对比Linux Docker有不同,Linux Docker中base image可以自己做但Windows上目前只能从官方获取


--base image
microsoft/windowsservercore
microsoft/nanoserver

more microsoft image

SQLServer

microsoft/mssql-server-windows

--拉取镜像
docker pull microsoft/mssql-server-windows

6.png

这个过程需要一些时间主要是镜像源在国外,所以测试中我使用的是香港的ECS尽量快些

7.png

如果想自己构建安装参考 mssql-server-windows/dockerfile 从这里申请下载SQLServer安装 SQL Server vNext Community Technology Preview


#启动SQLServer
docker run -d -p 1433:1433 -e sa_password=*** -e ACCEPT_EULA=Y microsoft/mssql-server-windows

#容器网络配置
GET-VMSwitch

GET-NetNat

Get-ContainerNetwork

10.png

测试中使用的是NAT模式,其它网络模式参考 Windows Container Networking

15.png

容器内部访问


#Windows 账号认证登录
docker exec -it <DOCKER_CONTAINER_ID> sqlcmd

#SQL 账号认证登录
docker exec -it <DOCKER_CONTAINER_ID> sqlcmd -S. -Usa

8.png

容器外部-宿主机访问

宿主机通过 SQL Server Management Studio (SSMS)访问,这一客户端程序在2016后已经作为单独的组件提供,对应安装包已经不再集成 NEW SSMS



#获取到的信息包括刚才的密码,需要注意
docker inspect 86bb05abfd3d28187742ebb60b2a6fefb80596644b1469c94099ada408217602

#根据template只解析容器的私网ip
docker inspect -f '{{ .NetworkSettings.Networks.nat.IPAddress }}' 86bb05abfd3d28187742ebb60b2a6fefb80596644b1469c94099ada408217602

9.png

容器外部-跨机访问

#链接容器宿主机的外网IP

12.png

从SQLServer上也可以明显的看出几种访问方式不同

14.png

session51是容器内Windows认证访问,client address解析为local machine

session52、53是容器内SQL认证访问,client address解析为容器的私网IP

session54是 容器外部-跨机访问,client address解析为来源公网IP

session55是 容器外部-宿主机访问,client address解析为宿主机的虚网卡地址,对每个容器来说相当于一个vSwitch,容器的vNIC都会链接到这个Hyper-V Virtual Switch

注意:跨机访问时保证windows防火墙不要block链接,阿里云安全组规则也要设置正确,本例是对特定IP做了授权
13.png

问题

  • 对于Container隔离性的选择

    从安全上讲hyper-v container更合适公有云;Server Container 更适合私有云内部使用,适合可信多租户、应用间彼此相互信任、应用在容器中不违反隔离边界,这里可以分解为2点:

    • 应用安全性
    • 隔离有效性
  • 业内实际案例

    Azure自然提供了对应的公有云服务且是基于hyper-v container的,对于业务场景来说目前只看到携程有实际案例Windows Container在携程的应用

  • SQLServer在Container中的表现能否满足用户需求

    这个在后续会给出一些测试

  • Licence问题

    在Windows Container中提供SQLServer服务具体的Licence计费方式还不清晰

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
7月前
|
SQL 数据管理 关系型数据库
如何在 Windows 上安装 SQL Server,保姆级教程来了!
在Windows上安装SQL Server的详细步骤包括:从官方下载安装程序(如Developer版),选择自定义安装,指定安装位置(非C盘),接受许可条款,选中Microsoft更新,忽略警告,取消“适用于SQL Server的Azure”选项,仅勾选必要功能(不包括Analysis Services)并更改实例目录至非C盘,选择默认实例和Windows身份验证模式,添加当前用户,最后点击安装并等待完成。安装成功后关闭窗口。后续文章将介绍SSMS的安装。
QGS
|
SQL 监控 数据库
(Centos7-x86)zabix5.0-0 —agent2监控 SQL server数据库(Windows)
记(Centos7-x86)zabix5.0-0 —agent2监控 SQL server数据库(Windows)
QGS
509 0
(Centos7-x86)zabix5.0-0 —agent2监控 SQL server数据库(Windows)
|
SQL 安全 数据库
SQL Server 2005 Windows验证如何改为混合模式验证
SQL Server 2005 Windows验证如何改为混合模式验证
292 0
|
SQL Linux Go
从 Windows 中恢复 SQLServer On Linux|学习笔记
快速学习从 Windows 中恢复 SQLServer On Linux
180 0
从 Windows 中恢复 SQLServer On Linux|学习笔记
|
Windows 容器
成功解决Windows无法启动服务NVIDIA Dispaly Container LS服务(位于本地计算机上),错误2:系统找不到指定的文件
成功解决Windows无法启动服务NVIDIA Dispaly Container LS服务(位于本地计算机上),错误2:系统找不到指定的文件
成功解决Windows无法启动服务NVIDIA Dispaly Container LS服务(位于本地计算机上),错误2:系统找不到指定的文件
|
SQL 安全 Java
mybatis学习(10): sql server身份验证和windows身份验证
mybatis学习(10): sql server身份验证和windows身份验证
498 0
|
数据库 Windows
各版本windows操作系统获取地址,sqlserver全版本数据库工具下载网站分享
各版本windows操作系统获取地址,sqlserver全版本数据库工具下载网站分享
149 0
各版本windows操作系统获取地址,sqlserver全版本数据库工具下载网站分享
|
9天前
|
网络安全 Windows
Windows server 2012R2系统安装远程桌面服务后无法多用户同时登录是什么原因?
【11月更文挑战第15天】本文介绍了在Windows Server 2012 R2中遇到的多用户无法同时登录远程桌面的问题及其解决方法,包括许可模式限制、组策略配置问题、远程桌面服务配置错误以及网络和防火墙问题四个方面的原因分析及对应的解决方案。
|
14天前
|
监控 安全 网络安全
Windows Server管理:配置与管理技巧
Windows Server管理:配置与管理技巧
48 3