由於是打算作為個人博客,所以對於install這個步驟,我從一開始就打算刪掉的,前面一個多星期一直在修bug,到前天才開始做這個事情.
過程中也是碰到了各種問題,花了整整三天時間才完整的解決並實現了這個過程.
1.首先是思路的整理,如何去實現install過程的docker化.
由於原來是直接用的mysql5.7官方鏡像,所以mysql數據的導入就不好實現,因此需要在原官方鏡像的基礎上重新創建鏡像
實現方法及所需文件都在在mysql文件夾下.
2.數據導入與mysql權限問題.
設想是通過shell腳本來實現數據導入工作,用了好幾種方法都無法繞過mysql的認證步驟.
通過shell腳本對mysql進行操作時是無法實現輸入密碼,因此用了最不安全的方法,在啟動mysql鏡像時通過免密方式.
通過這種方式實現了數據導入.
3.mysql容器啟動問題.
由於是新建的Dockerfile,這一個問題也花費了大量時間,在容器啟動時一直報mysql未啟動的錯誤
因此setup腳本大概重寫了十多個版本,最終將此問題解決(詳見mysql/setup.sh文件)
4.設置mysql的root用戶密碼
由於需要實現數據導入,因此mysql權限設置為免密方式,但是這種方式不安全,因此想要解決掉此問題,重新設置root用戶密碼.
這一過程就不細講了,嘗試了各種方法,最終沒有實現,由於浪費時間過多,因此放棄這一方案.(也許可以實現,但不想再去嘗試了)
5.針對免密方式的補充
由於花費了太多時間在root用戶的設置上,但是最終無法實現,因此選擇了另外一種方案.
用戶問題的方案是,新增tale數據庫的管理用戶並授權.(詳見mysql/editpassword.sql文件)
安全問題是修改了docker-compose文件,不再將mysql容器端口暴露在宿主機中(平常測試時最好還是暴露端口,上線時刪除即可).
6.mysql遠程登錄問題
其實改到第5步的時候,感覺功能已經差不多完成了,在聯合啟動時,又報了數據源無法連接的問題,原因就是容器中mysql未開啟遠程連接.
再次修改啟動腳本.
7.blog容器無法連接連接mysql容器
本以為第6步中已經將連接問題解決,但是啟動blog時還是報了同樣的錯誤,通過本地客戶端進行連接是正常的,證明了遠程連接是沒問題的.多次重復這一過程,發現還是無法連接.修改了各種參數,也進入到blog容器中查看host文件是否正常,都沒有發現問題,也就是說配置都是正常的,但是每次報錯都是同樣的錯,最后發現問題的原因出在初始化的時間差上,blog容器啟動依賴mysql容器,mysql容器啟動成功之后,才會執行blog容器啟動,這一過程並沒有問題,問題在mysql容器中還有一步初始化過程,可參考setup.sh腳本,這一過程需要時間,如果blog容器在這個過程中啟動的話,由於權限問題還沒有處理完成,因此無法連接mysql容器.因此修改了blog鏡像的Dockerfile文件,並重寫啟動方法,將啟動過程延遲執行,最終解決了這個問題(詳見docker/startup.sh文件).
8.總結
問題解決了固然開心,但是也不能忘記了處理問題的過程帶給自己的成長.當然,過程中也有一些非技術的失誤,比如目錄設置錯誤,鏡像選擇問題, 這些都是粗心導致的,過程中也花費了大量的時間,因為網上關於docker的資料實在有些少,只能自己去鼓搗,所以也是很心累,焦躁和煩悶導致了各種粗心,以后需注意.