SQLServer IN Windows Container初探

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介: # 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
目录
相关文章
|
SQL Linux Go
从 Windows 中恢复 SQLServer On Linux|学习笔记
快速学习从 Windows 中恢复 SQLServer On Linux
137 0
从 Windows 中恢复 SQLServer On Linux|学习笔记
|
SQL 安全 Java
mybatis学习(10): sql server身份验证和windows身份验证
mybatis学习(10): sql server身份验证和windows身份验证
408 0
|
Windows 容器
成功解决Windows无法启动服务NVIDIA Dispaly Container LS服务(位于本地计算机上),错误2:系统找不到指定的文件
成功解决Windows无法启动服务NVIDIA Dispaly Container LS服务(位于本地计算机上),错误2:系统找不到指定的文件
成功解决Windows无法启动服务NVIDIA Dispaly Container LS服务(位于本地计算机上),错误2:系统找不到指定的文件
|
数据库 Windows
各版本windows操作系统获取地址,sqlserver全版本数据库工具下载网站分享
各版本windows操作系统获取地址,sqlserver全版本数据库工具下载网站分享
122 0
各版本windows操作系统获取地址,sqlserver全版本数据库工具下载网站分享
|
Windows 容器
成功解决Windows无法启动服务NVIDIA Dispaly Container LS服务(位于本地计算机上),错误2:系统找不到指定的文件
成功解决Windows无法启动服务NVIDIA Dispaly Container LS服务(位于本地计算机上),错误2:系统找不到指定的文件
成功解决Windows无法启动服务NVIDIA Dispaly Container LS服务(位于本地计算机上),错误2:系统找不到指定的文件
|
SQL 网络协议 网络安全
SQLServer数据库windows server2019服务器安装
SQLServer、WindowsServer2019
3520 0
|
Linux 容器 Perl
阿里云容器服务ACK发布Windows Container支持,让Windows应用快速上云
阿里云容器服务已正式发布Windows Container支持,用户可通过控制台或Open API创建Windows Kubernetes集群并部署Windows容器,目前已开放新加坡、吉隆坡等区域,近期计划在所有托管版中全域支持。
3766 0
|
SQL Windows
查看Windows服务器安装了那些SQL Server组件
原文:查看Windows服务器安装了那些SQL Server组件   如何查看Windows服务器安装了那些SQL Server组件呢? 最近就遇到这样一个需求,需要知道Windows服务器是否安装了Replication组件,那么有几种方法查看Windows服务器安装了哪些SQL Server组件呢?下面总结一下这方面的方法,希望对遇到这样问题的人有所帮助!     1:通过SQL Server Features Discovery Report查看。
984 0