1.1 Wolumeny (Volumes)
Przechowywanie danych w Docker to istotna część pracy z kontenerami. Same kontenery są efemeryczne, co oznacza, że dane w ich wnętrzu zostaną utracone po zatrzymaniu lub usunięciu kontenera. Aby zachować dane pomiędzy uruchomieniami i zapewnić ich długoterminowe przechowywanie, Docker oferuje dwie główne technologie: wolumeny (volumes) i mounty katalogów (bind mounts).
Wolumeny (Volumes)
Wolumeny to zasoby zarządzane przez Docker, służące do przechowywania danych. Istnieją one niezależnie od cyklu życia kontenerów, co pozwala na ich użycie do długoterminowego przechowywania danych. Wolumeny mogą być tworzone i zarządzane przez Docker, co zapewnia wygodny sposób przechowywania danych poza kontenerami.
Zalety używania wolumenów
- Izolacja od hosta: wolumeny są przechowywane w specjalnym katalogu na hoście, zarządzanym przez Docker, co zapewnia ich izolację.
- Łatwość zarządzania: Docker oferuje wygodne komendy do tworzenia, usuwania i zarządzania wolumenami.
- Zgodność i przenośność: wolumeny można łatwo przenosić między różnymi hostami i używać z różnymi kontenerami.
Przykład stworzenia i użycia wolumenów
Tworzenie wolumenu:
docker volume create my_volume
Użycie wolumenu w kontenerze:
W tym przykładzie wolumen my_volume
jest montowany w katalogu /data
wewnątrz kontenera my_container
.
docker run -d --name my_container -v my_volume:/data nginx
1.2 Powiązane katalogi (Bind Mounts)
Powiązane katalogi pozwalają montować określone katalogi hosta w kontenerach. To umożliwia kontenerom korzystanie z plików i katalogów znajdujących się na hoście, co jest szczególnie przydatne w czasie tworzenia i testowania, kiedy trzeba pracować z lokalnymi plikami.
Zalety korzystania z powiązanych katalogów:
- Bezpośredni dostęp do plików hosta: kontenery mogą bezpośrednio korzystać z plików i katalogów znajdujących się na hoście.
- Wygoda podczas developmentu: programiści mogą łatwo zmieniać pliki na hoście i widzieć te zmiany w kontenerach w czasie rzeczywistym.
- Elastyczność: powiązane katalogi mogą być dowolnymi katalogami na hoście, co daje większą elastyczność w zarządzaniu danymi.
Przykład korzystania z powiązanych katalogów
Uruchomienie kontenera z powiązanym katalogiem:
docker run -d --name my_container -v /path/on/host:/data nginx
W tym przykładzie katalog /path/on/host
na hoście jest montowany jako /data
wewnątrz kontenera my_container
.
Porównanie wolumenów i powiązanych katalogów:
Charakterystyka | Wolumeny | Powiązane katalogi |
---|---|---|
Przechowywanie danych | Zarządzane przez Docker | Zarządzane przez użytkownika |
Izolacja | Oddzielone od systemu plików hosta | Wykorzystują system plików hosta |
Wydajność | Optymalizowana dla Dockera | Zależy od systemu plików hosta |
Zastosowanie | Trwałe przechowywanie danych | Development i testowanie |
1.3 Praktyczne przykłady
Praktyczne przykłady użycia
Przykład 1: Użycie volumes dla bazy danych
Aby zapewnić długoterminowe przechowywanie danych bazy danych, można użyć volumes.
Tworzenie volume:
docker volume create db_data
Uruchomienie kontenera bazy danych przy użyciu volume:
docker run -d --name postgres -e POSTGRES_PASSWORD=mysecretpassword -v
db_data:/var/lib/postgresql/data postgres
Przykład 2: Użycie bind directories dla web developmentu
Do tworzenia aplikacji webowej można użyć bind directories, aby zmiany w lokalnych plikach były od razu widoczne w kontenerze.
Uruchomienie kontenera z bind directory:
docker run -d --name web_dev -v $(pwd)/my_website:/usr/share/nginx/html nginx
W tym przykładzie bieżąca lokalna ścieżka my_website
jest montowana w katalogu /usr/share/nginx/html
kontenera nginx
.
GO TO FULL VERSION