Zgłębiamy Docker, część 6: praca z danymi

W dzisiejszej części tłumaczenia serii materiałów o Dockerze porozmawiamy o pracy z danymi. A dokładniej – o wolumenach Docker. W tych materiałach nieustannie porównywaliśmy mechanizmy oprogramowania Docker do różnych jadalnych analogii. Nie odchodźmy od tej tradycji także tutaj. Dane w Dockerze możemy porównać do przypraw. Na świecie istnieje wiele rodzajów przypraw, a w Dockerze – wiele sposobów pracy z danymi.

Część 1: podstawy
Część 2: terminy i koncepcje
Część 3: pliki Dockerfile
Część 4: zmniejszanie rozmiarów obrazów i przyspieszanie ich budowy
Część 5: polecenia
Część 6: praca z danymi

Zgłębiamy Docker, część 6: praca z danymi

Proszę zwrócić uwagę, że ten materiał został przygotowany z użyciem silnika Docker w wersji 18.09.1 oraz API w wersji 1.39.

Dane w Dockerze mogą być przechowywane tymczasowo lub na stałe. Zacznijmy od danych tymczasowych.

Tymczasowe przechowywanie danych

W kontenerach Docker organizacja pracy z danymi tymczasowymi może odbywać się na dwa sposoby.

Domyślnie pliki tworzone przez aplikację działającą w kontenerze są przechowywane w warstwie kontenera, która obsługuje zapis. Aby ten mechanizm działał, nie trzeba nic specjalnie konfigurować. Jest to tanie i skuteczne. Aplikacja wystarczy, że zapisze dane i kontynuuje swoją działalność. Jednak po tym, jak kontener przestanie istnieć, znikną również dane zapisane w ten prosty sposób.

Do przechowywania tymczasowych plików w Dockerze można skorzystać również z innego rozwiązania, odpowiedniego w przypadkach, gdy wymagana jest wyższa wydajność niż ta, którą osiąga się przy użyciu standardowego mechanizmu tymczasowego przechowywania danych. Jeśli nie potrzebujesz, aby Twoje dane były przechowywane dłużej, niż trwa kontener, możesz podłączyć do kontenera tmpfs – tymczasowe przechowywanie danych, które korzysta z pamięci RAM hosta. To przyspieszy operacje zapisu i odczytu danych.

Często zdarza się, że dane muszą być przechowywane także po tym, jak kontener przestanie istnieć. W tym celu przydadzą się nam mechanizmy trwałego przechowywania danych.

Stałe przechowywanie danych

Istnieją dwa sposoby, które pozwalają na wydłużenie okresu życia danych poza czas życia kontenera. Jednym ze sposobów jest wykorzystanie technologii bind mount. W tym podejściu do kontenera można zamontować na przykład istniejący folder. Procesy znajdujące się poza Dockerem będą mogły pracować z danymi przechowywanymi w tym folderze. Oto jak wygląda montowanie tmpfs i technologia bind mount.

Zgłębiamy Docker, część 6: praca z danymi
Montowanie tmpfs i bind mount

Wady korzystania z technologii bind mount polegają na tym, że jej użycie komplikuje tworzenie kopii zapasowych, migrację danych oraz współdzielenie danych pomiędzy różnymi kontenerami. O wiele lepiej do trwałego przechowywania danych jest używać wolumenów Docker.

Wolumeny Docker

Wolumen to system plików, który znajduje się na hoście poza kontenerami. Wolumeny są tworzone i zarządzane przez Docker. Oto główne właściwości wolumenów Docker:

  • Są to środki do trwałego przechowywania informacji.
  • Są samodzielne i oddzielone od kontenerów.
  • Mogą być współdzielone przez różne kontenery.
  • Umożliwiają efektywne odczytywanie i zapisywanie danych.
  • Wolumeny można umieszczać na zasobach zdalnego dostawcy chmurowego.
  • Mogą być szyfrowane.
  • Można im nadawać nazwy.
  • Kontener może zorganizować wcześniejsze wypełnienie wolumenu danymi.
  • Są wygodne do testowania.

Jak widać, wolumeny Docker mają znakomite właściwości. Porozmawiajmy o tym, jak je tworzyć.

Tworzenie wolumenów

Wolumeny można tworzyć za pomocą narzędzi Docker lub za pomocą zapytań do API.

Oto instrukcja w Dockerfile, która pozwala na utworzenie wolumenu przy uruchamianiu kontenera.

VOLUME /my_volume

Korzystając z takiej instrukcji Docker, po utworzeniu kontenera utworzy wolumen, zawierający dane już znajdujące się w wskazanym miejscu. Zauważ, że jeśli tworzysz wolumen używając Dockerfile, to nie zwalnia cię z konieczności wskazania punktu montowania wolumenu.

Wolumeny w Dockerfile można tworzyć również w formacie JSON.

Ponadto, wolumeny można tworzyć za pomocą poleceń w wierszu poleceń podczas działania kontenera.

Praca z wolumenami z linii poleceń

▍Tworzenie wolumenu

Samodzielny wolumen można utworzyć następującym poleceniem:

docker volume create --name my_volume

▍Sprawdzanie informacji o wolumenach

Aby wyświetlić listę woluminów Docker, użyj następującej komendy:

docker volume ls

Aby zbadać konkretny wolumin, możesz to zrobić w następujący sposób:

docker volume inspect my_volume

▍Usuwanie woluminu

Wolumin można usunąć w ten sposób:

docker volume rm my_volume

Aby usunąć wszystkie woluminy, które nie są używane przez kontenery, można użyć następującej komendy:

docker volume prune

Przed usunięciem woluminów Docker poprosi cię o potwierdzenie wykonania tej operacji.

Jeśli wolumin jest powiązany z jakimkolwiek kontenerem, takiego woluminu nie można usunąć, dopóki nie zostanie usunięty odpowiedni kontener. Nawet jeśli kontener został usunięty, Docker nie zawsze to rozumie. Jeśli tak się zdarzy, możesz skorzystać z następującej komendy:

docker system prune

Jest ona przeznaczona do czyszczenia zasobów Docker. Po wykonaniu tej komendy powinieneś mieć możliwość usunięcia woluminów, których status do tej pory był określany nieprawidłowo.

Flagi —mount i —volume

Aby pracować z woluminami, przy wywoływaniu komendy docker, często będziesz musiał korzystać z flag. Na przykład, aby stworzyć wolumin podczas tworzenia kontenera, możesz użyć takiej konstrukcji:

docker container run --mount source=my_volume, target=\/container\/path\/for\/volume my_image

W dawnych czasach (przed 2017 rokiem) popularny był flaga --volume. Początkowo ta flaga (można ją również używać w skróconej formie, wtedy wygląda jako -v) była używana dla samodzielnych kontenerów, a flaga --mount — w środowisku Docker Swarm. Jednak od Docker 17.06 flaga --mount może być używana w dowolnych scenariuszach.

Należy zauważyć, że przy używaniu flagi --mount zwiększa się objętość dodatkowych danych, które należy podać w komendzie, ale z kilku powodów lepiej jest używać właśnie tej flagi, a nie --volume. Flaga --mount — to jedyny mechanizm, który pozwala pracować z usługami lub określać parametry sterownika woluminu. Ponadto, praca z tą flagą jest prostsza.

W istniejących przykładach komend, skierowanych na pracę z danymi w Dockerze, możesz napotkać wiele przykładów użycia flagi -v. Próbując dostosować te komendy do siebie, pamiętaj, że flagi --mount i --volume stosują różne formaty parametrów. To znaczy, że nie można po prostu zamienić -v na --mount i uzyskać działającej komendy.

Główna różnica między --mount i --volume polega na tym, że przy używaniu flagi --volume wszystkie parametry zbierają się razem, w jednym polu, a przy używaniu --mount parametry są oddzielone.

Podczas pracy z --mount parametry przedstawione są jako pary klucz-wartość, a mianowicie wygląda to tak klucz=wartość. Te pary oddziela się przecinkami. Oto często używane parametry --mount:

  • type — typ montowania. Wartością dla odpowiedniego klucza mogą być bind, volume lub tmpfs. Mówimy tutaj o wolumenach, to znaczy — interesuje nas wartość volume.
  • source — źródło montowania. Dla nazwanych wolumenów to jest — nazwa wolumenu. Dla nienaowanych wolumenów ten klucz nie jest podawany. Może być skrócony do src.
  • destination — ścieżka, pod którą plik lub folder jest montowany w kontenerze. Ten klucz może być skrócony do dst lub target.
  • readonly — montuje wolumen, który jest przeznaczony tylko do odczytu. Użycie tego klucza nie jest obowiązkowe, nie przypisuje się mu wartości.

Oto przykład użycia --mount z wieloma parametrami:

docker run --mount type=volume,source=volume_name,destination=\/path\/in\/container,readonly my_image

Podsumowanie

Oto przydatne komendy, które można wykorzystać podczas pracy z wolumenami Docker:

  • docker volume create
  • docker volume ls
  • docker volume inspect
  • docker volume rm
  • docker volume prune

Oto lista często używanych parametrów dla --mount, stosowanych w poleceniu typu docker run --mount my_options my_image:

  • type=volume
  • source=volume_name
  • destination=\/path\/in\/container
  • readonly

Teraz, kiedy zakończyliśmy tę serię materiałów o Dockerze, nadszedł czas, aby powiedzieć kilka słów o tym, dokąd mogą się udać ci, którzy uczą się Dockera. Oto duży dobry artykuł o Dockerze. Oto książka o Dockerze (kupując tę książkę, postaraj się zdobyć najnowsze jej wydanie). Oto jeszcze jedna książka, która będzie odpowiednia dla tych, którzy uważają, że praktyka to najlepszy sposób na naukę technologii.

Drodzy Czytelnicy! Jakie materiały o Dockerze poleciłbyś do nauki dla nowicjuszy?

Zgłębiamy Docker, część 6: praca z danymi

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster