1. 程式人生 > >Docker最全教程——數據庫容器化(十)

Docker最全教程——數據庫容器化(十)

例如 window 帳戶 maria tps 隨著 pass class copy

原文:Docker最全教程——數據庫容器化(十)

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

目錄

技術分享圖片

數據庫容器化

什麽是數據庫?

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

目前主流的數據庫分為關系型數據庫和非關系型數據庫(NoSQL)。

關系型數據庫和非關系型數據庫對比

技術分享圖片

主流的數據庫

關系型數據庫:

· Microsoft SQL Server(Microsoft)

· MySQL(開源)

· Oracle(甲骨文)

· MariaDB(MySQL的代替品)

· PostgreSQL(開源)

· DB2(IBM)

非關系型數據庫:

· 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 = <your_product_id | edition_name>(用於設置產品ID(PID)或版本,默認值:Developer)

值範圍支持Developer、Express、Standard 、Enterprise、EnterpriseCore、產品密鑰 ,一般情況下,我們使用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-cli(SQL Server的新的交互式命令行查詢工具,支持跨平臺,開源,提供智能提示和語法高亮等)

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

技術分享圖片

Docker最全教程——數據庫容器化(十)