{"id":1573,"date":"2016-03-01T09:05:27","date_gmt":"2016-03-01T08:05:27","guid":{"rendered":"https:\/\/sii.pl\/blog\/?p=1573"},"modified":"2023-08-16T14:55:20","modified_gmt":"2023-08-16T12:55:20","slug":"docker-kontener-udostepnianie-portow","status":"publish","type":"post","link":"https:\/\/sii.pl\/blog\/docker-kontener-udostepnianie-portow\/","title":{"rendered":"Docker: kontener, udost\u0119pnianie port\u00f3w"},"content":{"rendered":"\n<p>Zakres funkcjonalno\u015bci kontenera powinien by\u0107 ograniczony do niezb\u0119dnego minimum. W\u00a0konsekwencji ju\u017c przy pr\u00f3bie zbudowania prostego systemu informatycznego stajemy przed konieczno\u015bci\u0105 wymiany informacji pomi\u0119dzy kontenerami. Jednym ze spos\u00f3b realizacji tej potrzeby jest \u0142\u0105czenie kontener\u00f3w i\u00a0udost\u0119pnianie ich port\u00f3w. W\u00a0tym wpisie zostanie przedstawiony spos\u00f3b udost\u0119pniania port\u00f3w pomi\u0119dzy kontenerem a\u00a0systemem 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\">Po\u0142\u0105czenie kontener &#8211; system gospodarza<\/h2>\n\n\n\n<p>Praca nad wieloma projektami wymaga korzystania z&nbsp;us\u0142ug, kt\u00f3re czasem realizuj\u0105 podobne funcjonalno\u015bci, np. mysql, postgres, redis, memcache, uwsgi, gunicorn, nginx, apache. Poza tym r\u00f3\u017cne projekty mog\u0105 wymaga\u0107 ro\u017cnych wersji tych samych us\u0142ug. Problem nagromadzenia us\u0142ug oraz konflikt\u00f3w ich wersji mo\u017cna rozwi\u0105za\u0107 korzystaj\u0105c z odseparowanego \u015brodowiska projektu w&nbsp;wirtualnej maszynie lub kontenerach Dockera.<\/p>\n\n\n\n<p>Stw\u00f3rzmy dwa kontenery bazy danych postgres jeden w&nbsp;wersji 9.0 i&nbsp;drugi w wersji 9.5. W obu kontenerach postgres dzia\u0142a na porcie 5432. Za pomoc\u0105 opcji <code>-p<\/code> przekierujemy porty 5432 kontener\u00f3w na porty 9000 i&nbsp;9500 systemu gospodarza.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\ndocker run -d --name=&quot;postgres-container-9.0&quot; -p 9000:5432 postgres:9.0\ndocker run -d --name=&quot;postgres-container-9.5&quot; -p 9500:5432 postgres:9.5\n<\/pre><\/div>\n\n\n<p>Za pomoc\u0105 klienta postgresa zainstalowanego w systemie gospodarza dla ka\u017cdego kontenera:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>sprawd\u017amy wersje dzia\u0142aj\u0105cego w nim serwera bazy danych,<\/li>\n\n\n\n<li>stw\u00f3rzmy jedn\u0105 baz\u0119 danych,<\/li>\n\n\n\n<li>wy\u015bwietlmy list\u0119 dost\u0119pnych baz.<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\npsql -U postgres -h localhost -p 9000 -c&quot;select version()&quot;\npsql -U postgres -h localhost -p 9000 -c&quot;CREATE DATABASE docker90&quot;\npsql -U postgres -h localhost -p 9000 -c&quot;\\list&quot;\n<\/pre><\/div>\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\npsql -U postgres -h localhost -p 9500 -c&quot;select version()&quot;\npsql -U postgres -h localhost -p 9500 -c&quot;CREATE DATABASE docker95&quot;\npsql -U postgres -h localhost -p 9500 -c&quot;\\list&quot;\n<\/pre><\/div>\n\n\n<p>W wyniku powy\u017cszych polece\u0144 w&nbsp;systemie operacyjnym gospodarza powinni\u015bmy mie\u0107 dost\u0119p do dw\u00f3ch instancji bazy danych postgres. Jednej w wersji 9.0 dzia\u0142aj\u0105cej na porcie 9000, drugiej w&nbsp;wersji 9.5 dzia\u0142aj\u0105cej na porcie 9500. W&nbsp;bazie danych w&nbsp;wersji 9.0 powinna znajdowa\u0107 si\u0119 baza o&nbsp;nazwie &#8222;docker90&#8221;, a&nbsp;w&nbsp;bazie danych w&nbsp;wersji 9.5 baza o&nbsp;nazwie &#8222;docker95&#8221;.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Po\u0142\u0105czenie kontener &#8211; kontener<\/h2>\n\n\n\n<p>Kontenery mog\u0105 udost\u0119pnia\u0107 swoje porty innym kontenerom bez konieczno\u015bci eksponowania ich do systemu gospodarza. \u017beby to zrobi\u0107 nale\u017cy udost\u0119pni\u0107 co najmniej jeden port kontenera za pomoc\u0105 opcji <code>--expose<\/code>, a&nbsp;nast\u0119pnie po\u0142\u0105czy\u0107 kontenery za pomoc\u0105 opcji <code>--link<\/code>.<\/p>\n\n\n\n<p>Uruchommy kontener bazy danych udost\u0119pniaj\u0105cy port 5432 za pomoc\u0105 opcji <code>--expose<\/code>.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\ndocker run -d --expose=5432 --name=&quot;postgres-container&quot; postgres\n<\/pre><\/div>\n\n\n<p>Uruchommy kontener ubuntu i&nbsp;po\u0142\u0105czmy go z&nbsp;kontenerem bazy danych za pomoc\u0105 opcji <code>--link<\/code>.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\ndocker run -d -it --name=&quot;ubuntu-container&quot; --link=&quot;postgres-container&quot; ubuntu\n<\/pre><\/div>\n\n\n<p>Otw\u00f3rzmy pow\u0142ok\u0119 kontenera ubuntu uzyskuj\u0105c swobodny dost\u0119p do jego systemu plik\u00f3w.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\ndocker attach ubuntu-container\n<\/pre><\/div>\n\n\n<p>U\u017cycie opcji <code>--link<\/code> powoduje, zmapowanie adresu IP kontenera bazy danych na nazw\u0119 <code>postgres-container<\/code>. Mo\u017cemy to \u0142atwo sprawdzi\u0107 wy\u015bwietlaj\u0105c zawarto\u015b\u0107 pliku <code>\/etc\/hosts<\/code>.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\ncat \/etc\/hosts\n<\/pre><\/div>\n\n\n<p>Doinstalujmy do ubuntu klienta postgresa i&nbsp;spr\u00f3bujmy po\u0142\u0105czy\u0107 si\u0119 z&nbsp;serwerem bazy danych z&nbsp;kontenera <code>postgres-container<\/code>.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\napt-get install -y postgres-client\npsql -U postgres -h postgres-container\n<\/pre><\/div>\n\n\n<p>W wyniku powy\u017cszych polece\u0144 powinni\u015bmy uzyska\u0107 dost\u0119p do wiersza polece\u0144 serwera bazy danych postgres.<\/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\/?category=development-na-twardo&amp;tag=devops,docker,kontener\" target=\"_blank\" rel=\"noopener\">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\/?category=development-na-twardo&amp;tag=devops,docker,postgresql\" target=\"_blank\" rel=\"noopener\">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\/?category=development-na-twardo&amp;tag=camunda,devops,docker\" target=\"_blank\" rel=\"noopener\">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\/?category=development-na-twardo&amp;tag=devops,docker,docker-maven-plugin\" target=\"_blank\" rel=\"noopener\">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\/docker-obraz-podstawowe-operacje\/?category=development-na-twardo&amp;tag=docker,obraz\" target=\"_blank\" rel=\"noopener\">Obraz: podstawowe operacje<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/sii.pl\/blog\/docker-kontener-podstawowe-operacje\/?category=development-na-twardo&amp;tag=docker,kontener\" target=\"_blank\" rel=\"noopener\">Kontener: podstawowe operacje<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/sii.pl\/blog\/docker-kontener-polecenia\/?category=development-na-twardo&amp;tag=docker,kontener\" target=\"_blank\" rel=\"noopener\">Kontener: polecenia<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/sii.pl\/blog\/docker-kontener-strumienie-wewy-i-przegladanie-plikow\/?category=development-na-twardo&amp;tag=docker,kontener\" target=\"_blank\" rel=\"noopener\">Kontener: strumienie we\/wy i przegl\u0105danie plik\u00f3w<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/sii.pl\/blog\/docker-kontener-udostepnianie-portow\/?category=development-na-twardo&amp;tag=docker,kontener\" target=\"_blank\" rel=\"noopener\">Kontener: udost\u0119pnianie port\u00f3w<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/sii.pl\/blog\/docker-kontener-wspoldzielenie-plikow\/?category=development-na-twardo&amp;tag=docker,kontener\" target=\"_blank\" rel=\"noopener\">Kontener: wsp\u00f3\u0142dzielenie plik\u00f3w<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/sii.pl\/blog\/docker-kontener-zmienne-srodowiskowe\/?category=development-na-twardo&amp;tag=docker,kontener\" target=\"_blank\" rel=\"noopener\">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;1573&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;4&quot;,&quot;legendonly&quot;:&quot;&quot;,&quot;readonly&quot;:&quot;&quot;,&quot;score&quot;:&quot;4.2&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;4.2\\\/5 ( votes: 4)&quot;,&quot;size&quot;:&quot;18&quot;,&quot;title&quot;:&quot;Docker: kontener, udost\u0119pnianie port\u00f3w&quot;,&quot;width&quot;:&quot;116.3&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: 116.3px;\">\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            4.2\/5 ( votes: 4)    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p>Zakres funkcjonalno\u015bci kontenera powinien by\u0107 ograniczony do niezb\u0119dnego minimum. W\u00a0konsekwencji ju\u017c przy pr\u00f3bie zbudowania prostego systemu informatycznego stajemy przed konieczno\u015bci\u0105 &hellip; <a class=\"continued-btn\" href=\"https:\/\/sii.pl\/blog\/docker-kontener-udostepnianie-portow\/\">Continued<\/a><\/p>\n","protected":false},"author":61,"featured_media":15411,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_editorskit_title_hidden":false,"_editorskit_reading_time":2,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","inline_featured_image":false,"footnotes":""},"categories":[1314],"tags":[153,224],"class_list":["post-1573","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_6-1.jpg","category_names":["Development na twardo"],"_links":{"self":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/1573"}],"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=1573"}],"version-history":[{"count":2,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/1573\/revisions"}],"predecessor-version":[{"id":23517,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/1573\/revisions\/23517"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media\/15411"}],"wp:attachment":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media?parent=1573"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/categories?post=1573"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/tags?post=1573"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}