Jak bezpiecznie przenieść woluminy Docker na większą partycję, gdy brakuje miejsca

Jak bezpiecznie przenieść woluminy Docker na większą partycję, gdy brakuje miejsca

Domyślnie Docker organizuje swoje dane w katalogu „/var/lib/docker” na partycji głównej. Wraz z rozwojem aplikacji i kontenerów, katalog ten może szybko zająć znaczną ilość miejsca. Objawy takie jak obniżona wydajność serwera, brak możliwości zapisania danych lub losowe awarie często wskazują na to, że partycja główna zbliża się do pełnej pojemności. W tym przewodniku omówiono skuteczne strategie przenoszenia woluminów lub danych Dockera na alternatywną partycję, zmniejszając w ten sposób obciążenie partycji głównej.

Znaczenie przenoszenia woluminów Docker

Kontenery Dockera często generują znaczne ilości trwałych danych, które mogą szybko wyczerpać pojemność partycji głównej. Przeniesienie woluminów Dockera na inną partycję może przynieść kilka korzyści:

  • Zwolnij miejsce w systemie plików głównych
  • Unikaj awarii systemu spowodowanych niedoborem miejsca na dysku
  • Przydzielanie większych danych aplikacji do ekskluzywnych rozwiązań pamięci masowej
  • Ulepsz ogólne zarządzanie zasobami pamięci masowej

Na przykład kontenery baz danych, takie jak MySQL czy PostgreSQL, mogą przechowywać wiele gigabajtów danych. Przeniesienie tych woluminów na większą partycję może znacznie poprawić stabilność systemu.

Jak znaleźć katalog woluminu Docker

Zlokalizowanie katalogu woluminów Docker to kluczowy pierwszy krok przed rozpoczęciem przenoszenia. Użyj poniższego polecenia, aby wyświetlić listę wszystkich dostępnych woluminów Docker:

docker volume ls

Inspekcja woluminów Docker

Aby uzyskać szczegółowe informacje o konkretnym woluminie, wykonaj następujące polecenie:

docker volume inspect volume_name

W wynikach znajdź Mountpointpole wskazujące dokładny katalog, w którym Docker przechowuje dane woluminu.

Sprawdź konkretny wolumin Dockera

Jak przenieść cały katalog główny danych Dockera

Aby przenieść wszystkie dane Dockera – w tym woluminy, obrazy i logi – na inną partycję, możesz przenieść cały katalog pamięci masowej Dockera. To kompleksowe podejście gwarantuje, że katalog „/var/lib/docker” nie zostanie zapełniony.

Zacznij od zatrzymania usługi Docker, aby zapobiec modyfikacjom plików podczas migracji:

sudo systemctl stop docker

Następnie użyj polecenia rsync, aby skopiować dane Docker:

sudo rsync -avxP /var/lib/docker/ /path/to/new/partition/docker-data/

To polecenie spowoduje replikację katalogu Docker, zachowując uprawnienia i wyświetlając postęp transferu.

Kopiuj dane Docker Rsync

Jeśli chcesz zachować dodatkowe atrybuty Dockera, możesz użyć tego ulepszonego polecenia:

sudo rsync -aHAX --info=progress2 /var/lib/docker/ /mnt/docker-data/

To polecenie jest lepsze ze względu na zachowanie większej ilości metadanych systemu plików i szczegółowe wskazanie postępu.

Po przeniesieniu zmień nazwę poprzedniego katalogu danych na kopię zapasową:

sudo mv /var/lib/docker /var/lib/docker.old

Zaktualizuj konfigurację Dockera, edytując plik demona za pomocą:

sudo nano /etc/docker/daemon.json

Dodaj następującą konfigurację:

{"data-root": "/path/to/new/partition/docker-data"}

Aktualizacja konfiguracji Dockera

Następnie uruchom ponownie Dockera, wykonując:

sudo systemctl start docker

Potwierdź, że katalog danych Docker został pomyślnie zaktualizowany za pomocą:

docker info | grep "Docker Root Dir"

Potwierdź nowy katalog danych Docker

Jeżeli wszystko wydaje się poprawne, możesz usunąć starą kopię zapasową:

sudo rm -rf /var/lib/docker.old

Przenoszenie wszystkich danych Docker za pomocą Docker Desktop (metoda GUI)

Jeśli wolisz interfejs graficzny, Docker Desktop umożliwia przeniesienie wszystkich danych Dockera poprzez modyfikację lokalizacji obrazu dysku. Ta metoda skutecznie przenosi wszystkie dane przechowywane w Dockerze – w tym obrazy, kontenery i woluminy – do nowej lokalizacji.

Otwórz Docker Desktop, przejdź do Ustawień, przejdź do ZasobyZaawansowane i znajdź opcję Lokalizacja obrazu dysku.

Lokalizacja obrazu dysku

Wybierz Przeglądaj, aby wskazać katalog na preferowanej partycji dla pamięci masowej Dockera, na przykład „/mnt/newdisk/docker-data”.Kliknij Zastosuj i uruchom ponownie, aby rozpocząć przenoszenie danych.

Zmień partycję

Przenoszenie danych o określonej objętości

Aby uzyskać większą elastyczność, możesz przenieść konkretny wolumin Dockera na inną partycję, korzystając z niego w kontenerze za pomocą montowania z powiązaniem hosta. To podejście jest bezpieczne, proste i upraszcza procesy tworzenia kopii zapasowych. Zacznij od zatrzymania kontenera korzystającego z woluminu:

docker stop container_name

Następnie skorzystaj z poniższego polecenia, rsyncaby bezpiecznie przesłać dane woluminu:

sudo rsync -a /var/lib/docker/volumes/my_volume/_data/ /data/docker/my_volume/

To polecenie przeniesie całą zawartość z poprzedniego woluminu do „/data/docker/my_volume”.

Musisz dostosować plik „docker-compose.yml” tak, aby odzwierciedlał podłączenie powiązania zamiast woluminu zarządzanego przez Dockera:

services: my_service: volumes: - /data/docker/my_volume:/container/path

Pamiętaj o zastąpieniu /container/pathścieżki montowania oryginalną ścieżką w kontenerze. Wdróż ponownie kontener za pomocą następującego polecenia:

docker-compose up -d

Wniosek

Przeniesienie woluminów Dockera lub całego katalogu danych Dockera na większą partycję może znacznie zwolnić miejsce w głównym systemie plików, zwiększając stabilność serwera. To proaktywne podejście minimalizuje ryzyko utraty danych i upraszcza przyszłe zarządzanie pamięcią masową.

Jeśli przeniesienie całego katalogu Docker okaże się niewykonalne, istnieją inne opcje odzyskania przestrzeni, takie jak użycie polecenia docker system prunew celu wyeliminowania nieużywanych kontenerów, obrazów, sieci i pamięci podręcznych lub zastosowanie montowań powiązań systemu Linux w celu przeniesienia dużych katalogów bez zakłócania działania Dockera.

Źródło i obrazy

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *