通过Docker部署Linux版SqlServer
很多人不知道SqlServer还有Linux版的,微软官方于2016年就发布了SqlServer 2017 for Linux,使得SqlServer数据库可以运行在Linux内核的服务器上。按照微软官方的解释,SQL Server 2017 在所有支持的平台(包括 Linux)上具有相同的基础数据库引擎。 因此,在 Linux 上,许多现有功能运行方式相同。既然有了Linux版,那么就应该在Docker Hub上能找到对应的Docker镜像:https://hub.docker.com/r/microsoft/mssql-server-linux/
要使用容器,我们先需要安装一下基础环境:
1. 安装docker要使用centos 7以上版本,使用centos 6及以下版本会出现各种问题
2. docker CE安装过程
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo #建立仓库
$ sudo yum install docker-ce #安装docker
$ sudo systemctl start docker #开启docker
3. dockerfile准备
开始构建一个基于项目应用的SqlServer容器,首先我们选定基础镜像:microsoft/mssql-server-linux:2017-latest,然后我们需要有个初始化数据脚本(开发人员会提供),往生成的容器中导入我们的项目数据。这个脚本的开头部分大概是这样:
USE [master] GO /****** Object: Database [LayIM] Script Date: 2017/2/24 9:39:19 ******/ CREATE DATABASE [LayIM] CONTAINMENT = NONE ON PRIMARY ( NAME = N'LayIM', FILENAME = N'/var/opt/mssql/data/LayIM.mdf' , SIZE = 5120KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ) LOG ON ( NAME = N'LayIM_log', FILENAME = N'/var/opt/mssql/data/LayIM_log.ldf' , SIZE = 1280KB , MAXSIZE = 2048GB , FILEGROWTH = 10%) GO ALTER DATABASE [LayIM] SET COMPATIBILITY_LEVEL = 100 GO IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled')) begin EXEC [LayIM].[dbo].[sp_fulltext_database] @action = 'enable' end GO --修改现有databases的排序规则 ALTER DATABASE [LayIM] COLLATE Chinese_PRC_CI_AS GO --以下省略SQL脚本
我们可以看出以上脚本,和windows下最大的不同是,数据文件路径FILENAME配置成Linux下的路径了,另外修改了数据库的排序规则,用简体中文的规则(对于Linux下来说,编码规则要特别强调,否则就容易出现中文乱码),为了避免在Linux查看SQL脚本出现中文乱码,建议sql脚本也用编辑器保存为UTF-8格式(windows下生成的脚本默认是ANSI/ASCII格式)。
其次,我们需要把启动SqlServer和初始化导入数据的批处理写到一个脚本中,如setup.sh:
#!/bin/bash set -e #设置语言为简体中文 /opt/mssql/bin/mssql-conf set language.lcid 2052 echo '1.启动mssql....' #启动mssql /opt/mssql/bin/sqlservr sleep 3 ps -ef|grep sqlservr echo '2.开始导入数据....' #导入数据 if [ -d /var/opt/mssql/data/LayIM.mdf ] ; then echo '3.数据库已存在,中止导入....' else /opt/mssql-tools/bin/sqlcmd -S 127.0.0.1 -U "sa" -P "yourStrong(!)Password" -d "Database" -i "/home/mssql/schema.sql" -o /home/mssql/initsql.log echo '3.导入数据完毕....' fi #sleep 3 echo 'mssql容器启动完毕,且数据导入成功' tail -f /dev/null
在这个脚本中,我们先设置了SqlServer的中文编码ID为2052(简体中文的ID号),然后启动sqlserver,导入sql脚本,最后通过 tail -f /dev/null来避免容器关闭前台(这是容器的机制,前台一关闭容器就会stop)。
有了以上两个脚本文件,我们就可以编制Dockerfile,将文件写到镜像中:
FROM microsoft/mssql-server-linux:2017-latest #将所需文件放到容器中 COPY setup.sh /home/mssql/setup.sh COPY LayIM.sql /home/mssql/schema.sql RUN chmod +777 /home/mssql/setup.sh #设置容器启动时执行的命令 CMD ["sh", "/home/mssql/setup.sh"]
4. Build镜像和生成容器
最后我们就可以Build镜像(进入到Dockerfile目录下)
docker build -t fzfda-mssql:1.0 .
生成镜像后,就直接run(需要注意的是应该先创建卷目录mkdir -p /var/opt/mssql并赋写权限,然后是ACCEPT_EULA授权为Y,sa密码要以和以上脚本保持统一,数据库端口配置正确):
docker run --name fzfda-mssql -d --restart=unless-stopped -p 1433:1433 -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=yourStrong(!)Password' -v /var/opt/mssql:/var/opt/mssql fzfda-mssql:1.0
5. 连接数据库
容器起的过程中就完成了数据初始化,连接后就能看到:
我用的是Navicat工具连接数据库,默认连接sqlserver的端口是1433,如果不是1433,就需要配置端口了,注意端口和IP是用逗号分隔的(这点比较坑):
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
如何在Docker容器中使用巨页(大页)
在linux环境下常规页面大小是4K,常规巨页大小有两种一种是2MB,一种是1GB。巨页的好处是:减少硬件tlb miss,如此在连续内存访问场景下可以得到较大的性能提升。一般在数据库如:postgreSQL,mySql等数据库都有使用巨页时的优化措施。本文将详细介绍如何在容器环境下使用巨页,以及如何对容器使用的巨页进行限制。 当前centos 7.5为止,透明巨页不支持1GB,只支持4k—>2MB,4MB 第一章 巨页在linux上的配置 在内核中配置CONFIG_HUGETLB_PAGE和CONFIG_HUGETLBFS可以启动巨页。内核启动后通过如下命令可以挂在hugepagefs: mount -t hugetlbfs nodev /dev/hugepages 我们在centos7.4上,内核配置和上述mount hugetlbfs的过程在系统已经默认启动了。同时系统还启动了透明巨页thp,它简化了我们使用巨页的过程。同时还在系统中配置了扫描和整理巨页的内核进程khugepaged,此进程周期性的将页面进行扫描和整理。 cat /sys/kernel/mm/transpa...
- 下一篇
阿里云K8S服务-数据盘扩容方案
介绍 目前容器服务Kubernetes集群在创建的时候,可以让客户选择是否挂载Worker节点的数据盘,并配置其容量;这里的数据盘会保存docker容器、镜像、kubelet等相关数据; 这里的数据盘与客户应用使用的云盘区别: 这里的数据盘:是用来保存docker、kubelet等容器系统服务数据的; 应用挂载云盘:是您的应用来保存数据的,可以通过pv、pvc挂载; 云盘扩容方案:https://yq.aliyun.com/articles/629008 如上图,创建集群的时候为worker节点添加数据盘,会默认挂载在worker的/dev/vdb设备; # ls /dev | grep vdb vdb vdb1 # df -h | grep vdb /dev/vdb1 58G 1.1G 54G 2% /var/
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8编译安装MySQL8.0.19
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7,CentOS8安装Elasticsearch6.8.6