Docker 部署MSSQL(SQL Server)

在本快速入門教程中嘁信,你使用 Docker 請(qǐng)求和運(yùn)行 SQL Server 2017 容器映像 mssql server linux李根。 然后使用 sqlcmd 進(jìn)行連接,以便創(chuàng)建第一個(gè)數(shù)據(jù)庫(kù)并運(yùn)行查詢。
此映像包含在 Linux(基于 Ubuntu 16.04)上運(yùn)行的 SQL Server。 它可與適用于 Linux 的 Docker 引擎 1.8 以上版本或適用于 Mac/Windows 的 Docker 配合使用臊旭。 本快速入門專門介紹了如何在linux映像上使用 SQL Server。 雖然未介紹 Windows 映像箩退,但可在 mssql-server-windows-developer Docker 中心頁上找到關(guān)于它的詳細(xì)信息。

先決條件

  • 適用于支持的任一 Linux 分發(fā)版的 Docker 引擎 1.8 以上版本佳谦,或適用于 Mac/Windows 的 Docker戴涝。 有關(guān)詳細(xì)信息,請(qǐng)參閱 Install Docker(安裝 Docker)钻蔑。
  • Docker overlay2存儲(chǔ)驅(qū)動(dòng)程序啥刻。 這是大多數(shù)用戶的默認(rèn)設(shè)置。 如果發(fā)現(xiàn)你未使用此存儲(chǔ)提供程序并且需要進(jìn)行更改, 請(qǐng)參閱docker 文檔中有關(guān)配置 overlay2的說明和警告咪笑。
  • 最小 2 GB 的磁盤空間可帽。
  • 最小 2 GB RAM。
  • Linux 上的 SQL Server 的系統(tǒng)要求窗怒。

請(qǐng)求并運(yùn)行容器映像

在開始以下步驟之前, 請(qǐng)確保已在本文頂部選擇了首選 shell (bash映跟、PowerShell 或 cmd)。

  1. 從 Microsoft 容器注冊(cè)表拉取 SQL Server 2017 Linux 容器映像扬虚。
sudo docker pull mcr.microsoft.com/mssql/server:2017-latest
  1. 前一個(gè)命令請(qǐng)求最新的 SQL Server 2017 容器映像努隙。 如果想請(qǐng)求某個(gè)特定映像,需添加一個(gè)冒號(hào)和標(biāo)記名稱(例如 mcr.microsoft.com/mssql/server:2017-GA-ubuntu辜昵。 若要查看所有可用映像, 請(qǐng)參閱mssql-Server Docker 中心頁荸镊。

    對(duì)于本文中的 bash 命令, sudo將使用。 在 MacOS 上sudo , 可能不是必需的堪置。 在 Linux 上, 如果不希望使用sudo運(yùn)行 docker, 可以配置docker組, 并將用戶添加到該組躬存。 有關(guān)詳細(xì)信息, 請(qǐng)參閱適用于 Linux 的安裝后步驟

  2. 要使用 Docker 運(yùn)行容器映像舀锨,可以從 Bash Shell (Linux/macOS) 或提升的 PowerShell 命令提示符使用以下命令岭洲。

sudo docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=<YourStrong!Passw0rd>" \
   -p 1433:1433 --name sql1 \
   -d mcr.microsoft.com/mssql/server:2017-latest

eg:
一较沪、docker run -d -e SA_PASSWORD='MSSQL123456' -e SQLSERVER_DATABASE=mssql -e SQLSERVER_USER=chj -e SQLSERVER_PASSWORD='MSSQL123456' -p 1433:1433 mcr.microsoft.com/mssql/server:2017-latest
二墅拭、docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=<MSSQL123456>' -p 1433:1433 --name mssql -d mcr.microsoft.com/mssql/server:2017-latest
三、docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=MSSQL@12345"  -p 1433:1433 --name mssql -d mcr.microsoft.com/mssql/server:2017-latest

備注

密碼應(yīng)符合 SQL Server 默認(rèn)密碼策略宿亡,否則容器無法設(shè)置 SQL Server,將停止工作彪腔。 默認(rèn)情況下, 密碼的長(zhǎng)度必須至少為8個(gè)字符, 并且包含以下四個(gè)集中的三個(gè)字符:大寫字母侥锦、小寫字母、十進(jìn)制數(shù)字和符號(hào)德挣。 你可以通過執(zhí)行 docker logs 命令檢查錯(cuò)誤日志恭垦。
默認(rèn)情況下,這會(huì)創(chuàng)建一個(gè)使用 SQL Server 2017 開發(fā)人員版的容器格嗅。 在容器中運(yùn)行生產(chǎn)版本的過程略有不同番挺。 有關(guān)詳細(xì)信息,請(qǐng)參閱運(yùn)行生產(chǎn)容器映像屯掖。

  1. 下表對(duì)前一個(gè) docker run 示例中的參數(shù)進(jìn)行了說明:

    參數(shù) 描述
    -e 'ACCEPT_EULA=Y' ACCEPT_EULA 變量設(shè)置為任意值玄柏,以確認(rèn)接受最終用戶許可協(xié)議。 SQL Server 映像的必需設(shè)置贴铜。
    -e 'SA_PASSWORD=<YourStrong!Passw0rd>' 指定至少包含 8 個(gè)字符且符合 SQL Server 密碼要求的強(qiáng)密碼粪摘。 SQL Server 映像的必需設(shè)置。
    -p 1433:1433 建立主機(jī)環(huán)境(第一個(gè)值)上的 TCP 端口與容器(第二個(gè)值)中 TCP 端口的映射绍坝。 在此示例中, SQL Server 偵聽容器中的 TCP 1433, 此端口公開給主機(jī)上的端口1433徘意。
    --name sql1 為容器指定一個(gè)自定義名稱,而不是使用隨機(jī)生成的名稱轩褐。 如果運(yùn)行多個(gè)容器椎咧,則無法重復(fù)使用相同的名稱。
    mcr.microsoft.com/mssql/server:2017-latest SQL Server 2017 Linux 容器映像把介。
  2. 要查看 Docker 容器勤讽,請(qǐng)使用 docker ps 命令。

sudo docker ps -a
  1. 將看到與如下屏幕截圖相似的輸出:


    圖片
  2. 如果“狀態(tài)”列顯示“正常運(yùn)行”劳澄,則 SQL Server 將在容器中運(yùn)行地技,并偵聽“端口”列中指定的端口 。 如果 SQL Server 容器的“狀態(tài)”列顯示“已退出”秒拔,則參閱配置指南的疑難解答部分 莫矗。

-h(主機(jī)名)參數(shù)也非常有用,但為了簡(jiǎn)單起見砂缩,本教程中不使用它作谚。 這會(huì)將容器的內(nèi)部名稱更改為一個(gè)自定義值。 也就是以下 Transact-SQL 查詢中返回的名稱:

SELECT @@SERVERNAME,
    SERVERPROPERTY('ComputerNamePhysicalNetBIOS'),
    SERVERPROPERTY('MachineName'),
    SERVERPROPERTY('ServerName')

-h--name 設(shè)為相同的值是一種很好的方法庵芭,可以輕松地識(shí)別目標(biāo)容器妹懒。

更改 SA 密碼

SA 帳戶是安裝過程中在 SQL Server 實(shí)例上創(chuàng)建的系統(tǒng)管理員。 創(chuàng)建 SQL Server 容器后双吆,通過在容器中運(yùn)行 echo $MSSQL_SA_PASSWORD眨唬,可發(fā)現(xiàn)指定的 MSSQL_SA_PASSWORD 環(huán)境變量会前。 出于安全考慮,請(qǐng)考慮更改 SA 密碼匾竿。

  1. 選擇 SA 用戶要使用的強(qiáng)密碼瓦宜。

  2. 使用 docker exec 運(yùn)行sqlcmd ,以使用 Transact-SQL 更改密碼岭妖。 在下面的示例中, 將舊密碼<YourStrong!Passw0rd>和新<YourNewStrong!Passw0rd>密碼替換為你自己的密碼值临庇。

sudo docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd \
   -S localhost -U SA -P "<YourStrong!Passw0rd>" \
   -Q 'ALTER LOGIN SA WITH PASSWORD="<YourNewStrong!Passw0rd>"'

連接到 SQL Server

下列步驟在容器內(nèi)部使用 SQL Server 命令行工具 sqlcmd 來連接 SQL Server。

  1. 使用 docker exec -it 命令在運(yùn)行的容器內(nèi)部啟動(dòng)交互式 Bash Shell昵慌。 在下面的示例中假夺,sql1 是在創(chuàng)建容器時(shí)由 --name 參數(shù)指定的名稱。
sudo docker exec -it sql1 "bash"
  1. 一旦位于容器內(nèi)部斋攀,使用 sqlcmd 進(jìn)行本地連接已卷。 默認(rèn)情況下,sqlcmd 不在路徑之中淳蔼,因此需要指定完整路徑悼尾。
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "<YourNewStrong!Passw0rd>"

提示
可以省略命令行上提示要輸入的密碼。

  1. 如果成功肖方,應(yīng)會(huì)顯示 sqlcmd 命令提示符:1>。

創(chuàng)建和查詢數(shù)據(jù)

以下部分將引導(dǎo)你使用 sqlcmd 和 Transact-SQL 完成新建數(shù)據(jù)庫(kù)未状、添加數(shù)據(jù)并運(yùn)行簡(jiǎn)單查詢的整個(gè)過程俯画。

新建數(shù)據(jù)庫(kù)

以下步驟創(chuàng)建一個(gè)名為 TestDB 的新數(shù)據(jù)庫(kù)。

  1. 在 sqlcmd 命令提示符中司草,粘貼以下 Transact-SQL 命令以創(chuàng)建測(cè)試數(shù)據(jù)庫(kù):
CREATE DATABASE TestDB
  1. 在下一行中艰垂,編寫一個(gè)查詢以返回服務(wù)器上所有數(shù)據(jù)庫(kù)的名稱:
SELECT Name from sys.Databases
  1. 前兩個(gè)命令沒有立即執(zhí)行。 必須在新行中鍵入 GO 才能執(zhí)行以前的命令:
GO

插入數(shù)據(jù)

接下來創(chuàng)建一個(gè)新表 Inventory埋虹,然后插入兩個(gè)新行猜憎。

  1. 在 sqlcmd 命令提示符中,將上下文切換到新的 TestDB 數(shù)據(jù)庫(kù):
USE TestDB
  1. 創(chuàng)建名為 Inventory 的新表:
CREATE TABLE Inventory (id INT, name NVARCHAR(50), quantity INT)
  1. 將數(shù)據(jù)插入新表:
INSERT INTO Inventory VALUES (1, 'banana', 150); INSERT INTO Inventory VALUES (2, 'orange', 154);
  1. 要執(zhí)行上述命令的類型 GO:
GO

選擇數(shù)據(jù)

現(xiàn)在搔课,運(yùn)行查詢以從 Inventory 表返回?cái)?shù)據(jù)胰柑。

  1. 通過 sqlcmd 命令提示符輸入查詢,以返回 Inventory 表中數(shù)量大于 152 的行:
SELECT * FROM Inventory WHERE quantity > 152;
  1. 執(zhí)行命令:
GO

退出 sqlcmd 命令提示符

  1. 要結(jié)束 sqlcmd 會(huì)話爬泥,請(qǐng)鍵入 QUIT
QUIT
  1. 要在容器中退出交互式命令提示柬讨,請(qǐng)鍵入 exit。 退出交互式 Bash Shell 后袍啡,容器將繼續(xù)運(yùn)行踩官。

從容器外連接

還可以從支持 SQL 連接的任何 Linux、Windows 或 macOS 外部工具連接到 Docker 計(jì)算機(jī)上的 SQL Server 實(shí)例境输。

以下步驟在容器外使用 sqlcmd 連接在容器中運(yùn)行的 SQL Server蔗牡。 這些步驟假定你已在容器外安裝了 SQL Server 命令行工具颖系。 使用其他工具時(shí), 相同的原則同樣適用, 但連接過程對(duì)于每個(gè)工具都是唯一的。

  1. 查找承載容器的計(jì)算機(jī)的 IP 地址辩越。 在 Linux 上嘁扼,使用 ifconfigip addr。在 Windows 上区匣,使用 ipconfig偷拔。

  2. 對(duì)于本示例, 請(qǐng)?jiān)诳蛻舳擞?jì)算機(jī)上安裝sqlcmd工具。 有關(guān)詳細(xì)信息, 請(qǐng)參閱在 Windows 上安裝 sqlcmd在 Linux 上安裝 sqlcmd亏钩。

  3. 運(yùn)行 sqlcmd莲绰,指定 IP 地址和映射容器中的端口 1433 的端口。 在此示例中, 這是主機(jī)上的相同端口1433姑丑。 如果在主機(jī)計(jì)算機(jī)上指定了其他映射端口, 則可在此處使用蛤签。

sqlcmd -S <ip_address>,1433 -U SA -P "<YourNewStrong!Passw0rd>"
  1. 運(yùn)行 Transact-SQL 命令。 完成后栅哀,鍵入 QUIT震肮。
    連接到 SQL Server 的其他常見工具包括:

刪除容器

如果想刪除本教程中使用的 SQL Server 容器,請(qǐng)運(yùn)行以下命令:

sudo docker stop sql1
sudo docker rm sql1

后續(xù)步驟

有關(guān)如何將數(shù)據(jù)庫(kù)備份文件還原到容器中的教程留拾,請(qǐng)參閱在 Linux Docker 容器中還原 SQL Server 數(shù)據(jù)庫(kù)戳晌。 若要瀏覽其他方案, 例如運(yùn)行多個(gè)容器、數(shù)據(jù)持久性和故障排除, 請(qǐng)參閱在 Docker 上配置 SQL Server 容器映像痴柔。

并且沦偎,請(qǐng)查看 mssql-docker GitHub 存儲(chǔ)庫(kù),了解資源咳蔚、反饋和已知問題豪嚎。

附屬說明:

可以直接從bash后臺(tái)利用指令創(chuàng)建數(shù)據(jù)庫(kù)及數(shù)據(jù)表

一、建庫(kù)和建表

docker exec -it mssql "bash"     //進(jìn)入容器
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'Test1234'     //執(zhí)行數(shù)據(jù)庫(kù)操作谈火,localhost可以換成對(duì)應(yīng)IP地址
1> CREATE DATABASE dockerdbtest  //創(chuàng)建數(shù)據(jù)庫(kù)
2> go
1> use dockerdbtest
2> create table user(id int,code nvarchar(255),name nvarchar(255));  //創(chuàng)建表
3> go

二侈询、鏈接數(shù)據(jù)庫(kù)

利用Navicat鏈接MSSQL,如下圖所示:

Navicat鏈接MSSQL

三糯耍、開機(jī)啟動(dòng)MSSQL

開機(jī)啟動(dòng)MSSQL服務(wù)
最后編輯于
?著作權(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)離奇詭異篷角,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)系任,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門恳蹲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來虐块,“玉大人,你說我怎么就攤上這事嘉蕾『氐欤” “怎么了?”我有些...
    開封第一講書人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵错忱,是天一觀的道長(zhǎng)儡率。 經(jīng)常有香客問我,道長(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)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼戳杀!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起夭苗,我...
    開封第一講書人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬榮一對(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
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽爹袁。三九已至,卻和暖如春矮固,著一層夾襖步出監(jiān)牢的瞬間失息,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來泰國(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