Jak działa przechowywanie w Dockerze: wolumeny vs montowanie powiązań
Wprowadzenie
W tym samouczku dowiesz się, jak działa przechowywanie danych w Dockerze i jak utrwalać dane za pomocą Wolumenów Dockera i Montowań Powiązanych. Zrozumiesz również kluczowe różnice między tymi podejściami i kiedy używać każdego z nich w produkcji. To pomoże Ci uniknąć utraty danych i zaprojektować niezawodne systemy kontenerowe.
Wymagania wstępne
- Docelowa grupa odbiorców: Początkujący administratorzy systemów
- Szacowany czas: ~30 minut
- System operacyjny: Dowolny system z obsługą Dockera, taki jak Ubuntu 22.04+, Debian 12+, CentOS Stream lub macOS z Docker Desktop
- Oprogramowanie: Docker 24.0.0 lub nowszy
- Uprawnienia: Użytkownik z dostępem do Dockera lub uprawnieniami sudo
- Sprzęt: Co najmniej 2 GB RAM i 10 GB wolnego miejsca na dysku
- Sieć: Dostęp do Internetu w celu pobierania obrazów kontenerów
- Zakładana wiedza: Podstawowe korzystanie z linii poleceń i zrozumienie kontenerów
Krok 1: Zrozumienie, jak działa przechowywanie danych w Dockerze
Kontenery Dockera używają warstwowego systemu plików. Każdy kontener ma warstwę zapisywalną na wierzchu warstw obrazu tylko do odczytu.
Co się dzieje, gdy kontener zapisuje dane
- Docker przechowuje warstwy obrazu jako tylko do odczytu
- Gdy uruchamiasz kontener, Docker dodaje warstwę zapisywalną
- Wszelkie zmiany plików zachodzą tylko w tej warstwie zapisywalnej
Wynik
Gdy usuniesz kontener, wszystkie dane w warstwie zapisywalnej zostaną utracone. Oznacza to, że przechowywanie danych w kontenerze jest domyślnie efemeryczne.
To zachowanie jest przydatne dla aplikacji bezstanowych, ale nie dla baz danych lub usług trwałych.
Krok 2: Tworzenie i używanie Wolumenów Dockera
Wolumeny Dockera to zarządzane lokalizacje przechowywania tworzone i utrzymywane przez Dockera.
Tworzenie wolumenu
Uruchom następujące polecenie:
docker volume create my_volume
Powinieneś zobaczyć zwróconą nazwę wolumenu.
Używanie wolumenu w kontenerze
Uruchom następujące polecenie:
docker run -d -v my_volume:/app/data --name volume_test busybox
Docker montuje wolumen wewnątrz kontenera w /app/data.
Wynik
Dane zapisane w /app/data są trwałe, nawet jeśli kontener zostanie usunięty.
Kluczowe cechy wolumenów
- Zarządzane przez Dockera
- Przechowywane w wewnętrznych katalogach Dockera, takich jak
/var/lib/docker/volumes/ - Łatwe do tworzenia kopii zapasowych i migracji
- Izolowane od struktury systemu plików hosta
Używaj wolumenów dla baz danych i obciążeń produkcyjnych.
Krok 3: Tworzenie i używanie Montowań Powiązanych
Montowania powiązane łączą określony katalog na hoście z katalogiem wewnątrz kontenera.
Używanie montowania powiązanego
Uruchom następujące polecenie:
docker run -d -v /home/<YOUR_USERNAME>/data:/app/data --name bind_test busybox
Wynik
Kontener bezpośrednio uzyskuje dostęp do katalogu hosta. Wszelkie zmiany w katalogu hosta są natychmiast widoczne wewnątrz kontenera.
Kluczowe cechy montowań powiązanych
- Zależne od ścieżek systemu plików hosta
- Pozwalają na bezpośrednią edycję plików z hosta
- Brak izolacji zarządzanej przez Dockera
- Bardziej elastyczne, ale mniej przenośne
Montowania powiązane natychmiast odzwierciedlają zmiany między hostem a kontenerem.
Krok 4: Porównanie Wolumenów i Montowań Powiązanych
Zrozumienie różnic pomaga wybrać odpowiednią opcję.
Wolumeny Dockera
- Zarządzane przez Dockera
- Przenośne między środowiskami
- Bezpieczniejsze do użytku produkcyjnego
- Łatwiejsze do tworzenia kopii zapasowych
- Abstrahowane od systemu plików hosta
Montowania Powiązane
- Zarządzane przez hosta
- Związane z określonymi ścieżkami systemu plików
- Przydatne do rozwoju
- Zapewniają bezpośredni dostęp do plików
- Mniej bezpieczne, jeśli źle skonfigurowane
Krok 5: Wybór między Wolumenami a Montowaniami Powiązanymi w Produkcji
Użyj następujących wytycznych.
Kiedy używać Wolumenów Dockera
- Uruchamianie baz danych, takich jak MySQL lub PostgreSQL
- Przechowywanie danych aplikacji, które muszą być trwałe
- Wdrażanie usług produkcyjnych
- Potrzeba przenośności między serwerami
Kiedy używać Montowań Powiązanych
- Lokalne środowiska deweloperskie
- Bezpośrednia edycja kodu lub plików konfiguracyjnych
- Debugowanie zachowania kontenera
- Tymczasowe lub testowe konfiguracje
Ważne: Montowania powiązane mogą ujawniać wrażliwe pliki hosta kontenerom, jeśli są źle skonfigurowane. Zawsze weryfikuj ścieżki i uprawnienia.
Weryfikacja i testowanie
Utwórz kontener testowy z wolumenem:
docker run -it -v my_volume:/data --name playground busybox
Wewnątrz kontenera utwórz plik:
echo test > /data/file.txt
Wyjdź z kontenera i usuń go:
docker rm -f playground
Uruchom nowy kontener z tym samym wolumenem:
docker run -it -v my_volume:/data --name playground busybox
Sprawdź plik:
cat /data/file.txt
Oczekiwany wynik: Plik nadal istnieje, co potwierdza trwałość danych.
Cofanie zmian
Aby wyczyścić zasoby, uruchom następujące polecenia:
docker rm -f playground volume_test bind_test
docker volume rm my_volume
docker system prune -f
Ważne: Usunięcie wolumenów trwale usuwa wszystkie przechowywane dane.
Rozwiązywanie problemów
- Problem: Dane znikają po ponownym uruchomieniu kontenera
Przyczyna: Nie użyto wolumenu ani montowania powiązanego
Rozwiązanie: Dołącz trwałe przechowywanie za pomocą wolumenów lub montowań powiązanych - Problem: Błędy odmowy dostępu
Przyczyna: Niezgodność uprawnień katalogu hosta
Rozwiązanie: Dostosuj uprawnienia za pomocąchmodlubchown - Problem: Wolumen nie montuje się poprawnie
Przyczyna: Niepoprawna ścieżka lub składnia
Rozwiązanie: Zweryfikuj format montowania i ścieżki
Podsumowanie i kolejne kroki
Nauczyłeś się, jak działa przechowywanie danych w Dockerze i jak utrwalać dane za pomocą wolumenów i montowań powiązanych. Zrozumiałeś również, kiedy używać każdego podejścia w produkcji. Następnie, eksploruj Docker Compose, aby zarządzać aplikacjami wielokontenerowymi i definiować przechowywanie w bardziej uporządkowany sposób.