通過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 "Rexen@123" -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=Rexen@123' -v /var/opt/mssql:/var/opt/mssql fzfda-mssql:1.0

5. 連接數據庫

容器起的過程中就完成了數據初始化,連接后就能看到:

我用的是Navicat工具連接數據庫,默認連接sqlserver的端口是1433,如果不是1433,就需要配置端口了,注意端口和IP是用逗號分隔的(這點比較坑):

本文來自本人的CSDN 博客 ,歡迎光臨我的博客:https://blog.csdn.net/smooth00

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 沈云,資深工程師,微軟解決方案專家 SQL On Linux 版本很快就會正式發布,本文進行了安裝和常用的操作。 ...
    ITknight閱讀 664評論 0 3
  • 想要改進這個備忘單嗎?參見[貢獻](#貢獻)部分! 目錄 [為何選擇Docker](#why-docker) [先...
    iOSDevLog閱讀 2,120評論 0 3
  • 觀其大綱 第一篇 容器技術與Docker概念1認識容器技術2 Docker基本概念3 安裝和測試Docker第二...
    周少言閱讀 5,472評論 2 87
  • 風起云涌五二零 一朝表白心膽驚 漫漫江湖誰伴游 緣分若到自相聚
    龍港娛樂傳媒閱讀 125評論 0 0
  • 數學作業 1.完成小卷。 2.本周口算寫到19頁。 語文作業 1.把作文草稿抄到正式作文本上。 2.預習課文《意大...
    天隆超市閱讀 317評論 0 0