我似乎無法在任何地方找到答案。大量的教程指出,擁有一個只有數據的容器就是你在docker中實現持久性數據的方式。然而我不明白的是,只要數據只存在容器,數據似乎只是持久的。當它關閉並重新啓動時,數據就會消失。Docker'data only container'正在關閉
考慮到沒有系統會有100%的運行時間,並且我希望長期數據庫的內容能夠堅持超越物理系統重啓等。我如何正確保存數據?
我似乎無法在任何地方找到答案。大量的教程指出,擁有一個只有數據的容器就是你在docker中實現持久性數據的方式。然而我不明白的是,只要數據只存在容器,數據似乎只是持久的。當它關閉並重新啓動時,數據就會消失。Docker'data only container'正在關閉
考慮到沒有系統會有100%的運行時間,並且我希望長期數據庫的內容能夠堅持超越物理系統重啓等。我如何正確保存數據?
大量的教程指出擁有一個只有數據的容器是您在docker中實現持久性數據的方式。
請注意,最近的Docker版本不再是這種情況;卷現在是「頭等」公民,可以使用docker volume
命令創建/刪除/等等。這意味着你可以通過運行創造一個持久的數據量:
$ docker volume create --name myvolume
而且以後你可以連接到它是這樣的:
$ docker run -v myvolume:/data ...
我不明白不過的是,該數據只有只有數據容器存在時才似乎是持久的。
如果您在問題中包含有關如何創建數據專用容器的信息,這將有所幫助。請注意,只有數據容器而不是必須「運行」纔有用;它只是存在而已。因此,例如,我可以創建這樣一個唯一的數據容器:
$ docker run -v /data --name datacontainer busybox true
這將,當然,運行/bin/true
然後立即退出:
$ docker ps -a
47568a43d386 busybox "true" 7 seconds ago Exited (0) 6 seconds ago datacontainer
但是,即使容器已退出我可以使用該卷的新容器:
$ docker run -it --volumes-from datacontainer busybox sh
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/tank-docker--vol
83844100 2398688 81445412 3% /data
這種機制,你會用什麼在碼頭工人獲得持久卷早於1.10,但不再是(1.9,也許?)由於docker volume
命令的需要。
只是爲了補充這一點對於任何正在掙扎的人來說,我都是。您的僅數據容器將創建一個具有生成名稱的卷(例如,4488845jgjg3)。當你下一個實例化容器時,它會用不同的名稱創建第二個卷。這兩個卷都存在於主機上,但除非通過id引用它們,否則不會自動訪問它們。 – Andy
這就是爲什麼給數據容器一個名稱,並使用'--volumes-from'來訪問卷(以便您不必擔心單個卷的標識)。 – larsks