Docker

在 GKE 上建構和/或執行 Docker 映像之前預填充 GCE 永久磁碟

  • July 30, 2016

我想建構一個 Docker 容器,然後在從 GCE 永久磁碟 (PD) 掛載一些目錄後在 GKE 中執行它。例如,我希望應用程序的(讀寫)配置文件/etc/<application>/比它的 pod 壽命更長(它可能隨時重新啟動。)

正常建構將預設配置文件放入/etc/<application>/其中,並且必須以某種方式將這些文件從映像的臨時磁碟“複製”一次到 PD 中,以便應用程序可以在其預期的環境中啟動。

是否有實現這一目標的最佳實踐?例如,我是否必須在我的 PD 中也掛載 PD Dockerfile,或者我是否可以在部署期間首次由 VM 實例掛載 PD 時以某種方式請求將 PD 與來自另一個目錄/卷/磁碟的文件“同步”?

我沒有聽說過最佳實踐,所以這是我現在採用的:

  1. docker build在完成其他建構步驟之後,帶有該圖像的圖像也會變成Dockerfile焦油/etc/<application>/``<application>.tar
  2. 簡要介紹正在執行的映像docker run中的映像和scptar 文件
  3. 簡要地創建一個臨時 VM 實例並將 PD 添加/附加到它;scptar 文件到 VM 實例;gcloud compute ssh進入tit,掛載PD,並在掛載點下解壓所需文件

顯而易見的答案是在創建後立即填充每個永久磁碟。

如果應用程序的配置在建構之間發生變化,並且它們必須與正在執行的建構相匹配,那麼如果多個應用程序版本共享同一個 PD 並且應該儲存在那裡的內容髮生衝突,那麼就會出現一個未解決的問題。

如果你不需要擔心跨版本的 PD 共享,那麼你可以使用在應用程序的 pod 中執行的作業來初始化 PD 的內容。Kubernetes 有一個稱為init 容器的功能,旨在使這更容易;但在撰寫本文時它仍然是 Alpha 版。

引用自:https://serverfault.com/questions/791675