歡迎光臨
每天分享高質量文章

Docker最全教程——資料庫容器化(十一)

終於按時完成第二篇。本來準備著手講一些實踐,但是資料庫部分沒有講到,部分實踐會存在一些問題,於是就有了此篇以及後續——資料庫容器化。本篇將從SQL Server容器化實踐開始,並逐步講解其他資料庫的容器化實踐,中間再穿插一些知識點和實踐細節。
在編寫的過程中,我一直處於一種矛盾的心理,是一筆帶過呢?還是盡可能的將實踐細節全部講到位呢?最後,我選擇了後者,雖然要花費更多的精力,但是既然開始了本次教程,就儘量寫到位吧。
 

目錄

 

 

//
資料庫容器化
//

什麼是資料庫?

資料庫,簡而言之可視為電子化的檔案櫃——儲存電子檔案的處所,用戶可以對檔案中的資料運行新增、截取、更新、刪除等操作。因此,所謂“資料庫”是以一定方式儲存在一起、能與多個用戶共享、具有盡可能小的冗餘度、與應用程式彼此獨立的資料集合。

目前主流的資料庫分為關係型資料庫和非關係型資料庫(NoSQL

 

關係型資料庫和非關係型資料庫對比

主流的資料庫

關係型資料庫:

· Microsoft SQL ServerMicrosoft

· MySQL(開源)

· Oracle(甲骨文)

· MariaDB(MySQL的代替品)

· PostgreSQL(開源)

· DB2IBM

 

非關係型資料庫:

· MongoDB(面向文件)

· CouchDB(面向文件,Apache基金會

· Redis(鍵值對資料庫)

· MemcacheDB(鍵值對資料庫)

· Hypertable

· Hadoop HBase

 

資料庫容器化

隨著Docker的流行,主流的資料庫廠商均提供了相關的Docker鏡像,因此我們能夠非常方便的將資料庫托管到容器之中,用於測試和開發環境(現階段)

註意,現階段我們不推薦在容器中托管正式環境的資料庫,目前資料庫容器化還存在一些問題、不適應性以及質疑,並且還缺乏成熟的案例和方案(已經有很多廠商在做這塊的探索了,包括阿裡、京東)。

資料庫容器化絕不是一個偽命題,資料庫容器化是值得我們來探索的一個方向,而且應是一種必然的趨勢。在本篇中,我們不做過多探討。

 

接下來,筆者將逐步和大家分享如何將主流的資料庫托管到容器之中。

 

 

//
Sql Server容器化
//

 

SQL Server是由Microsoft開發和推廣的關係資料庫,其在運算元據庫管理系統 (ODBMS) 領域處於領先水平,目前已經提供SQL Server 2019預覽版。其中,SQL Server 2017 跨出了重要的一步,它力求通過將 SQL Server 的強大功能引入 Linux、基於 Linux 的 Docker 容器和 Windows,使用戶可以在 SQL Server 平臺上選擇開發語言、資料型別、本地開發或雲端開發,以及操作系統開發。

因此,在本篇教程中,我們將使用SQL Server 2017來進行演示。

 

 

鏡像說明

官方鏡像分為Windows版本和Linux版本,官方鏡像說明頁為:

https://hub.docker.com/r/microsoft/mssql-server

這裡我們主要介紹Linux版本的鏡像。

環境要求

· Docker Engine 1.8+。

· Docker overlay2儲存驅動程式。

· 至少2 GB的磁盤空間。

· 至少2 GB 的 RAM。如果您在Docker for Mac或Windows上運行,請確保為Docker VM分配足夠的記憶體。

· Linux 上的 SQL Server 的系統要求

 

環境變數

必填項:

· ACCEPT_EULA = Y(表示接受最終用戶許可協議,否則無法啟動)

· SA_PASSWORD = <強密碼> (密碼必須符合複雜密碼要求,包含大小寫字母以及數字或特殊符號,長度不能少於8個字符,否則無法啟動)

 

註意項:

· MSSQL_PID = (用於設置產品ID(PID)或版本,預設值:Developer

值範圍支持DeveloperExpressStandard EnterpriseEnterpriseCore、產品密鑰 ,一般情況下,我們使用Developer即可,即開發版本,其包含企業版所有的功能,足夠我們用於開發和測試。

其他:

//
運行 SQL Server 容器鏡像
//
 

PowerShell運行

Windows系統之上,我們可以使用PowerShell來運行SQL Server鏡像。腳本如下所示:

 

docker run -e “ACCEPT_EULA=Y” -e “SA_PASSWORD=123456abcD” `

   -p 1433:1433 –name mySqlServer `

   -d mcr.microsoft.com/mssql/server:2017-latest

 

相關引數說明如下所示:

引數 描述
-e “ACCEPT_EULA=Y” 將 ACCEPT_EULA 變數設置為任意值,以確認接受最終用戶許可協議。 SQL Server 映像的必需設置。
-e “SA_PASSWORD =123456abcD” 指定至少包含 8 個字符且符合 SQL Server 密碼要求的強密碼。 SQL Server 映像的必需設置。
-p 1433:1433 建立主機環境(第一個值)上的 TCP 端口與容器(第二個值)中 TCP 端口的映射。 在此示例中,SQL Server 偵聽容器中的 TCP 1433 並公開的端口 1433,在主機上。
–name sql1 為容器指定一個自定義名稱,而不是使用隨機生成的名稱。 如果運行多個容器,則無法重覆使用相同的名稱。
mcr.microsoft.com/mssql/server:2017-latest SQL Server 2017 Linux 容器映像。

 

 

註意:密碼應符合 SQL Server 預設密碼策略,否則容器無法設置 SQL Server,將停止工作。 預設情況下,密碼必須至少為 8 個字符長,且包含三個以下四種字符集的字符:大寫字母、 小寫字母、 十進制數字和符號。 你可以通過執行 docker logs 命令檢查錯誤日誌。

 

執行之後(鏡像不存在會自動拉取,大家也可以使用拉取命令下拉取鏡像,比如:docker pull mcr.microsoft.com/mssql/server:2017-latest),會預設創建一個使用 SQL Server 2017 開發人員版的容器,端口為1433,密碼為123456abcD。

 

鏡像拉取完成之後成功啟動:

 

當然,大家也可以通過命令列查看:

docker ps -a

 

如果“狀態(STATUS)”列顯示“UP”,則 SQL Server 將在容器中運行,並偵聽“端口”列中指定的端口。

 

Bash Shell運行

如果是Linux系統,我們可以通過Bash Shell執行以下命令:

sudo docker run -e ‘ACCEPT_EULA=Y’ -e ‘SA_PASSWORD=123456abcD’ \

   -p 1433:1433 –name mySqlServer \

   -d mcr.microsoft.com/mssql/server:2017-latest

 

 

//
管理SQL Server
//
 

使用SQL Server Management Studio來管理SQL Server

SQL Server Management Studio (SSMS)是 Microsoft 免費提供為開發和管理需求的 SQL 工具套件的一部分。 SSMS 是一個集成的環境,若要訪問、 配置、 管理、 管理和開發 SQL Server 的所有組件。 它可以連接到任何平臺上運行這兩個在本地,在 Docker 容器中和雲中的 SQL Server。 它還連接到 Azure SQL 資料庫和 Azure SQL 資料倉庫。 SSMS 將大量圖形工具與豐富的腳本編輯器相結合,各種技術水平的開發人員和管理員都能訪 SQL Server。

SSMS 提供適用於 SQL Server 的大量開發和管理功能,包括執行以下任務的工具:

· 配置、 監視和管理單個或多個 SQL Server 實體

· 部署、 監視和升級資料層組件,如資料庫和資料倉庫

· 備份和還原資料庫

· 生成和執行 T-SQL 查詢和腳本,並查看結果

· 生成資料庫物件的 T-SQL 腳本

· 查看和編輯資料庫中的資料

· 以可視方式設計 T-SQL 查詢和資料庫物件,如視圖、 表和儲存的過程

 

下載地址:

https://docs.microsoft.com/zh-cn/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-2017

安裝完成之後,我們就可以啟動SSMS來進行管理我們的資料庫了。

 

設置

描述

服務器型別

預設為資料庫引擎;請勿更改此值。

服務器名稱

輸入標的計算機的名稱或IP 地址。

身份驗證

對於 Linux 上的 SQL Server使用SQL Server 身份驗證

登錄

輸入資料庫服務器上具有訪問權限的用戶的名稱 (例如,預設值SA安裝過程中創建的帳戶)

密碼

指定的用戶輸入的密碼 (對於SA帳戶,則此安裝過程中創建)

 

如圖所示,我們輸入上述內容,以及剛纔我們通過環境變數設置的密碼“123456abcD”,點擊連接,可以看到如下圖所示的界面:

 

我們可以通過界面來管理我們的資料庫以及執行相關的查詢:

 

 

使用sqlcmd管理資料庫

我們可以在容器內部使用 SQL Server 命令列工具 sqlcmd 來連接和管理SQL Server。

1. 使用 docker exec -it 命令在運行的容器內部啟動交互式 Bash Shell

PowerShell

docker exec -it mySqlServer “bash”

 

bash

sudo docker exec -it mySqlServer “bash”

2. 使用 sqlcmd 進行本地連接。 預設情況下,sqlcmd 不在路徑之中,因此需要指定完整路徑

命令:

/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P ‘123456abcD’

 

成功的話,就會顯示 sqlcmd 命令提示符 1> 

3. 執行SQL腳本。

比如,我們創建一個MyDb資料庫,可以執行以下腳本:

CREATE DATABASE MyDB

SELECT Name from sys.Databases

GO

第一行為創庫腳本,第二行執行查詢,查詢服務器上所有資料庫的名稱,第三行為執行。

註意:只有輸入GO才會立即執行之前的命令。

 

 

執行結果如上圖所示。我們通過SSMS可以查看到我們剛纔創建的資料庫:

 

除了以上方式,我們也可以在容器外使用sqlcmd連接資料庫:

sqlcmd -S localhost,1433 -U SA -P “123456abcD”

 

註意:退出SQLCMD命令為:QUIT

 

其他管理工具

除了以上的連接管理工具,大家還可以使用以下工具進行連接:

· Visual Studio Code

 

· Azure Data Studio(跨平臺資料庫工具,適用於在Windows,MacOS和Linux上使用Microsoft系列內部部署和雲資料平臺的資料專業人員

 

· mssql-cliSQL Server的新的交互式命令列查詢工具,支持跨平臺,開源,提供智慧提示和語法高亮等)

https://cloudblogs.microsoft.com/sqlserver/2017/12/12/try-mssql-cli-a-new-interactive-command-line-tool-for-sql-server/

    赞(0)

    分享創造快樂