目錄
資料庫,簡而言之可視為電子化的檔案櫃——儲存電子檔案的處所,使用者可以對檔案中的資料執行新增、擷取、更新、刪除等操作。因此,所謂“資料庫”是以一定方式儲存在一起、能與多個使用者共享、具有盡可能小的冗餘度、與應用程式彼此獨立的資料集合。
目前主流的資料庫分為關係型資料庫和非關係型資料庫(NoSQL)。
關係型資料庫:
· Microsoft SQL Server(Microsoft)
· MySQL(開源)
· Oracle(甲骨文)
· MariaDB(MySQL的代替品)
· PostgreSQL(開源)
· DB2(IBM)
非關係型資料庫:
· MongoDB(面向檔案)
· CouchDB(面向檔案,Apache基金會)
· Redis(鍵值對資料庫)
· MemcacheDB(鍵值對資料庫)
· Hypertable
· Hadoop HBase
隨著Docker的流行,主流的資料庫廠商均提供了相關的Docker映象,因此我們能夠非常方便的將資料庫託管到容器之中,用於測試和開發環境(現階段)。
註意,現階段我們不推薦在容器中託管正式環境的資料庫,目前資料庫容器化還存在一些問題、不適應性以及質疑,並且還缺乏成熟的案例和方案(已經有很多廠商在做這塊的探索了,包括阿裡、京東)。
資料庫容器化絕不是一個偽命題,資料庫容器化是值得我們來探索的一個方向,而且應是一種必然的趨勢。在本篇中,我們不做過多探討。
接下來,筆者將逐步和大家分享如何將主流的資料庫託管到容器之中。
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)
值範圍支援Developer、Express、Standard 、Enterprise、EnterpriseCore、產品金鑰 ,一般情況下,我們使用Developer即可,即開發版本,其包含企業版所有的功能,足夠我們用於開發和測試。
其他:
在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 將在容器中執行,並偵聽“埠”列中指定的埠。
如果是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 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”,點選連線,可以看到如下圖所示的介面:
我們可以透過介面來管理我們的資料庫以及執行相關的查詢:
我們可以在容器內部使用 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-cli(SQL Server的新的互動式命令列查詢工具,支援跨平臺,開源,提供智慧提示和語法高亮等)
https://cloudblogs.microsoft.com/sqlserver/2017/12/12/try-mssql-cli-a-new-interactive-command-line-tool-for-sql-server/