最近一直在研究Rancher的持久化問題。
目前已找到兩種方式實現Rancher里的容器文件實現持久化方法。
方法一:
配置映射(只適用單個文件,不適用於目錄)
這個算不上是真正的持久化,只是相當於配置一個鍵值,然后鍵值內容等於文件內容,從而使得容器重啟后,該文件內容會自動讀取該鍵值內容,從而實現保持配置文件內容
(1)添加配置映射
(2)輸入映射名稱(可隨意取,但是注意部分特殊字符無法使用),選中命名空間(建議選擇zabbix-agent容器所在命名空間),配置映射鍵(輸入需要保持的文件名字即可),輸入值(直接復制zabbix_agentd.conf的內容)。點擊確認
(3)配置升級容器。找到相應的容器,點擊進入升級界面
下拉找到數據卷,做如下配置
升級該容器,可以發現以下配置內容不會丟失了。當需要修改該文件時,直接在配置映射那里修改對應的值即可
方法二:
映射主機目錄:(同時使用於文件及目錄)
(1)指定該容器運行主機
因為這種方式,相當於將容器內部的文件映射至宿主機,映射之后,宿主機對應的文件和文件夾會自動更新到容器內(PS:注意是,宿主機上的文件或文件夾覆蓋容器內的)。如果不指定運行的主機,可能會導致,該容器升級之后,在另一台主機上運行,例如在192.168.68.233上運行,那么如果233上對應的文件夾是空的,將會使得容器內部對應的文件夾也會被清空,甚至會直接導致容器無法起來,因為它的文件被233上的文件夾覆蓋清空
對應容器點擊進入升級,找到主機調度部分,做以下配置
(2)將容器內的文件和文件夾復制到宿主機
以下命令在宿主機上執行
[root@localhost zhao]# docker cp ec66a6aa7b44:/etc/mongod.conf /zhao/etc/mongod.conf #將容器內部文件映射至宿主機本地,ec66a6aa7b44為容器id invalid output path: directory "/zhao/etc" does not exist #建議都提前創建好對應目錄 [root@localhost zhao]# mkdir -p /zhao/etc [root@localhost zhao]# docker cp ec66a6aa7b44:/etc/mongod.conf /zhao/etc/mongod.conf [root@localhost zhao]# ls db etc test [root@localhost zhao]# cd etc/ [root@localhost etc]# ls #可以看到宿主機本地也有了該容器內部的文件 mongod.conf
(3)配置映射主機目錄
對應容器點擊進入升級,找到數據卷部分,做以下配置。以將mongodb容器的配置文件映射到宿主機持久化為例。映射目錄也是一樣的方式
確認升級,即可完成文件或目錄的映射持久化