{"id":32873,"date":"2019-10-31T21:49:25","date_gmt":"2019-10-31T18:49:25","guid":{"rendered":"https:\/\/prohoster.info\/blog\/izuchaem-docker-chast-6-rabota-s-dannymi\/"},"modified":"2019-10-31T21:49:25","modified_gmt":"2019-10-31T18:49:25","slug":"izuchaem-docker-chast-6-rabota-s-dannymi","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/izuchaem-docker-chast-6-rabota-s-dannymi","title":{"rendered":"Zg\u0142\u0119biamy Docker, cz\u0119\u015b\u0107 6: praca z danymi","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>W dzisiejszej cz\u0119\u015bci t\u0142umaczenia serii materia\u0142\u00f3w o Dockerze porozmawiamy o pracy z danymi. A dok\u0142adniej \u2013 o wolumenach Docker. W tych materia\u0142ach nieustannie por\u00f3wnywali\u015bmy mechanizmy oprogramowania Docker do r\u00f3\u017cnych jadalnych analogii. Nie odchod\u017amy od tej tradycji tak\u017ce tutaj. Dane w Dockerze mo\u017cemy por\u00f3wna\u0107 do przypraw. Na \u015bwiecie istnieje wiele rodzaj\u00f3w przypraw, a w Dockerze \u2013 wiele sposob\u00f3w pracy z danymi.<\/p>\n<p>\u2192 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/post\/438796\/\">Cz\u0119\u015b\u0107 1: podstawy<\/a><\/noindex><br \/>\n\u2192 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/post\/439978\/\">Cz\u0119\u015b\u0107 2: terminy i koncepcje<\/a><\/noindex><br \/>\n\u2192 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/post\/439980\/\">Cz\u0119\u015b\u0107 3: pliki Dockerfile<\/a><\/noindex><br \/>\n\u2192 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/post\/440658\/\">Cz\u0119\u015b\u0107 4: zmniejszanie rozmiar\u00f3w obraz\u00f3w i przyspieszanie ich budowy<\/a><\/noindex><br \/>\n\u2192 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/post\/440660\/\">Cz\u0119\u015b\u0107 5: polecenia<\/a><\/noindex><br \/>\n\u2192 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/post\/441574\/\">Cz\u0119\u015b\u0107 6: praca z danymi<\/a><\/noindex><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/ruvds\/blog\/441574\/\"><img decoding=\"async\" alt=\"Zg\u0142\u0119biamy Docker, cz\u0119\u015b\u0107 6: praca z danymi\" src=\"\/wp-content\/uploads\/2019\/05\/b46a9525df1a3ed70d8e2625fbfd42f6.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nProsz\u0119 zwr\u00f3ci\u0107 uwag\u0119, \u017ce ten materia\u0142 zosta\u0142 przygotowany z u\u017cyciem silnika Docker w wersji 18.09.1 oraz API w wersji <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.docker.com\/engine\/api\/version-history\/\">1.39<\/a><\/noindex>.<\/p>\n<p>Dane w Dockerze mog\u0105 by\u0107 przechowywane tymczasowo lub na sta\u0142e. Zacznijmy od danych tymczasowych.<\/p>\n<h2>Tymczasowe przechowywanie danych<\/h2>\n<p>\nW kontenerach Docker organizacja pracy z danymi tymczasowymi mo\u017ce odbywa\u0107 si\u0119 na dwa sposoby.<\/p>\n<p>Domy\u015blnie pliki tworzone przez aplikacj\u0119 dzia\u0142aj\u0105c\u0105 w kontenerze s\u0105 przechowywane w warstwie kontenera, kt\u00f3ra obs\u0142uguje zapis. Aby ten mechanizm dzia\u0142a\u0142, nie trzeba nic specjalnie konfigurowa\u0107. Jest to tanie i skuteczne. Aplikacja wystarczy, \u017ce zapisze dane i kontynuuje swoj\u0105 dzia\u0142alno\u015b\u0107. Jednak po tym, jak kontener przestanie istnie\u0107, znikn\u0105 r\u00f3wnie\u017c dane zapisane w ten prosty spos\u00f3b.<\/p>\n<p>Do przechowywania tymczasowych plik\u00f3w w Dockerze mo\u017cna skorzysta\u0107 r\u00f3wnie\u017c z innego rozwi\u0105zania, odpowiedniego w przypadkach, gdy wymagana jest wy\u017csza wydajno\u015b\u0107 ni\u017c ta, kt\u00f3r\u0105 osi\u0105ga si\u0119 przy u\u017cyciu standardowego mechanizmu tymczasowego przechowywania danych. Je\u015bli nie potrzebujesz, aby Twoje dane by\u0142y przechowywane d\u0142u\u017cej, ni\u017c trwa kontener, mo\u017cesz pod\u0142\u0105czy\u0107 do kontenera tmpfs \u2013 tymczasowe przechowywanie danych, kt\u00f3re korzysta z pami\u0119ci RAM hosta. To przyspieszy operacje zapisu i odczytu danych.<\/p>\n<p>Cz\u0119sto zdarza si\u0119, \u017ce dane musz\u0105 by\u0107 przechowywane tak\u017ce po tym, jak kontener przestanie istnie\u0107. W tym celu przydadz\u0105 si\u0119 nam mechanizmy trwa\u0142ego przechowywania danych.<\/p>\n<h2>Sta\u0142e przechowywanie danych<\/h2>\n<p>\nIstniej\u0105 dwa sposoby, kt\u00f3re pozwalaj\u0105 na wyd\u0142u\u017cenie okresu \u017cycia danych poza czas \u017cycia kontenera. Jednym ze sposob\u00f3w jest wykorzystanie technologii bind mount. W tym podej\u015bciu do kontenera mo\u017cna zamontowa\u0107 na przyk\u0142ad istniej\u0105cy folder. Procesy znajduj\u0105ce si\u0119 poza Dockerem b\u0119d\u0105 mog\u0142y pracowa\u0107 z danymi przechowywanymi w tym folderze. Oto jak <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.docker.com\/storage\/volumes\/\">wygl\u0105da<\/a><\/noindex> montowanie tmpfs i technologia bind mount.<\/p>\n<p><img decoding=\"async\" alt=\"Zg\u0142\u0119biamy Docker, cz\u0119\u015b\u0107 6: praca z danymi\" src=\"\/wp-content\/uploads\/2019\/05\/73b9b7fd59b1321edb9f58953285d8d5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Montowanie tmpfs i bind mount<\/i><\/p>\n<p>Wady korzystania z technologii bind mount polegaj\u0105 na tym, \u017ce jej u\u017cycie komplikuje tworzenie kopii zapasowych, migracj\u0119 danych oraz wsp\u00f3\u0142dzielenie danych pomi\u0119dzy r\u00f3\u017cnymi kontenerami. O wiele lepiej do trwa\u0142ego przechowywania danych jest u\u017cywa\u0107 wolumen\u00f3w Docker.<\/p>\n<h2>Wolumeny Docker<\/h2>\n<p>\nWolumen to system plik\u00f3w, kt\u00f3ry znajduje si\u0119 na ho\u015bcie poza kontenerami. Wolumeny s\u0105 tworzone i zarz\u0105dzane przez Docker. Oto g\u0142\u00f3wne w\u0142a\u015bciwo\u015bci wolumen\u00f3w Docker:<\/p>\n<ul>\n<li>S\u0105 to \u015brodki do trwa\u0142ego przechowywania informacji.<\/li>\n<li>S\u0105 samodzielne i oddzielone od kontener\u00f3w.<\/li>\n<li>Mog\u0105 by\u0107 wsp\u00f3\u0142dzielone przez r\u00f3\u017cne kontenery.<\/li>\n<li>Umo\u017cliwiaj\u0105 efektywne odczytywanie i zapisywanie danych.<\/li>\n<li>Wolumeny mo\u017cna umieszcza\u0107 na zasobach zdalnego dostawcy chmurowego.<\/li>\n<li>Mog\u0105 by\u0107 szyfrowane.<\/li>\n<li>Mo\u017cna im nadawa\u0107 nazwy.<\/li>\n<li>Kontener mo\u017ce zorganizowa\u0107 wcze\u015bniejsze wype\u0142nienie wolumenu danymi.<\/li>\n<li>S\u0105 wygodne do testowania.<\/li>\n<\/ul>\n<p>\nJak wida\u0107, wolumeny Docker maj\u0105 znakomite w\u0142a\u015bciwo\u015bci. Porozmawiajmy o tym, jak je tworzy\u0107.<\/p>\n<h2>Tworzenie wolumen\u00f3w<\/h2>\n<p>\nWolumeny mo\u017cna tworzy\u0107 za pomoc\u0105 narz\u0119dzi Docker lub za pomoc\u0105 zapyta\u0144 do API.<\/p>\n<p>Oto instrukcja w Dockerfile, kt\u00f3ra pozwala na utworzenie wolumenu przy uruchamianiu kontenera.<\/p>\n<pre><code class=\"plaintext\">VOLUME \/my_volume<\/code><\/pre>\n<p>\nKorzystaj\u0105c z takiej instrukcji Docker, po utworzeniu kontenera utworzy wolumen, zawieraj\u0105cy dane ju\u017c znajduj\u0105ce si\u0119 w wskazanym miejscu. Zauwa\u017c, \u017ce je\u015bli tworzysz wolumen u\u017cywaj\u0105c Dockerfile, to nie zwalnia ci\u0119 z konieczno\u015bci wskazania punktu montowania wolumenu.<\/p>\n<p>Wolumeny w Dockerfile mo\u017cna tworzy\u0107 r\u00f3wnie\u017c w formacie JSON.<\/p>\n<p>Ponadto, wolumeny mo\u017cna tworzy\u0107 za pomoc\u0105 polece\u0144 w wierszu polece\u0144 podczas dzia\u0142ania kontenera.<\/p>\n<h2>Praca z wolumenami z linii polece\u0144<\/h2>\n<p><\/p>\n<h3>\u258dTworzenie wolumenu<\/h3>\n<p>\nSamodzielny wolumen mo\u017cna utworzy\u0107 nast\u0119puj\u0105cym poleceniem:<\/p>\n<pre><code class=\"plaintext\">docker volume create --name my_volume<\/code><\/pre>\n<p><\/p>\n<h3>\u258dSprawdzanie informacji o wolumenach<\/h3>\n<p>\nAby wy\u015bwietli\u0107 list\u0119 wolumin\u00f3w Docker, u\u017cyj nast\u0119puj\u0105cej komendy:<\/p>\n<pre><code class=\"plaintext\">docker volume ls<\/code><\/pre>\n<p>\nAby zbada\u0107 konkretny wolumin, mo\u017cesz to zrobi\u0107 w nast\u0119puj\u0105cy spos\u00f3b:<\/p>\n<pre><code class=\"plaintext\">docker volume inspect my_volume<\/code><\/pre>\n<p><\/p>\n<h3>\u258dUsuwanie woluminu<\/h3>\n<p>\nWolumin mo\u017cna usun\u0105\u0107 w ten spos\u00f3b:<\/p>\n<pre><code class=\"plaintext\">docker volume rm my_volume<\/code><\/pre>\n<p>\nAby usun\u0105\u0107 wszystkie woluminy, kt\u00f3re nie s\u0105 u\u017cywane przez kontenery, mo\u017cna u\u017cy\u0107 nast\u0119puj\u0105cej komendy:<\/p>\n<pre><code class=\"plaintext\">docker volume prune<\/code><\/pre>\n<p>\nPrzed usuni\u0119ciem wolumin\u00f3w Docker poprosi ci\u0119 o potwierdzenie wykonania tej operacji.<\/p>\n<p>Je\u015bli wolumin jest powi\u0105zany z jakimkolwiek kontenerem, takiego woluminu nie mo\u017cna usun\u0105\u0107, dop\u00f3ki nie zostanie usuni\u0119ty odpowiedni kontener. Nawet je\u015bli kontener zosta\u0142 usuni\u0119ty, Docker nie zawsze to rozumie. Je\u015bli tak si\u0119 zdarzy, mo\u017cesz skorzysta\u0107 z nast\u0119puj\u0105cej komendy:<\/p>\n<pre><code class=\"plaintext\">docker system prune<\/code><\/pre>\n<p>\nJest ona przeznaczona do czyszczenia zasob\u00f3w Docker. Po wykonaniu tej komendy powiniene\u015b mie\u0107 mo\u017cliwo\u015b\u0107 usuni\u0119cia wolumin\u00f3w, kt\u00f3rych status do tej pory by\u0142 okre\u015blany nieprawid\u0142owo.<\/p>\n<h2>Flagi &#8212;mount i &#8212;volume<\/h2>\n<p>\nAby pracowa\u0107 z woluminami, przy wywo\u0142ywaniu komendy <code>docker<\/code>, cz\u0119sto b\u0119dziesz musia\u0142 korzysta\u0107 z flag. Na przyk\u0142ad, aby stworzy\u0107 wolumin podczas tworzenia kontenera, mo\u017cesz u\u017cy\u0107 takiej konstrukcji:<\/p>\n<pre><code class=\"plaintext\">docker container run --mount source=my_volume, target=\\\/container\\\/path\\\/for\\\/volume my_image<\/code><\/pre>\n<p>\nW dawnych czasach (przed 2017 rokiem) popularny by\u0142 flaga <code>--volume<\/code>. Pocz\u0105tkowo ta flaga (mo\u017cna j\u0105 r\u00f3wnie\u017c u\u017cywa\u0107 w skr\u00f3conej formie, wtedy wygl\u0105da jako <code>-v<\/code>) by\u0142a u\u017cywana dla samodzielnych kontener\u00f3w, a flaga <code>--mount<\/code> \u2014 w \u015brodowisku Docker Swarm. Jednak od Docker 17.06 flaga <code>--mount<\/code> mo\u017ce by\u0107 u\u017cywana w dowolnych scenariuszach.<\/p>\n<p>Nale\u017cy zauwa\u017cy\u0107, \u017ce przy u\u017cywaniu flagi <code>--mount<\/code> zwi\u0119ksza si\u0119 obj\u0119to\u015b\u0107 dodatkowych danych, kt\u00f3re nale\u017cy poda\u0107 w komendzie, ale z kilku powod\u00f3w lepiej jest u\u017cywa\u0107 w\u0142a\u015bnie tej flagi, a nie <code>--volume<\/code>. Flaga <code>--mount<\/code> \u2014 to jedyny mechanizm, kt\u00f3ry pozwala pracowa\u0107 z us\u0142ugami lub okre\u015bla\u0107 parametry sterownika woluminu. Ponadto, praca z t\u0105 flag\u0105 jest prostsza.<\/p>\n<p>W istniej\u0105cych przyk\u0142adach komend, skierowanych na prac\u0119 z danymi w Dockerze, mo\u017cesz napotka\u0107 wiele przyk\u0142ad\u00f3w u\u017cycia flagi <code>-v<\/code>. Pr\u00f3buj\u0105c dostosowa\u0107 te komendy do siebie, pami\u0119taj, \u017ce flagi <code>--mount<\/code> i <code>--volume<\/code> stosuj\u0105 r\u00f3\u017cne formaty parametr\u00f3w. To znaczy, \u017ce nie mo\u017cna po prostu zamieni\u0107 <code>-v<\/code> na <code>--mount<\/code> i uzyska\u0107 dzia\u0142aj\u0105cej komendy.<\/p>\n<p>G\u0142\u00f3wna r\u00f3\u017cnica mi\u0119dzy <code>--mount<\/code> i <code>--volume<\/code> polega na tym, \u017ce przy u\u017cywaniu flagi <code>--volume<\/code> wszystkie parametry zbieraj\u0105 si\u0119 razem, w jednym polu, a przy u\u017cywaniu <code>--mount<\/code> parametry s\u0105 oddzielone.<\/p>\n<p>Podczas pracy z <code>--mount<\/code> parametry przedstawione s\u0105 jako pary klucz-warto\u015b\u0107, a mianowicie wygl\u0105da to tak <code>klucz=warto\u015b\u0107<\/code>. Te pary oddziela si\u0119 przecinkami. Oto cz\u0119sto u\u017cywane parametry <code>--mount<\/code>:<\/p>\n<ul>\n<li><code>type<\/code> \u2014 typ montowania. Warto\u015bci\u0105 dla odpowiedniego klucza mog\u0105 by\u0107 <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.docker.com\/storage\/bind-mounts\/\">bind<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.docker.com\/storage\/volumes\/\">volume<\/a><\/noindex> lub <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.docker.com\/storage\/tmpfs\/\">tmpfs<\/a><\/noindex>. M\u00f3wimy tutaj o wolumenach, to znaczy \u2014 interesuje nas warto\u015b\u0107 <code>volume<\/code>.<\/li>\n<li><code>source<\/code> \u2014 \u017ar\u00f3d\u0142o montowania. Dla nazwanych wolumen\u00f3w to jest \u2014 nazwa wolumenu. Dla nienaowanych wolumen\u00f3w ten klucz nie jest podawany. Mo\u017ce by\u0107 skr\u00f3cony do <code>src<\/code>.<\/li>\n<li><code>destination<\/code> \u2014 \u015bcie\u017cka, pod kt\u00f3r\u0105 plik lub folder jest montowany w kontenerze. Ten klucz mo\u017ce by\u0107 skr\u00f3cony do <code>dst<\/code> lub <code>target<\/code>.<\/li>\n<li><code>readonly<\/code> \u2014 montuje wolumen, kt\u00f3ry jest przeznaczony <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.docker.com\/storage\/volumes\/#use-a-read-only-volume\">tylko do odczytu<\/a><\/noindex>. U\u017cycie tego klucza nie jest obowi\u0105zkowe, nie przypisuje si\u0119 mu warto\u015bci.<\/li>\n<\/ul>\n<p>\nOto przyk\u0142ad u\u017cycia <code>--mount<\/code> z wieloma parametrami:<\/p>\n<pre><code class=\"plaintext\">docker run --mount type=volume,source=volume_name,destination=\\\/path\\\/in\\\/container,readonly my_image<\/code><\/pre>\n<p><\/p>\n<h2>Podsumowanie<\/h2>\n<p>\nOto przydatne komendy, kt\u00f3re mo\u017cna wykorzysta\u0107 podczas pracy z wolumenami Docker:<\/p>\n<ul>\n<li><code>docker volume create<\/code><\/li>\n<li><code>docker volume ls<\/code><\/li>\n<li><code>docker volume inspect<\/code><\/li>\n<li><code>docker volume rm<\/code><\/li>\n<li><code>docker volume prune<\/code><\/li>\n<\/ul>\n<p>\nOto lista cz\u0119sto u\u017cywanych parametr\u00f3w dla <code>--mount<\/code>, stosowanych w poleceniu typu <code>docker run --mount my_options my_image<\/code>:<\/p>\n<ul>\n<li><code>type=volume<\/code><\/li>\n<li><code>source=volume_name<\/code><\/li>\n<li><code>destination=\\\/path\\\/in\\\/container<\/code><\/li>\n<li><code>readonly<\/code><\/li>\n<\/ul>\n<p>\nTeraz, kiedy zako\u0144czyli\u015bmy t\u0119 seri\u0119 materia\u0142\u00f3w o Dockerze, nadszed\u0142 czas, aby powiedzie\u0107 kilka s\u0142\u00f3w o tym, dok\u0105d mog\u0105 si\u0119 uda\u0107 ci, kt\u00f3rzy ucz\u0105 si\u0119 Dockera. <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.freecodecamp.org\/a-beginner-friendly-introduction-to-containers-vms-and-docker-79a9e3e119b\">Oto<\/a><\/noindex> du\u017cy dobry artyku\u0142 o Dockerze. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.amazon.com\/Docker-Deep-Dive-Nigel-Poulton-ebook\/dp\/B01LXWQUFF\">Oto<\/a><\/noindex> ksi\u0105\u017cka o Dockerze (kupuj\u0105c t\u0119 ksi\u0105\u017ck\u0119, postaraj si\u0119 zdoby\u0107 najnowsze jej wydanie). <noindex><a rel=\"nofollow\" href=\"https:\/\/dockerbook.com\/\">Oto<\/a><\/noindex> jeszcze jedna ksi\u0105\u017cka, kt\u00f3ra b\u0119dzie odpowiednia dla tych, kt\u00f3rzy uwa\u017caj\u0105, \u017ce praktyka to najlepszy spos\u00f3b na nauk\u0119 technologii.<\/p>\n<p><b>Drodzy Czytelnicy!<\/b> Jakie materia\u0142y o Dockerze poleci\u0142by\u015b do nauki dla nowicjuszy?<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/ruvds.com\/ru-rub\/#order\"><img decoding=\"async\" alt=\"Zg\u0142\u0119biamy Docker, cz\u0119\u015b\u0107 6: praca z danymi\" src=\"\/wp-content\/uploads\/2019\/05\/78a5dd35cfae6d1e291f175957207436.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br \/>\n<br \/>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/ruvds\/blog\/441574\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412 \u0441\u0435\u0433\u043e\u0434\u043d\u044f\u0448\u043d\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430 \u0441\u0435\u0440\u0438\u0438 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432 \u043e Docker \u043c\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u2014 \u043e \u0442\u043e\u043c\u0430\u0445 Docker. \u0412 \u044d\u0442\u0438\u0445 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430\u0445 \u043c\u044b \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043b\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b Docker \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0441\u044a\u0435\u0434\u043e\u0431\u043d\u044b\u043c\u0438 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u044f\u043c\u0438. \u041d\u0435 \u0431\u0443\u0434\u0435\u043c \u043e\u0442\u0445\u043e\u0434\u0438\u0442\u044c \u043e\u0442 \u044d\u0442\u043e\u0439 \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u0438 \u0438 \u0437\u0434\u0435\u0441\u044c. \u0414\u0430\u043d\u043d\u044b\u0435 \u0432 Docker \u043f\u0443\u0441\u0442\u044c \u0431\u0443\u0434\u0443\u0442 \u0441\u043f\u0435\u0446\u0438\u044f\u043c\u0438. \u0412 \u043c\u0438\u0440\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0432\u0438\u0434\u043e\u0432 \u0441\u043f\u0435\u0446\u0438\u0439, \u0430 \u0432 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":24642,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-32873","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412 \u0441\u0435\u0433\u043e\u0434\u043d\u044f\u0448\u043d\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430 \u0441\u0435\u0440\u0438\u0438 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432 \u043e Docker \u043c\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u2014 \u043e \u0442\u043e\u043c\u0430\u0445 Docker.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/izuchaem-docker-chast-6-rabota-s-dannymi\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0418\u0437\u0443\u0447\u0430\u0435\u043c Docker, \u0447\u0430\u0441\u0442\u044c 6: \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412 \u0441\u0435\u0433\u043e\u0434\u043d\u044f\u0448\u043d\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430 \u0441\u0435\u0440\u0438\u0438 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432 \u043e Docker \u043c\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u2014 \u043e \u0442\u043e\u043c\u0430\u0445 Docker.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/izuchaem-docker-chast-6-rabota-s-dannymi\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:49:25+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:49:25+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Uczymy si\u0119 Dockera, cz\u0119\u015b\u0107 6: praca z danymi | ProHoster","description":"W dzisiejszej cz\u0119\u015bci t\u0142umaczenia serii materia\u0142\u00f3w o Dockerze porozmawiamy o pracy z danymi. W szczeg\u00f3lno\u015bci \u2014 o wolumenach Docker.","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/izuchaem-docker-chast-6-rabota-s-dannymi","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0418\u0437\u0443\u0447\u0430\u0435\u043c Docker, \u0447\u0430\u0441\u0442\u044c 6: \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 | ProHoster","og:description":"\u0412 \u0441\u0435\u0433\u043e\u0434\u043d\u044f\u0448\u043d\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430 \u0441\u0435\u0440\u0438\u0438 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432 \u043e Docker \u043c\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u2014 \u043e \u0442\u043e\u043c\u0430\u0445 Docker.","og:url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/izuchaem-docker-chast-6-rabota-s-dannymi","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:49:25+00:00","article:modified_time":"2019-10-31T18:49:25+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"32873","title":null,"description":null,"keywords":null,"keyphrases":{"focus":[],"additional":[]},"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 12:57:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 18:56:03","updated":"2026-08-11 12:50:34","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/32873","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=32873"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/32873\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/24642"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=32873"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=32873"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=32873"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}