寫在前面的話
《Docker+SpringBoot+Mybatis+thymeleaf的Java博客系統(tǒng)開源啦》
《Java開源博客My-Blog之docker容器組件化修改》
My Blog項目已經(jīng)開源了兩個多月,也收獲了不少star,在這里謝謝各位朋友的建議及幫助。由于個人原因,這個開源項目最初的定位其實是一個docker技術與springboot框架整合的Java博客系統(tǒng)實戰(zhàn)項目,而且是一個容器技術的練手項目,技術的偏重也更多的在容器技術及容器編排上。
雖然上個版本做了一些改動,將docker踢出主目錄,原因也是為了照顧其他關注和想要使用My Blog的朋友能夠很快的上手項目,但是docker容器技術依然是這個項目不可缺少的一部分,從項目創(chuàng)建那一刻即是如此,今后也是如此,只不過為了項目更友好而做了一些改動使其不會強耦合于項目中。
問題描述
從項目開源至今,大大小小的問題已經(jīng)發(fā)現(xiàn)且解決了不少,但是直到近期才完全修復掉的一個大問題就是mysql容器重復初始化導致原數(shù)據(jù)被抹去的bug。
熟悉這個項目的朋友應該知道,項目初期為了讓mysql容器可以自動初始化數(shù)據(jù)花了多少精力,但是這個一直讓我覺得很完美的改動卻有一個非常致命的缺陷,一旦數(shù)據(jù)容器mysql掛掉了或者需要重啟,原先的數(shù)據(jù)就都沒了,即使只是重啟也會抹去原先的數(shù)據(jù),這個就很尷尬了,我原以為最堅硬的盔甲卻成了最柔弱的軟肋,這件事真的讓我低迷了很久。
一開始并沒有發(fā)現(xiàn)這個問題,而是在項目運行一段時間之后,某一天由于服務器資源問題(服務器配置差)需要重啟,進而導致myblog容器和mysql容器也得重啟,但是在重啟后發(fā)現(xiàn)原來添加的博客數(shù)據(jù)及留言數(shù)據(jù)消失了!
取而代之的是schema.sql中的幾條初始化數(shù)據(jù),當時也認真確認是否存在錯誤操作導致了數(shù)據(jù)被清空,結果就是一切流程都正常,過程中并沒有誤操,這個問題也只有在重啟時會出現(xiàn),這是流程設計的問題而且是一個十分致命的問題,如果不解決,將是這個項目最大的一個污點。
問題原因
FROM mysql:5.7ENV MYSQL_DATABASE test ENV MYSQL_ALLOW_EMPTY_PASSWORD yes COPY setup.sh /mysql/setup.sh COPY schema.sql /mysql/schema.sql COPY privileges.sql /mysql/privileges.sql#設置容器啟動時執(zhí)行的命令CMD ["bash", "/mysql/setup.sh"]
以上為mysql容器的Dockerfile文件,文件中定義了容器的啟動語句是執(zhí)行setup.sh腳本文件,即mysql容器每次啟動都會執(zhí)行setup.sh,包括第一次啟動及此后的重啟,而每次執(zhí)行setup.sh都會重新初始化數(shù)據(jù),這里的數(shù)據(jù)