日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

Docker最全教程——数据库容器化之持久保存数据(十一)

發(fā)布時(shí)間:2024/4/17 数据库 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Docker最全教程——数据库容器化之持久保存数据(十一) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Docker最全教程——數(shù)據(jù)庫(kù)容器化之持久保存數(shù)據(jù)(十一) 原文:Docker最全教程——數(shù)據(jù)庫(kù)容器化之持久保存數(shù)據(jù)(十一)

上一節(jié)我們講述了SQL Server容器化實(shí)踐(注意,SQL Server現(xiàn)在也支持跨平臺(tái)),本節(jié)將講述如何持久保存數(shù)據(jù),并且接下來將逐步講解其他數(shù)據(jù)庫(kù)(MySql、Redis、Mongodb等等)的容器化實(shí)踐,中間再穿插一些知識(shí)點(diǎn)和實(shí)踐細(xì)節(jié)。由于實(shí)踐需要花費(fèi)大量的時(shí)間,而目目前業(yè)務(wù)繁忙,只能加班來進(jìn)行一些實(shí)踐并編寫,如果編寫比較慢,請(qǐng)多多海涵。

目錄

??

如何持久保存數(shù)據(jù)?

默認(rèn)情況下,在容器內(nèi)創(chuàng)建的所有文件都存儲(chǔ)在可寫容器層中。這意味著:

·?當(dāng)該容器不再存在時(shí),數(shù)據(jù)不會(huì)持久存在,并且如果另一個(gè)進(jìn)程需要,則可能很難從容器中獲取數(shù)據(jù)。

·?容器的可寫層緊密耦合到運(yùn)行容器的主機(jī)。數(shù)據(jù)遷移很麻煩。

·?寫入容器的可寫層需要存儲(chǔ)驅(qū)動(dòng)程序來管理文件系統(tǒng)。存儲(chǔ)驅(qū)動(dòng)程序使用Linux內(nèi)核提供統(tǒng)一的文件系統(tǒng)。與直接寫入主機(jī)文件系統(tǒng)相比,這種額外的抽象降低了性能?。

?

因此,如果我們使用容器命令docker rm刪除了容器,那么容器中的所有內(nèi)容均將丟失,包括?SQL Server 和數(shù)據(jù)庫(kù)文件。對(duì)于數(shù)據(jù)庫(kù)(不僅僅是SQL?Server)來說,了解?Docker 中的數(shù)據(jù)持久性至關(guān)重要那么我們?nèi)绾卧赿ocker中持久保存我們的數(shù)據(jù)呢,即使關(guān)聯(lián)的容器已經(jīng)刪除的情況下?

?

使用數(shù)據(jù)卷持久保存數(shù)據(jù)庫(kù)文件

卷是保存Docker容器中的數(shù)據(jù)的首選機(jī)制。雖然綁定掛載依賴于主機(jī)的目錄結(jié)構(gòu),但卷完全由Docker管理。主要有如下好處:

·?易于備份或遷移。

·?可以使用Docker CLI命令或Docker API管理卷。

·?適用于Linux和Windows容器。

·?可以在多個(gè)容器之間更安全地共享卷。

·?卷驅(qū)動(dòng)程序允許在遠(yuǎn)程主機(jī)或云提供程序上存儲(chǔ)卷,加密卷的內(nèi)容或添加其他功能。

·?新卷可以通過容器預(yù)先填充內(nèi)容。

因此,通常情況下,卷相對(duì)于容器的可寫層中的持久數(shù)據(jù)來說是更好的選擇,因?yàn)榫聿粫?huì)增加容器的大小,并且卷的內(nèi)容存在于給定容器的生命周期之外。接下來,我們就一起來實(shí)踐。

?

?

方式一,使用主機(jī)目錄

首先,我們可以將主機(jī)目錄加載為容器的數(shù)據(jù)卷,用來存儲(chǔ)數(shù)據(jù)庫(kù)文件。例如,我們可以通過-v <host directory>:/var/opt/mssql命令參數(shù)來完成需求:

PowerShell:

docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=123456abcD" `

???-p 1433:1433 --name mySqlServer `

???-v d:/temp/data:/var/opt/mssql `

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

?

?

bash:

docker run -e 'ACCEPT_EULA=Y' \

-e 'SA_PASSWORD=123456abcD' \

-p 1433:1433 \

--name mySqlServer \

-v /temp/data:/var/opt/mssql \

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

?

注意:-v參數(shù)應(yīng)該在-d參數(shù)之前。

?

-v or –volume用于映射卷,冒號(hào)“:”前面的目錄是宿主機(jī)目錄,冒號(hào)后面的目錄是容器內(nèi)目錄。

執(zhí)行成功后,我們可以看到容器已正常運(yùn)行,并且主機(jī)目錄已綁定:

我們啟動(dòng)SSMS工具創(chuàng)建一個(gè)數(shù)據(jù)庫(kù),然后打開本地資源管理器即可看到:

接下來,我們刪除容器,然后來驗(yàn)證數(shù)據(jù)庫(kù)文件是否任然保留:

PowerShell:

set-location D:\temp\data\data

docker stop mySqlServer

docker rm mySqlServer

ls

執(zhí)行結(jié)果如下所示:

值得注意的是,SQL?Server會(huì)自動(dòng)從目錄/var/opt/mssql掛載數(shù)據(jù)庫(kù),我們可以使用以下步驟來驗(yàn)證:

第一步:

PowerShell:

docker run -e?"ACCEPT_EULA=Y"?-e?"SA_PASSWORD=123456abcD"?`

???-p?1433:1433?--name mySqlServer `

???-v d:/temp/data:/var/opt/mssql `

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

?

docker exec -it mySqlServer?"bash"

?

第二步:

/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P?'123456abcD'

?

第三步:

SELECT Name?from?sys.Databases

GO

?

?

注意:SQL?Server容器啟動(dòng)時(shí)需要一些時(shí)間,啟動(dòng)完成后才能連接。

?

方式二,使用數(shù)據(jù)卷

我們可以使用docker?volume命令來創(chuàng)建卷,然后

?

PowerShell:

docker volume create my-data

docker volume ls

?

docker run -e?"ACCEPT_EULA=Y"?`

???-e?"MSSQL_SA_PASSWORD=123456abcD"?`

???-p?1433:1433?--name mySqlServer `

???-v my-data:/var/opt/mssql `

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

?

我們可以使用以下命令來檢查數(shù)據(jù)卷:

docker volume inspect my-data

同樣的,我們也可以使用上一節(jié)的命令刪除容器并再次創(chuàng)建來驗(yàn)證數(shù)據(jù)是否丟失。這里我們就不做演示了。

posted on 2019-02-20 12:54 NET未來之路 閱讀(...) 評(píng)論(...) 編輯 收藏

轉(zhuǎn)載于:https://www.cnblogs.com/lonelyxmas/p/10405893.html

總結(jié)

以上是生活随笔為你收集整理的Docker最全教程——数据库容器化之持久保存数据(十一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。