回答問題1是的,是兩者都是有效和可行的。
我對問題2的回答是,我會完全考慮一種不同的方法,選擇哪一種取決於這是否是關鍵任務系統,並且必須避免數據丟失。
關鍵任務
如果你絕對不能失去你的數據,那麼我建議您綁定安裝一個可靠的磁盤到你的數據庫的容器。綁定安裝實質上是將Docker Host文件系統的一部分安裝到容器中。
因此,採取數據庫文件作爲一個例子,你可以像下列步驟操作:
- 創建一個可靠的磁盤例如定期備份的NFS
- 將此磁盤連接到您的Docker主機
- 將此磁盤裝入我的數據庫容器,然後將數據庫文件寫入此磁盤。
因此,按照上面的例子,可以說我已經創建了一個可靠的磁盤,通過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這將允許您在一個文件中聲明所有這些,然後通過一個命令創建整個環境。