備份大型 docker 卷與綁定掛載與 /var/lib/docker/volumes/ (owncloud)
我某種“繼承”了一個 dockerized 伺服器環境,現在我必須實現一個備份概念 - 特別是對於 Owncloud 容器,它將使用者文件儲存在一個 docker 卷中。醫生文件
$$ 1 $$說“與綁定安裝相比,卷有幾個優點”,因此“是首選機制”。列出的優點之一是“卷更容易備份”,文件建議使用如下命令來創建卷的 tar 備份:
$ docker run --rm --volumes-from dbstore -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata
但是,特別是對於備份(我使用 borg 備份將主機文件同步到異地儲存庫),我發現這種方式有幾個缺點:
- 對於每個備份,您必須在本地複制整個數據,這需要兩倍的磁碟空間和複製時間。
- 每個備份都會創建一個新的 BLOB - 必須再次複製未更改的文件。
- 要恢復單個 Owncloud 文件,您必須從備份中恢復整個 tar(在同步到備份之前解壓會使所需的磁碟空間增加三倍)。…
我對 docker 比較陌生,所以我可能還沒有全面了解 docker 生態系統。但據我目前所知,對於這種情況,我認為綁定掛載將是最好的解決方案。無論如何,我也沒有從體積的其他優勢中受益。還是我錯過了什麼?使用綁定安裝有什麼缺點嗎?
直接備份 /var/lib/docker/volumes/ 怎麼樣?
通過我的搜尋,我想出了來自 owncloud 的這篇博文
$$ 2 $$這建議直接備份 /var/lib/docker/volumes/owncloud_files/_data 。對我來說,這似乎不是最乾淨的方式。 但是,處理目前的情況,我想暫時走這條路。安全嗎?(當然,關於一致性所需的預防措施,例如關閉數據庫容器、owncloud 維護模式等 - 我認為這裡提到的解決方案無論如何都需要這些!?)
$$ 1 $$ https://docs.docker.com/storage/volumes/ $$ 2 $$ https://owncloud.org/news/docker-series-pt-3-automatically-easily-backup-restore-dockerized-owncloud/
無論如何,我也沒有從體積的其他優勢中受益。還是我錯過了什麼?使用綁定安裝有什麼缺點嗎?
我似乎明白 Docker 想讓你忘記主機的存在;事實上,有時您無法訪問它,因此卷是保存數據的最明顯方式。
綁定掛載是主機上的路徑,因此您必須以某種方式在Docker*之外“管理”它(分配空間、掛載分區……)。*也許您已經為此準備了一個系統,例如安裝 Docker、docker-compose 並將其上傳
docker-compose.yml
到伺服器的 Ansible 劇本。但是,如果您不這樣做,或者您只是將您docker-compose
指向一個遠端 Docker 守護程序,那麼您將只想使用它,而不是其他任何東西:那麼您將需要卷中的數據。直接備份 /var/lib/docker/volumes/ 怎麼樣?
我同意這不是一個好主意:那是 Docker 自己的空間,我不會碰它,就像我不會從
/var/lib/postgresql
正在執行的實例上複製一樣。還是我錯過了什麼?
為什麼不執行
borg
而不是tar
在臨時容器中執行?