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

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

 

目錄

 

數據庫容器化

什麼是數據庫?

數據庫,簡而言之可視爲電子化的文件櫃——存儲電子文件的處所,用戶能夠對文件中的數據運行新增、截取、更新、刪除等操做。所以,所謂「數據庫」是以必定方式儲存在一塊兒、能與多個用戶共享、具備儘量小的冗餘度、與應用程序彼此獨立的數據集合。docker

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

 

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

主流的數據庫

關係型數據庫:

· Microsoft SQL Server(Microsoft)bash

· MySQL(開源)服務器

· Oracle(甲骨文)編輯器

· MariaDB(MySQL的代替品)工具

· PostgreSQL(開源)oop

· DB2(IBM)sqlserver

 

非關係型數據庫:

· 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/

 

相關文章
相關標籤/搜索