我們有許多硒測(cè)試,它們運(yùn)行在我們的webapp的類似生產(chǎn)的設(shè)置上.問題是某些測(cè)試會(huì)影響數(shù)據(jù)庫的應(yīng)用程序. 是否可以擁有一個(gè)數(shù)據(jù)量或類似數(shù)據(jù),我們可以在每次測(cè)試之前“克隆”并附加到容器中? 我們真的只需要一個(gè)可以在每次測(cè)試之前快速重新創(chuàng)建的MySQL數(shù)據(jù)庫.偶爾我們會(huì)將模式遷移運(yùn)行到該數(shù)據(jù)庫. 還是有另一種方法更適合這個(gè)嗎? 解決方法: 這是一個(gè)很好的問題,對(duì)于Docker來說可能是一個(gè)非常好的用例.有很多方法可以做到這一點(diǎn),因?yàn)橛修k法備份MySQL數(shù)據(jù)庫.我將在下面解釋其中的一些. 但請(qǐng)注意,您正在進(jìn)行權(quán)衡.這種方法的缺點(diǎn)是你的圖像會(huì)變得非常大,并且需要更長的時(shí)間來拉動(dòng). 此外,您將遇到的一個(gè)問題是,大多數(shù)MySQL容器都使用卷/ var / lib / mysql(存儲(chǔ)數(shù)據(jù)的位置).因此,銷毀容器不足以清除數(shù)據(jù) – 您還需要清除卷.因此,當(dāng)您使用docker rm清除舊容器時(shí),請(qǐng)傳遞-v標(biāo)志以刪除卷. 選項(xiàng)1:將數(shù)據(jù)構(gòu)建到容器中 可以將數(shù)據(jù)構(gòu)建到容器中.這樣做的好處是,您的容器在每次運(yùn)行時(shí)都不會(huì)花費(fèi)任何時(shí)間來設(shè)置數(shù)據(jù).對(duì)于需要很長時(shí)間設(shè)置或拆除的大數(shù)據(jù)集,這種優(yōu)勢(shì)變得更加重要.換句話說,“重置”該數(shù)據(jù)庫幾乎是即時(shí)的. 在基本層面上,我們想要這樣的東西:
這里棘手的部分是創(chuàng)建mysql_data.tar.gz文件(它只是/ var / lib / mysql的tar.gz備份).我們可以這樣做: >使用空數(shù)據(jù)庫運(yùn)行容器(我將使用mysql:latest here).請(qǐng)注意,我們正在使用命名卷,我們正在轉(zhuǎn)發(fā)端口3306. $docker run -d –name my-mysql -v my-mysql-data:/ var / lib / mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD = password mysql:latest $cat backup.sql | mysql -u root -ppassword -h 127.0.0.1 $docker stop my-mysql $docker run –rm -v my-mysql-data:/ var / lib / mysql -v $(pwd):/ backup mysql:latest tar czvf /backup/mysql_data.tar.gz / var / lib / mysql 添加mysql_data.tar.gz / 如果您還沒有Dockerfile,請(qǐng)使用第一行創(chuàng)建一個(gè) 從mysql:5.7 $docker build -t my-data-image:latest. $docker run -d -p 3306:3306 my-data-image:latest Docker將自動(dòng)提取文件作為構(gòu)建的一部分.你完成了. Dockerfile中的容器將始終包含您的干凈數(shù)據(jù).要“重置”容器,只需停止它即可.刪除它用于/ var / lib / mysql的卷. 要編輯數(shù)據(jù),請(qǐng)重復(fù)此過程,但在步驟1中替換現(xiàn)有容器.對(duì)于步驟2,進(jìn)行更改.您將生成一個(gè)新的mysql_data.tar.gz,如果您愿意,可以對(duì)其進(jìn)行版本控制.重建Dockerfile后,如果愿意,可以在新標(biāo)記下發(fā)布它. 選項(xiàng)2:使用docker-entrypoint-initdb.d MySQL Docker鏡像具有以下功能:當(dāng)容器第一次運(yùn)行時(shí),它將在/docker-entrypoint-initdb.d中運(yùn)行SQL文件.這樣做的好處是它可以使用常規(guī)的MySQL轉(zhuǎn)儲(chǔ)來創(chuàng)建數(shù)據(jù).缺點(diǎn)是數(shù)據(jù)庫啟動(dòng)速度較慢,因?yàn)樗看味紩?huì)恢復(fù)所有數(shù)據(jù). 如果您在./backup.sql中有數(shù)據(jù)的mysqldump,則可以執(zhí)行以下操作:
完成后,刪除容器及其卷. 來源:https://www./content-2-259751.html
|
|