通過(guò)Docker部署Linux版SqlServer

很多人不知道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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子铐炫,更是在濱河造成了極大的恐慌垒手,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件倒信,死亡現(xiàn)場(chǎng)離奇詭異科贬,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)鳖悠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門榜掌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人乘综,你說(shuō)我怎么就攤上這事憎账。” “怎么了卡辰?”我有些...
    開封第一講書人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵胞皱,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我九妈,道長(zhǎng)反砌,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任萌朱,我火速辦了婚禮于颖,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘嚷兔。我一直安慰自己森渐,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開白布冒晰。 她就那樣靜靜地躺著同衣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪壶运。 梳的紋絲不亂的頭發(fā)上耐齐,一...
    開封第一講書人閱讀 51,708評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音蒋情,去河邊找鬼埠况。 笑死,一個(gè)胖子當(dāng)著我的面吹牛棵癣,可吹牛的內(nèi)容都是我干的辕翰。 我是一名探鬼主播,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼狈谊,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼喜命!你這毒婦竟也來(lái)了沟沙?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤壁榕,失蹤者是張志新(化名)和其女友劉穎矛紫,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體牌里,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡颊咬,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了牡辽。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贪染。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖催享,靈堂內(nèi)的尸體忽然破棺而出杭隙,到底是詐尸還是另有隱情,我是刑警寧澤因妙,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布痰憎,位于F島的核電站,受9級(jí)特大地震影響攀涵,放射性物質(zhì)發(fā)生泄漏铣耘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一以故、第九天 我趴在偏房一處隱蔽的房頂上張望蜗细。 院中可真熱鬧,春花似錦怒详、人聲如沸炉媒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)吊骤。三九已至,卻和暖如春静尼,著一層夾襖步出監(jiān)牢的瞬間白粉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工鼠渺, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鸭巴,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓拦盹,卻偏偏與公主長(zhǎng)得像鹃祖,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子掌敬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 沈云惯豆,資深工程師池磁,微軟解決方案專家 SQL On Linux 版本很快就會(huì)正式發(fā)布奔害,本文進(jìn)行了安裝和常用的操作楷兽。 ...
    ITknight閱讀 654評(píng)論 0 3
  • 想要改進(jìn)這個(gè)備忘單嗎?參見[貢獻(xiàn)](#貢獻(xiàn))部分华临! 目錄 [為何選擇Docker](#why-docker) [先...
    iOSDevLog閱讀 2,098評(píng)論 0 3
  • 觀其大綱 第一篇 容器技術(shù)與Docker概念1認(rèn)識(shí)容器技術(shù)2 Docker基本概念3 安裝和測(cè)試Docker第二...
    周少言閱讀 5,445評(píng)論 2 87
  • 風(fēng)起云涌五二零 一朝表白心膽驚 漫漫江湖誰(shuí)伴游 緣分若到自相聚
    龍港娛樂傳媒閱讀 125評(píng)論 0 0
  • 數(shù)學(xué)作業(yè) 1.完成小卷芯杀。 2.本周口算寫到19頁(yè)。 語(yǔ)文作業(yè) 1.把作文草稿抄到正式作文本上雅潭。 2.預(yù)習(xí)課文《意大...
    天隆超市閱讀 310評(píng)論 0 0