最近在使用Docker進行應(yīng)用部署的時候,發(fā)現(xiàn)了一個比較嚴重的問題,就是在容器重新啟動的時候有一些數(shù)據(jù)會丟失,這給我們的應(yīng)用帶來了很大的麻煩。
初步排查后發(fā)現(xiàn),原來是Docker自身機制導(dǎo)致的。當(dāng)我們在容器內(nèi)創(chuàng)建了一些數(shù)據(jù)或者文件時,在容器重新啟動的時候,這些數(shù)據(jù)并不會自動保存到鏡像中,而是會被自動清理掉,導(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
可以看到,在重啟容器后,我們在之前創(chuàng)建的/data目錄下的file.txt文件已經(jīng)不見了。
所以在使用Docker時,在容器中創(chuàng)建數(shù)據(jù)時需要謹慎,最好將數(shù)據(jù)保存到外部目錄中。同時,在啟動容器時可以使用-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ù)不僅不會丟失,而且可以持久化到外部目錄中,這對我們的數(shù)據(jù)安全是很重要的。