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

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.

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.

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"}

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"

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 Zasoby → Zaawansowane i znajdź opcję 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.

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.
Dodaj komentarz