{"id":1581,"date":"2016-03-02T09:00:17","date_gmt":"2016-03-02T08:00:17","guid":{"rendered":"https:\/\/sii.pl\/blog\/?p=1581"},"modified":"2023-06-07T10:19:31","modified_gmt":"2023-06-07T08:19:31","slug":"docker-kontener-wspoldzielenie-plikow","status":"publish","type":"post","link":"https:\/\/sii.pl\/blog\/docker-kontener-wspoldzielenie-plikow\/","title":{"rendered":"Docker: kontener, wsp\u00f3\u0142dzielenie plik\u00f3w"},"content":{"rendered":"\n<p>Poza udost\u0119pnianiem port\u00f3w kontenery mog\u0105 wymienia\u0107 mi\u0119dzy sob\u0105 informacje poprzez wsp\u00f3\u0142dzielenie zasob\u00f3w swoich system\u00f3w plik\u00f3w. W&nbsp;tym wpisie zostanie przedstawiony spos\u00f3b udost\u0119pniania plik\u00f3w pomi\u0119dzy kontenerem a&nbsp;system operacyjnym gospodarza oraz pomi\u0119dzy kontenerami.<\/p>\n\n\n\n<p><em>Ten wpis jest cz\u0119\u015bci\u0105 serii wpis\u00f3w o Dockerze. Je\u017celi jakie\u015b poj\u0119cie jest u\u017cywane bez wyja\u015bnienia to prawdopodobnie zosta\u0142o wprowadzone w&nbsp;jednym z wcze\u015bniejszych wpis\u00f3w.<\/em><\/p>\n\n\n\n<p>* Zach\u0119camy r\u00f3wnie\u017c do&nbsp;<strong>zapoznania si\u0119 z od\u015bwie\u017conymi w grudniu 2021 i styczniu 2022 artyku\u0142ami nt. Dockera<\/strong>, kt\u00f3re znajdziecie pod tym wpisem.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Wsp\u00f3\u0142dzielenie kontener &#8211; system gospodarza<\/h2>\n\n\n\n<p>W niekt\u00f3rych sytuacjach mo\u017cemy chcie\u0107 \u017ceby kontener mia\u0142 dost\u0119p do plik\u00f3w znajduj\u0105cych si\u0119 w&nbsp;systemie gospodarza. Je\u017celi w&nbsp;systemie gospodarza posiadamy kod aplikacji internetowej, kt\u00f3r\u0105 chcemy uruchomi\u0107 za pomoc\u0105 serwera HTTP dzia\u0142aj\u0105cego w&nbsp;kontenerze wtedy serwer HTTP powinien mie\u0107 dost\u0119p do katalogu projektu. Wsp\u00f3\u0142dzielenie plik\u00f3w z&nbsp;kontenerem mo\u017cna zrealizowa\u0107 za pomoc\u0105 opcji <code>-v<\/code> (<code>--volume<\/code>) w&nbsp;poleceniu <code>docker run<\/code>.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\ndocker run -v &#x5B;zas\u00f3b systemu plik\u00f3w gospodarza]:&#x5B;punkt montowania w kontenerze] &#x5B;nazwa obrazu]\n<\/pre><\/div>\n\n\n<p>W katalogu domowym stw\u00f3rzmy katalog <code>docker<\/code> zawieraj\u0105cy plik <code>index.html<\/code> o&nbsp;tre\u015bci &#8222;Hello, world!&#8221;.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\nmkdir ~\/docker\necho &quot;Hello, world!&quot; &gt;&gt; index.html\n<\/pre><\/div>\n\n\n<p>Stw\u00f3rzmy kontener na podstawie obrazu <a href=\"https:\/\/hub.docker.com\/_\/python\/\" rel=\"nofollow\" >python:3.5-slim<\/a>, kt\u00f3ry:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Montuje katalog <code>~\/docker<\/code> w punkcie <code>\/shared_volume<\/code>.<\/li>\n\n\n\n<li>Uruchamia <a href=\"https:\/\/docs.python.org\/3\/library\/http.server.html\" rel=\"nofollow\" >serwer HTTP<\/a> dzia\u0142aj\u0105cy na porcie 8000.<\/li>\n\n\n\n<li>Udost\u0119pnia port 8000 w systemie gospodarza.<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\ndocker run -d -v ~\/docker:\/shared_volume -p 8000:8000 python:3.5-slim \/bin\/bash -c &quot;cd \/shared_volume &amp;amp;&amp;amp; python -m http.server 8000&quot;\n<\/pre><\/div>\n\n\n<p>W wyniku wykonania powy\u017cszych polece\u0144 po otwarciu adresu <code>http:\/\/127.0.0.1:8000\/<\/code> powinni\u015bmy zobaczy\u0107 napis &#8222;Hello, world!&#8221;. Ka\u017cda modyfikacja pliku <code>index.html<\/code> w&nbsp;systemie gospodarza powinna by\u0107 widoczna po od\u015bwie\u017ceniu przegl\u0105darki.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Wsp\u00f3\u0142dzielenie kontener &#8211; kontener<\/h2>\n\n\n\n<p>Podobnie jak w&nbsp;przypadku wsp\u00f3\u0142dzielenia zasob\u00f3w dyskowych pomi\u0119dzy systemem gospodarza i&nbsp;kontenerem mo\u017cemy wsp\u00f3\u0142dzieli\u0107 zasoby pomi\u0119dzy kontenerami. \u017beby osi\u0105gn\u0105\u0107 ten efekt kontener udost\u0119pniaj\u0105cy zasoby powinien okre\u015bli\u0107 je za pomoc\u0105 opcji <code>-v<\/code>, a&nbsp;ka\u017cdy kontener chc\u0105cy z&nbsp;nich skorzysta\u0107 powinien wskaza\u0107 kontener udost\u0119pniaj\u0105cy za pomoc\u0105 opcji <code>--volumes-from<\/code>. Kontener udost\u0119pniaj\u0105cy nie musi by\u0107 uruchomiony \u017ceby da\u0142o si\u0119 korzysta\u0107 z&nbsp;wystawionych przez niego zasob\u00f3w. Je\u017celi udost\u0119pniany zas\u00f3b istnieje w&nbsp;systemie plik\u00f3w kontenera, kt\u00f3ry go montuje wtedy udost\u0119pniony zas\u00f3b przykryje ten istniej\u0105cy.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\ndocker create -v &#x5B;zas\u00f3b systemu plik\u00f3w kontenera] --name &#x5B;nazwa kontenera z danymi] &#x5B;nazwa obrazu]\ndocker run --volumes-from &#x5B;nazwa kontenera z danymi] &#x5B;nazwa obrazu]\n<\/pre><\/div>\n\n\n<p>W powy\u017cszym schemacie do stworzenia kontenera z&nbsp;danymi zosta\u0142a u\u017cyta nieomawiana wcze\u015bniej komenda <code><a href=\"http:\/\/sii.pl\/offer-page\/bpm\/\">docker<\/a> create<\/code>. W&nbsp;wyniku jej wykonania kontener zostanie tylko stworzony bez uruchamiania jak to miejsce w przypadku komendy <code>docker run<\/code>. Alternatywnie mo\u017cemy u\u017cy\u0107 komendy <code>docker run<\/code> i&nbsp;ustawi\u0107 jej polecenie na <code>\/bin\/bash<\/code>. Pomi\u0119dzy kontenerami nie b\u0119dzie istotnej r\u00f3\u017cnicy. W&nbsp;pierwszym przypadku kontener b\u0119dzie mia\u0142 status &#8222;created&#8221;, a&nbsp;w&nbsp;drugim &#8222;exited&#8221;.<\/p>\n\n\n\n<p>Stw\u00f3rzmy dwa kontenery obrazu <code>postgres<\/code> z&nbsp;czego jeden b\u0119dzie uruchamia\u0142 serwer bazy danych, a&nbsp;drugi b\u0119dzie s\u0142u\u017cy\u0142 tylko do przechowywania danych. Zacznijmy od kontenera na dane poniewa\u017c jego udost\u0119pnione zasoby b\u0119d\u0105 montowane w&nbsp;kontenerze uruchamiaj\u0105cym serwer. Dane bazy postgres s\u0105 przechowywane w katalogu <code>\/var\/lib\/postgresql\/[wersja]\/main<\/code>, gdzie <code>[wersja]<\/code> to np. <code>9.3<\/code>. Lokalizacj\u0119 danych bazy postgres mo\u017cna ustali\u0107 wpisuj\u0105c:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\nSHOW data_directory;\n<\/pre><\/div>\n\n\n<p>w interaktywnym terminalu <code>psql<\/code>.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\ndocker run -v \/var\/lib\/postgresql\/9.5\/main --name=&quot;postgres-data-container&quot; postgres:9.5 \/bin\/bash\n<\/pre><\/div>\n\n\n<p>Stw\u00f3rzmy kontener z serwerem bazy danych, kt\u00f3ry montuje zasoby udost\u0119pnione przez kontener <code>postgres-data-container<\/code>. \u017beby przetestowa\u0107 poprawno\u015b\u0107 udost\u0119pniania katalog\u00f3w pomi\u0119dzy kontenerami b\u0119dziemy chcieli m\u00f3c modyfikowa\u0107 stan bazy danych. Z&nbsp;tego powodu dodatkowo udost\u0119pniamy port bazy danych w&nbsp;systemie gospodarza.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\ndocker run -d --volumes-from=&quot;postgres-data-container&quot; -p 9500:5432 --name=&quot;postgres-container&quot; postgres:9.5\n<\/pre><\/div>\n\n\n<p>Stw\u00f3rzmy tabel\u0119 w&nbsp;bazie danych u\u017cytkownika postgres i&nbsp;dodajmy do niej kilka wierszy.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\npsql -U postgres -d postgres -h localhost -p 9500 -c&quot;CREATE TABLE docker (id serial PRIMARY KEY, name varchar(32) NOT NULL)&quot;\npsql -U postgres -d postgres -h localhost -p 9500 -c&quot;INSERT INTO docker VALUES (1, &#039;row 1&#039;), (2, &#039;row 2&#039;), (3, &#039;row 3&#039;)&quot;\npsql -U postgres -d postgres -h localhost -p 9500 -c&quot;SELECT * FROM docker&quot;\n<\/pre><\/div>\n\n\n<p>W wyniku powy\u017cszych polece\u0144 na ekranie powinni\u015bmy zobaczy\u0107:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\nid | name  \n----+-------\n  1 | row 1\n  2 | row 2\n  3 | row 3\n(3 rows)\n<\/pre><\/div>\n\n\n<p>Usu\u0144my kontener <code>postgres-container<\/code> i&nbsp;stw\u00f3rzmy go ponownie w&nbsp;taki sam spos\u00f3b jak poprzednio.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\ndocker stop postgres-container\ndocker rm postgres-container\ndocker run -d --volumes-from=&quot;postgres-data-container&quot; -p 9500:5432 --name=&quot;postgres-container&quot; postgres:9.5\n<\/pre><\/div>\n\n\n<p>Je\u017celi po ponownym wykonaniu polecenia:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\npsql -U postgres -d postgres -h localhost -p 9500 -c&quot;SELECT * FROM docker&quot;\n<\/pre><\/div>\n\n\n<p>zobaczymy trzy dodane wcze\u015bniej wiersze to znaczy, \u017ce wsp\u00f3\u0142dzielenie zasob\u00f3w systemu plik\u00f3w pomi\u0119dzy kontenerami zadzia\u0142a\u0142o prawid\u0142owo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">* Zaktualizowane w 2021 i 2022 artyku\u0142y nt. Dockera<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/sii.pl\/blog\/docker-dla-programistow-co-to-jest\/\">Docker dla programist\u00f3w: co to jest?<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/sii.pl\/blog\/docker-dla-programistow-instalacja-i-budowanie-pierwszego-srodowiska\/\">Docker dla programist\u00f3w \u2013 budowa pierwszego \u015brodowiska. Cz\u0119\u015b\u0107 I<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/sii.pl\/blog\/docker-dla-programistow-budowa-srodowiska-rozwojowego-cz-2\/\">Docker dla programist\u00f3w \u2013 budowa \u015brodowiska rozwojowego. Cz\u0119\u015b\u0107 II<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/sii.pl\/blog\/docker-dla-programistow-dystrybucja-aplikacji-cz-3\/\">Docker dla programist\u00f3w \u2013 dystrybucja aplikacji&nbsp;<\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Spis wpis\u00f3w w serii<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/sii.pl\/blog\/?p=1172\">Docker: wprowadzenie<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/sii.pl\/blog\/?p=1207\">Obraz: podstawowe operacje<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/sii.pl\/blog\/?p=1223\">Kontener: podstawowe operacje<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/sii.pl\/blog\/?p=1504\">Kontener: polecenia<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/sii.pl\/blog\/?p=1558\">Kontener: strumienie we\/wy i przegl\u0105danie plik\u00f3w<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/sii.pl\/blog\/?p=1573\">Kontener: udost\u0119pnianie port\u00f3w<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/sii.pl\/blog\/?p=1581\">Kontener: wsp\u00f3\u0142dzielenie plik\u00f3w<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/sii.pl\/blog\/?p=1626\">Kontener: zmienne \u015brodowiskowe<\/a><\/li>\n<\/ul>\n\n\n<div class=\"kk-star-ratings kksr-auto kksr-align-left kksr-valign-bottom\"\n    data-payload='{&quot;align&quot;:&quot;left&quot;,&quot;id&quot;:&quot;1581&quot;,&quot;slug&quot;:&quot;default&quot;,&quot;valign&quot;:&quot;bottom&quot;,&quot;ignore&quot;:&quot;&quot;,&quot;reference&quot;:&quot;auto&quot;,&quot;class&quot;:&quot;&quot;,&quot;count&quot;:&quot;5&quot;,&quot;legendonly&quot;:&quot;&quot;,&quot;readonly&quot;:&quot;&quot;,&quot;score&quot;:&quot;5&quot;,&quot;starsonly&quot;:&quot;&quot;,&quot;best&quot;:&quot;5&quot;,&quot;gap&quot;:&quot;11&quot;,&quot;greet&quot;:&quot;&quot;,&quot;legend&quot;:&quot;5\\\/5 ( votes: 5)&quot;,&quot;size&quot;:&quot;18&quot;,&quot;title&quot;:&quot;Docker: kontener, wsp\u00f3\u0142dzielenie plik\u00f3w&quot;,&quot;width&quot;:&quot;139.5&quot;,&quot;_legend&quot;:&quot;{score}\\\/{best} ( {votes}: {count})&quot;,&quot;font_factor&quot;:&quot;1.25&quot;}'>\n            \n<div class=\"kksr-stars\">\n    \n<div class=\"kksr-stars-inactive\">\n            <div class=\"kksr-star\" data-star=\"1\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"2\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"3\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"4\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"5\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n    <\/div>\n    \n<div class=\"kksr-stars-active\" style=\"width: 139.5px;\">\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n    <\/div>\n<\/div>\n                \n\n<div class=\"kksr-legend\" style=\"font-size: 14.4px;\">\n            5\/5 ( votes: 5)    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p>Poza udost\u0119pnianiem port\u00f3w kontenery mog\u0105 wymienia\u0107 mi\u0119dzy sob\u0105 informacje poprzez wsp\u00f3\u0142dzielenie zasob\u00f3w swoich system\u00f3w plik\u00f3w. W&nbsp;tym wpisie zostanie przedstawiony spos\u00f3b &hellip; <a class=\"continued-btn\" href=\"https:\/\/sii.pl\/blog\/docker-kontener-wspoldzielenie-plikow\/\">Continued<\/a><\/p>\n","protected":false},"author":61,"featured_media":15413,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","inline_featured_image":false,"footnotes":""},"categories":[1314],"tags":[153,224],"class_list":["post-1581","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-development-na-twardo","tag-docker","tag-kontener"],"acf":[],"aioseo_notices":[],"republish_history":[],"featured_media_url":"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2016\/02\/25_docker_7-1.jpg","category_names":["Development na twardo"],"_links":{"self":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/1581"}],"collection":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/users\/61"}],"replies":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/comments?post=1581"}],"version-history":[{"count":2,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/1581\/revisions"}],"predecessor-version":[{"id":22147,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/1581\/revisions\/22147"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media\/15413"}],"wp:attachment":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media?parent=1581"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/categories?post=1581"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/tags?post=1581"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}