最近在使用Docker進(jìn)行應(yīng)用部署的時(shí)候,發(fā)現(xiàn)了一個(gè)比較嚴(yán)重的問題,就是在容器重新啟動(dòng)的時(shí)候有一些數(shù)據(jù)會(huì)丟失,這給我們的應(yīng)用帶來了很大的麻煩。
初步排查后發(fā)現(xiàn),原來是Docker自身機(jī)制導(dǎo)致的。當(dāng)我們?cè)谌萜鲀?nèi)創(chuàng)建了一些數(shù)據(jù)或者文件時(shí),在容器重新啟動(dòng)的時(shí)候,這些數(shù)據(jù)并不會(huì)自動(dòng)保存到鏡像中,而是會(huì)被自動(dòng)清理掉,導(dǎo)致數(shù)據(jù)的丟失。
// 創(chuàng)建數(shù)據(jù) $docker run -v /data --name data-container busybox touch /data/file.txt // 查看數(shù)據(jù) $docker run --volumes-from data-container busybox ls /data file.txt // 重啟容器 $docker restart data-container // 查看數(shù)據(jù) $docker run --volumes-from data-container busybox ls /data
可以看到,在重啟容器后,我們?cè)谥皠?chuàng)建的/data目錄下的file.txt文件已經(jīng)不見了。
所以在使用Docker時(shí),在容器中創(chuàng)建數(shù)據(jù)時(shí)需要謹(jǐn)慎,最好將數(shù)據(jù)保存到外部目錄中。同時(shí),在啟動(dòng)容器時(shí)可以使用-v參數(shù)將外部目錄綁定到容器內(nèi)部,這樣就可以避免數(shù)據(jù)的丟失了。
// 創(chuàng)建數(shù)據(jù) $docker run -v /data:/app/data --name data-container busybox touch /app/data/file.txt // 查看數(shù)據(jù) $docker run --volumes-from data-container busybox ls /app/data file.txt // 重啟容器 $docker restart data-container // 查看數(shù)據(jù) $docker run --volumes-from data-container busybox ls /app/data file.txt
可以看到,在使用-v參數(shù)綁定外部目錄后,容器內(nèi)部的數(shù)據(jù)不僅不會(huì)丟失,而且可以持久化到外部目錄中,這對(duì)我們的數(shù)據(jù)安全是很重要的。