Po przeczytaniu dokumentacji poczułem się trochę zdezorientowany, jak najlepiej zarządzać produktywnymi danymi aplikacji / usług.
Wydaje się, że istnieją 3 opcje:
- Wystarczy zmapować wolumin do katalogu hosta (tj.
-v
Argument zadocker run
) - Utwórz obraz kontenera dokowanego dla danych (tj. Osobny kontener i
--volumes-from
) - Tworzenie woluminu dokera (tj.
docker volume create
)
Wygląda na to, że przyjętą praktyką jest opcja nr 2, ale zastanawiam się, jaki jest cel nr 3.
Zwłaszcza, jak właściwie radzisz sobie z tymi scenariuszami docker volume
i czy lepiej jest używać kontenera woluminu danych, czy to w każdej sytuacji?
- Potrzebujesz danych aplikacji w osobnym woluminie i / lub warstwie pamięci na serwerze
- Tworzenie kopii zapasowej
- Przywracanie danych
btrfs scrub
na nim uruchomić , aby znaleźć i naprawić uszkodzone pliki. Nie jestem pewien, jak działają rzeczy dokowane, ale myślę, że to nie chroni przed gniciem danych, więc zawsze potrzebuję pełnego przywracania, jeśli coś złego się stanie, zamiast przywracania pojedynczych plików. Inna myśl, że dodaje kolejną warstwę abstrakcji, więc jeszcze bardziej spowalnia czytanie i pisanie plików. Jakoś nie widzę zalet # 2 i # 3, ale nie mam doświadczenia z dokerem, więc to może się zmienić.Odpowiedzi:
Myślę, że # 2 i # 3 to właściwie to samo, główna różnica polega na tym, że nie ma zatrzymanego kontenera z numerem 3 (jest to dosłownie tylko nazwany wolumin). Na przykład możesz utworzyć nazwany wolumin i zrobić podobnie, jak w przypadku # 2
-v
.Utwórz nazwany wolumin:
Podłącz i zapisz niektóre dane do tego woluminu z kontenera:
Następnie możesz zamontować ten sam
test
wolumin w innym kontenerze i odczytać dane:Zaletą jest to, że wolumin nie zniknie przypadkowo, jeśli usuniesz kontener tylko danych. Teraz zarządzasz nim za pomocą
docker volume
polecenia podrzędnego.Otwiera to również możliwości sterowników woluminów w dalszej części drogi, dzięki czemu możesz być w stanie udostępniać woluminy między hostami (tj. Woluminy nazwane przez NFS). Przykładami tego mogą być Flocker i Konwój . Jeśli chodzi o przenoszenie lub tworzenie kopii zapasowych danych, Convoy ma specjalne pod-komendy do tworzenia kopii zapasowych danych i pozwala na przechowywanie danych w systemie plików NFS lub EBS poza hostem.
Z tego powodu uważam, że bardziej nowatorskim sposobem (Docker 1.9+) jest użycie nazwanego woluminu zamiast kontenera zawierającego tylko dane.
źródło
the volume won't accidentally disappear if you remove the data-only container
. Czy mógłbyś opracować? Dzięki.Począwszy od Docker 1.9, tworzenie nazwanych woluminów za pomocą interfejsu API woluminów (
docker volume create --name mydata
) jest preferowane zamiast kontenera woluminów danych. Od lutego 2016 r. Dokumentacja woluminów Docker jest bardzo nieaktualna. Ludzie w Docker sami sugerują, że kontenery woluminów danych „ nie są już uważane za zalecany wzorzec ”, „ nazwane woluminy powinny być w stanie zastąpić woluminy zawierające tylko dane w większości (jeśli nie wszystkich) przypadkach ” i „ bez powodu, dla którego mogę użyć kontenery tylko z danymi ”.źródło