Docker
在 GKE 上建構和/或執行 Docker 映像之前預填充 GCE 永久磁碟
我想建構一個 Docker 容器,然後在從 GCE 永久磁碟 (PD) 掛載一些目錄後在 GKE 中執行它。例如,我希望應用程序的(讀寫)配置文件
/etc/<application>/
比它的 pod 壽命更長(它可能隨時重新啟動。)正常建構將預設配置文件放入
/etc/<application>/
其中,並且必須以某種方式將這些文件從映像的臨時磁碟“複製”一次到 PD 中,以便應用程序可以在其預期的環境中啟動。是否有實現這一目標的最佳實踐?例如,我是否必須在我的 PD 中也掛載 PD
Dockerfile
,或者我是否可以在部署期間首次由 VM 實例掛載 PD 時以某種方式請求將 PD 與來自另一個目錄/卷/磁碟的文件“同步”?
我沒有聽說過最佳實踐,所以這是我現在採用的:
docker build
在完成其他建構步驟之後,帶有該圖像的圖像也會變成Dockerfile
焦油/etc/<application>/``<application>.tar
- 簡要介紹正在執行的映像
docker run
中的映像和scp
tar 文件- 簡要地創建一個臨時 VM 實例並將 PD 添加/附加到它;
scp
tar 文件到 VM 實例;gcloud compute ssh
進入tit,掛載PD,並在掛載點下解壓所需文件
顯而易見的答案是在創建後立即填充每個永久磁碟。
如果應用程序的配置在建構之間發生變化,並且它們必須與正在執行的建構相匹配,那麼如果多個應用程序版本共享同一個 PD 並且應該儲存在那裡的內容髮生衝突,那麼就會出現一個未解決的問題。
如果你不需要擔心跨版本的 PD 共享,那麼你可以使用在應用程序的 pod 中執行的作業來初始化 PD 的內容。Kubernetes 有一個稱為init 容器的功能,旨在使這更容易;但在撰寫本文時它仍然是 Alpha 版。