5.1 Idea powiązanych katalogów (bind mounts)
Montowanie katalogów hosta w kontenery za pomocą powiązanych katalogów (bind mounts) to potężna funkcja Dockera, która pozwala kontenerom bezpośrednio korzystać z plików i katalogów znajdujących się w systemie hosta. Jest to szczególnie przydatne w rozwoju, testowaniu i konfiguracji, kiedy trzeba korzystać z lokalnych plików bez ich kopiowania do kontenera. W tym wykładzie omówimy, jak używać powiązanych katalogów, podamy przykłady i najlepsze praktyki.
Powiązane katalogi pozwalają montować konkretne katalogi lub pliki z systemu hosta w kontenery. To różni się od volumes, które są zarządzane przez Dockera i przechowywane w specjalnym katalogu.
Zalety używania powiązanych katalogów
- Bezpośredni dostęp do plików hosta: Kontenery mogą bezpośrednio korzystać i modyfikować pliki znajdujące się na hoście.
- Wygoda w programowaniu: Programiści mogą modyfikować pliki na hoście i widzieć te zmiany w kontenerach w czasie rzeczywistym.
- Elastyczność: Każdy katalog na hoście może być zamontowany w kontener.
Komenda do montowania powiązanych katalogów
Powiązane katalogi montuje się za pomocą parametrów -v
lub --mount
podczas uruchamiania kontenera.
5.2 Przykłady użycia parametru -v
1. Montowanie katalogu hosta w kontenerze
Najprostszy przykład montowania katalogu hosta do kontenera:
docker run -d --name my_container -v /path/on/host:/path/in/container nginx
W tym przykładzie katalog /path/on/host
na hoście jest montowany jako katalog /path/in/container
wewnątrz kontenera nginx.
2. Montowanie pliku hosta w kontenerze
Możesz również montować pojedyncze pliki:
docker run -d --name my_container -v /path/on/host/config.conf:/etc/nginx/nginx.conf nginx
W tym przykładzie plik konfiguracyjny config.conf
na hoście jest montowany jako plik konfiguracyjny nginx.conf
wewnątrz kontenera.
5.3 Przykłady użycia parametru --mount
Parametr --mount
oferuje bardziej szczegółowy sposób montowania zewnętrznych katalogów z możliwością określenia różnych parametrów.
1. Montowanie katalogu za pomocą --mount
docker run -d --name my_container --mount type=bind,source=/path/on/host,target=/path/in/container nginx
Ten przykład jest podobny do poprzedniego z -v
, ale używa bardziej szczegółowej składni.
2. Montowanie w trybie tylko do odczytu
docker run -d --name my_container --mount
type=bind,source=/path/on/host,target=/path/in/container,readonly nginx
W tym przykładzie katalog jest montowany w trybie tylko do odczytu, co zapobiega zmianom plików w kontenerze.
5.4 Praktyczne przykłady
Do tworzenia aplikacji webowej możesz zamontować katalog z kodem źródłowym na hoście w kontenerze.
Tworzenie katalogu z kodem źródłowym na hoście:
mkdir -p ~/my_web_app
echo "Witaj, Świecie!" > ~/my_web_app/index.html
Uruchomienie kontenera z montowaniem katalogu:
docker run -d --name web_dev -v ~/my_web_app:/usr/share/nginx/html nginx
Teraz wszelkie zmiany w katalogu ~/my_web_app na hoście będą natychmiast widoczne w kontenerze.
Przykład 2: Użycie plików konfiguracyjnych
Możesz zamontować pliki konfiguracyjne z katalogu na hoście w kontenerze.
Tworzenie pliku konfiguracyjnego na hoście:
echo "user www-data;" > ~/nginx.conf
echo "worker_processes auto;" >> ~/nginx.conf
Uruchomienie kontenera z montowaniem pliku konfiguracyjnego:
docker run -d --name nginx_custom -v ~/nginx.conf:/etc/nginx/nginx.conf nginx
W tym przykładzie plik konfiguracji Nginx na hoście jest używany wewnątrz kontenera.
5.5 Sprawdzanie zamontowanych katalogów i plików
Możesz sprawdzić zawartość zamontowanych katalogów i plików, używając komendy docker exec do wykonania poleceń wewnątrz kontenera.
Przykład
Sprawdzanie zawartości katalogu:
docker exec -it my_container ls /path/in/container
Sprawdzanie zawartości pliku:
docker exec -it my_container cat /path/in/container/config.conf
Usuwanie powiązanych katalogów
Powiązane katalogi nie są zarządzane bezpośrednio przez Dockera, dlatego ich usunięcie odbywa się na poziomie systemu plików hosta.
Przykład
Usuwanie powiązanego katalogu na hoście:
rm -r /path/on/host
GO TO FULL VERSION