很多人不知道SqlServer還有Linux版的蹋嵌,微軟官方于2016年就發(fā)布了SqlServer 2017 for Linux户辞,使得SqlServer數(shù)據(jù)庫(kù)可以運(yùn)行在Linux內(nèi)核的服務(wù)器上。按照微軟官方的解釋,SQL Server 2017 在所有支持的平臺(tái)(包括 Linux)上具有相同的基礎(chǔ)數(shù)據(jù)庫(kù)引擎。?因此桑驱,在 Linux 上竭恬,許多現(xiàn)有功能運(yùn)行方式相同。既然有了Linux版熬的,那么就應(yīng)該在Docker Hub上能找到對(duì)應(yīng)的Docker鏡像:https://hub.docker.com/r/microsoft/mssql-server-linux/
? ? ? ?要使用容器萍聊,我們先需要安裝一下基礎(chǔ)環(huán)境:
1. 安裝docker要使用centos 7以上版本,使用centos 6及以下版本會(huì)出現(xiàn)各種問(wèn)題
2. docker CE安裝過(guò)程
$ 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 #建立倉(cāng)庫(kù)
$ sudo yum install docker-ce #安裝docker
$ sudo systemctl start docker #開啟docker
?3. dockerfile準(zhǔn)備
? ? ?開始構(gòu)建一個(gè)基于項(xiàng)目應(yīng)用的SqlServer容器悦析,首先我們選定基礎(chǔ)鏡像:microsoft/mssql-server-linux:2017-latest寿桨,然后我們需要有個(gè)初始化數(shù)據(jù)腳本(開發(fā)人員會(huì)提供),往生成的容器中導(dǎo)入我們的項(xiàng)目數(shù)據(jù)强戴。這個(gè)腳本的開頭部分大概是這樣:
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
--修改現(xiàn)有databases的排序規(guī)則
ALTER DATABASE [LayIM]
COLLATE Chinese_PRC_CI_AS
GO
--以下省略SQL腳本
我們可以看出以上腳本亭螟,和windows下最大的不同是,數(shù)據(jù)文件路徑FILENAME配置成Linux下的路徑了骑歹,另外修改了數(shù)據(jù)庫(kù)的排序規(guī)則预烙,用簡(jiǎn)體中文的規(guī)則(對(duì)于Linux下來(lái)說(shuō),編碼規(guī)則要特別強(qiáng)調(diào)道媚,否則就容易出現(xiàn)中文亂碼)扁掸,為了避免在Linux查看SQL腳本出現(xiàn)中文亂碼,建議sql腳本也用編輯器保存為UTF-8格式(windows下生成的腳本默認(rèn)是ANSI/ASCII格式)最域。
? ? ? ?其次谴分,我們需要把啟動(dòng)SqlServer和初始化導(dǎo)入數(shù)據(jù)的批處理寫到一個(gè)腳本中,如setup.sh:
#!/bin/bash
set -e
#設(shè)置語(yǔ)言為簡(jiǎn)體中文
/opt/mssql/bin/mssql-conf set language.lcid 2052
echo '1.啟動(dòng)mssql....'
#啟動(dòng)mssql
/opt/mssql/bin/sqlservr
sleep 3
ps -ef|grep sqlservr
echo '2.開始導(dǎo)入數(shù)據(jù)....'
#導(dǎo)入數(shù)據(jù)
if [ -d /var/opt/mssql/data/LayIM.mdf ] ; then
? echo '3.數(shù)據(jù)庫(kù)已存在镀脂,中止導(dǎo)入....'
else
? /opt/mssql-tools/bin/sqlcmd -S 127.0.0.1 -U "sa" -P "Rexen@123" -d "Database" -i "/home/mssql/schema.sql" -o /home/mssql/initsql.log
? echo '3.導(dǎo)入數(shù)據(jù)完畢....'
fi
#sleep 3
echo 'mssql容器啟動(dòng)完畢,且數(shù)據(jù)導(dǎo)入成功'
tail -f /dev/null
在這個(gè)腳本中牺蹄,我們先設(shè)置了SqlServer的中文編碼ID為2052(簡(jiǎn)體中文的ID號(hào)),然后啟動(dòng)sqlserver薄翅,導(dǎo)入sql腳本沙兰,最后通過(guò) tail -f /dev/null來(lái)避免容器關(guān)閉前臺(tái)(這是容器的機(jī)制,前臺(tái)一關(guān)閉容器就會(huì)stop)翘魄。
有了以上兩個(gè)腳本文件鼎天,我們就可以編制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
#設(shè)置容器啟動(dòng)時(shí)執(zhí)行的命令
CMD ["sh", "/home/mssql/setup.sh"]
4. Build鏡像和生成容器
最后我們就可以Build鏡像(進(jìn)入到Dockerfile目錄下)
docker build -t fzfda-mssql:1.0 .
生成鏡像后暑竟,就直接run(需要注意的是應(yīng)該先創(chuàng)建卷目錄mkdir -p /var/opt/mssql并賦寫權(quán)限斋射,然后是ACCEPT_EULA授權(quán)為Y,sa密碼要以和以上腳本保持統(tǒng)一光羞,數(shù)據(jù)庫(kù)端口配置正確):
docker run --name fzfda-mssql -d --restart=unless-stopped -p 1433:1433 -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=Rexen@123' -v /var/opt/mssql:/var/opt/mssql fzfda-mssql:1.0
5. 連接數(shù)據(jù)庫(kù)
容器起的過(guò)程中就完成了數(shù)據(jù)初始化绩鸣,連接后就能看到:
我用的是Navicat工具連接數(shù)據(jù)庫(kù)怀大,默認(rèn)連接sqlserver的端口是1433纱兑,如果不是1433,就需要配置端口了化借,注意端口和IP是用逗號(hào)分隔的(這點(diǎn)比較坑):
本文來(lái)自本人的CSDN 博客 潜慎,歡迎光臨我的博客:https://blog.csdn.net/smooth00