2017-01-12 68 views
0

假設您正在試圖dockerise數據庫(例如couchdb)。 再就是你考慮體積至少兩種資產:碼頭容器容器策略

  • 數據庫文件
  • 日誌文件

讓我們進一步假設你想保持DB-文件私人使用,但要公開的日誌文件供以後處理。

至於我的已瞭解文件,你有兩個選擇:

  1. 首先選擇

    • 定義兩個管理的卷,對數和DB-文件的DB-圖像
    • 將這些進口到第二個容器(您將同時獲得)並使用原木
  2. 第二個選項

    • 創建數據容器與託管量爲日誌
    • 與爲DB-文件只
    • 進口從數據容器中運行時的日誌量DB託管卷創建DB-圖像 - 圖像

兩個問題:

  1. 這兩個選項是否真的有效/可能?
  2. 有什麼更好的方法來做到這一點?

BR沃爾克

回答

0

回答問題1是的,是兩者都是有效和可行的。

我對問題2的回答是,我會完全考慮一種不同的方法,選擇哪一種取決於這是否是關鍵任務系統,並且必須避免數據丟失。

關鍵任務

如果你絕對不能失去你的數據,那麼我建議您綁定安裝一個可靠的磁盤到你的數據庫的容器。綁定安裝實質上是將Docker Host文件系統的一部分安裝到容器中。

因此,採取數據庫文件作爲一個例子,你可以像下列步驟操作:

  1. 創建一個可靠的磁盤例如定期備份的NFS
  2. 將此磁盤連接到您的Docker主機
  3. 將此磁盤裝入我的數據庫容器,然後將數據庫文件寫入此磁盤。

因此,按照上面的例子,可以說我已經創建了一個可靠的磁盤,通過NFS共享並安裝在我的Docker主機上,位於/reliable/disk。要使用我的數據庫中,我將運行以下命令泊塢窗:

docker run -d -v /reliable/disk:/data/db my-database-image

這樣,我知道數據庫文件被寫入到可靠的存儲。即使我丟失了Docker主機,我仍然會擁有數據庫文件,並且可以通過在可以訪問NFS共享的另一臺主機上運行我的數據庫容器來輕鬆恢復。

可以用於數據庫日誌做同樣的事情:

docker run -d -v /reliable/disk/data/db:/data/db -v /reliable/disk/logs/db:/logs/db my-database-image

另外,你可以很容易地結合這些卷安裝到其他容器獨立的任務。你可能要考慮綁定安裝他們只讀到其他容器中,以保護您的數據:

docker run -d -v /reliable/disk/logs/db:/logs/db:ro my-log-processor

這將是我推薦的方法,如果這是一個關鍵任務系統。

不是關鍵任務

如果系統不是關鍵任務,你可以容忍一個更高的潛在的數據丟失,然後我想看看這恰恰是用於你想要做什麼Docker Volume API:管理併爲應該超出容器生命週期的數據創建卷。

有關docker volume命令的好處是,它可以讓你創建了一個名爲卷,如果你他們的名字以及它可以很明顯的人,他們使用什麼:

docker volume create db-data docker volume create db-logs

然後,您可以在命令行安裝這些捲到你的容器:

docker run -d -v db-data:/db/data -v db-logs:/logs/db my-database-image

這些產能活過你的容器和生命週期如果您的Docker主機重新存儲在文件系統上。您可以使用:

docker volume inspect db-data

找出數據被保存,如果你想備份該位置。

您可能還想看看類似Docker Compose這將允許您在一個文件中聲明所有這些,然後通過一個命令創建整個環境。