{"id":42175,"date":"2019-03-18T00:00:00","date_gmt":"2019-03-17T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/evolyutsiya-sredstv-postavki-ili-razmyshleniya-o-docker-deb-jar-i-prochem"},"modified":"2020-02-18T13:45:00","modified_gmt":"2020-02-18T10:45:00","slug":"evolyutsiya-sredstv-postavki-ili-razmyshleniya-o-docker-deb-jar-i-prochem","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/evolyutsiya-sredstv-postavki-ili-razmyshleniya-o-docker-deb-jar-i-prochem","title":{"rendered":"Ewolucja \u015brodk\u00f3w dostarczania, czyli rozwa\u017cania na temat Dockera, deb, jar i innych","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Ewolucja \u015brodk\u00f3w dostarczania, czyli rozwa\u017cania na temat Dockera, deb, jar i innych\" src=\"\/wp-content\/uploads\/2019\/03\/3c677d0628824497039901c0179a8749.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPewnego dnia postanowi\u0142em napisa\u0107 artyku\u0142 o dostawie w postaci kontener\u00f3w Docker i pakiet\u00f3w deb, ale kiedy zacz\u0105\u0142em, jako\u015b przenios\u0142em si\u0119 w odleg\u0142e czasy pierwszych komputer\u00f3w osobistych, a nawet kalkulator\u00f3w. W rezultacie, zamiast suchych por\u00f3wna\u0144 Dockera i deb, powsta\u0142y takie oto rozwa\u017cania na temat ewolucji, kt\u00f3re przedstawiam pod Pa\u0144stwa os\u0105d.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nKa\u017cdy produkt, niewa\u017cne jaki, musi jako\u015b dotrze\u0107 do serwer\u00f3w produkcyjnych, musi by\u0107 skonfigurowany i uruchomiony. O tym w\u0142a\u015bnie b\u0119dzie ten artyku\u0142.<\/p>\n<p>B\u0119d\u0119 rozwa\u017ca\u0142 to w kontek\u015bcie historycznym, \"co widz\u0119 \u2013 o tym \u015bpiewam\", co widzia\u0142em, gdy dopiero zaczyna\u0142em pisa\u0107 kod i co obserwuj\u0119 teraz, co sami obecnie u\u017cywamy i dlaczego. Artyku\u0142 nie aspiruje do bycia ca\u0142o\u015bciowym badaniem, niekt\u00f3re aspekty zosta\u0142y pomini\u0119te, to m\u00f3j osobisty pogl\u0105d na to, co by\u0142o i co jest teraz.<\/p>\n<p>Wi\u0119c, w dawnych, dobrych czasach\u2026 najwcze\u015bniejszym sposobem dostawy, kt\u00f3ry pami\u0119tam, by\u0142y ta\u015bmy magnetofonowe. Mia\u0142em komputer BK-0010.01...<\/p>\n<h2>Era kalkulator\u00f3w<\/h2>\n<p>\nNie, by\u0142 jeszcze wcze\u015bniejszy moment, by\u0142 jeszcze kalkulator <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%AD%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%B8%D0%BA%D0%B0_%D0%9C%D0%9A-61\">MK-61<\/a><\/noindex> i <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%AD%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%B8%D0%BA%D0%B0_%D0%9C%D0%9A-52\">MK-52<\/a><\/noindex>.<\/p>\n<p><img decoding=\"async\" alt=\"Ewolucja \u015brodk\u00f3w dostarczania, czyli rozwa\u017cania na temat Dockera, deb, jar i innych\" src=\"\/wp-content\/uploads\/2019\/03\/ea68507cd83b4da3038cea7329ff1813.jpg\" style=\"display:block;margin: 0 auto;\" \/> Tak wi\u0119c, kiedy mia\u0142em <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%AD%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%B8%D0%BA%D0%B0_%D0%9C%D0%9A-61\">MK-61<\/a><\/noindex>, sposobem przenoszenia program\u00f3w by\u0142a zwyk\u0142a kartka w kratk\u0119, na kt\u00f3rej zapisana by\u0142a program, kt\u00f3ry w razie potrzeby musia\u0142 by\u0107 r\u0119cznie wpisywany do kalkulatora. Chcesz zagra\u0107 (tak, tak, nawet na tym prehistorycznym kalkulatorze by\u0142y gry) \u2013 siadasz i wpisujesz program do kalkulatora. Oczywi\u015bcie, przy wy\u0142\u0105czeniu kalkulatora program znika\u0142. Opr\u00f3cz r\u0119cznie spisanych kod\u00f3w kalkulatora, programy publikowane by\u0142y w czasopismach \u201eRadio\u201d i \u201eTechnika M\u0142odzie\u017cy\u201d, a tak\u017ce drukowane w ksi\u0105\u017ckach tamtego okresu.<\/p>\n<p>Nast\u0119pn\u0105 modyfikacj\u0105 by\u0142 kalkulator <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%AD%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%B8%D0%BA%D0%B0_%D0%9C%D0%9A-52\">MK-52<\/a><\/noindex>, kt\u00f3ry ju\u017c mia\u0142 jakie\u015b podobie\u0144stwo do pami\u0119ci nieulotnej. Teraz nie trzeba by\u0142o r\u0119cznie wpisywa\u0107 gry lub programu, a po wykonaniu pewnych magicznych ruch\u00f3w przyciskami, \u0142adowa\u0142 si\u0119 sam.<\/p>\n<p>Wielko\u015b\u0107 najwi\u0119kszego programu w kalkulatorze wynosi\u0142a 105 krok\u00f3w, a rozmiar pami\u0119ci sta\u0142ej w MK-52 to 512 krok\u00f3w.<\/p>\n<p>Swoj\u0105 drog\u0105, je\u015bli s\u0105 fani tych kalkulator\u00f3w, kt\u00f3rzy czytaj\u0105 ten artyku\u0142 \u2013 w trakcie pisania tekstu znalaz\u0142em emulator kalkulatora dla Androida oraz programy dla niego. Wyruszamy w przesz\u0142o\u015b\u0107!<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/play.google.com\/store\/apps\/details?id=com.cax.pmk.ext\">Emulator MK-61 dla Androida<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/xvadim.github.io\/xbasoft\/pmk\/pmk.html\">Katalog program dla MK-61<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<blockquote><p><b>Ma\u0142e wprowadzenie do MK-52<\/b> <i>(z Wikipedii)<\/i><\/p>\n<p>MK-52 lecia\u0142 w kosmos na statku 'Sojuz TM-7'. Mia\u0142 by\u0107 u\u017cywany do obliczania trajektorii l\u0105dowania w przypadku awarii komputera pok\u0142adowego.<\/p>\n<p>MK-52 z modu\u0142em rozszerzenia pami\u0119ci 'Elektronika-Astro' od 1988 roku by\u0142 dostarczany na statki Marynarki Wojennej w sk\u0142adzie pok\u0142adowego systemu obliczeniowego. <\/p><\/blockquote>\n<h2>Pierwsze komputery osobiste<\/h2>\n<p><img decoding=\"async\" alt=\"Ewolucja \u015brodk\u00f3w dostarczania, czyli rozwa\u017cania na temat Dockera, deb, jar i innych\" src=\"\/wp-content\/uploads\/2019\/03\/5d443c3919023854c53c83ac2265cea3.jpg\" style=\"display:block;margin: 0 auto;\" \/> Wr\u00f3\u0107my do czas\u00f3w <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%91%D0%9A_(%D1%81%D0%B5%D0%BC%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D0%BE_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BE%D0%B2)\">BK-0010<\/a><\/noindex>. Oczywi\u015bcie pami\u0119ci tam by\u0142o wi\u0119cej, a wprowadzanie kodu z papieru przesta\u0142o by\u0107 praktyczne (cho\u0107 przez jaki\u015b czas tak robi\u0142em, bo nie mia\u0142em innego no\u015bnika). G\u0142\u00f3wnym \u015brodkiem przechowywania i dostarczania oprogramowania sta\u0142y si\u0119 kasety audio dla magnetofon\u00f3w.<\/p>\n<p><br clear=\"all\"><br \/>\n<br clear=\"all\"><br \/>\n<img decoding=\"async\" alt=\"Ewolucja \u015brodk\u00f3w dostarczania, czyli rozwa\u017cania na temat Dockera, deb, jar i innych\" src=\"\/wp-content\/uploads\/2019\/03\/988316eac02a95a16e15502a826f0653.jpg\" style=\"display:block;margin: 0 auto;\" \/>Przechowywanie na kasecie zazwyczaj polega\u0142o na jednym lub dw\u00f3ch plikach binarnych, reszta by\u0142a wewn\u0105trz. Niezawodno\u015b\u0107 by\u0142a bardzo niska, trzeba by\u0142o mie\u0107 2-3 kopie programu. Czas \u0142adowania r\u00f3wnie\u017c nie by\u0142 zadowalaj\u0105cy, entuzja\u015bci eksperymentowali z r\u00f3\u017cnym kodowaniem cz\u0119stotliwo\u015bci, aby przezwyci\u0119\u017cy\u0107 te wady. Sam w tym czasie nie zajmowa\u0142em si\u0119 profesjonalnym tworzeniem oprogramowania (pomijaj\u0105c proste programy w Basicu), wi\u0119c niestety nie opowiem o szczeg\u00f3\u0142ach, jak wszystko by\u0142o zorganizowane w \u015brodku. Sam fakt posiadania na komputerze g\u0142\u00f3wnie pami\u0119ci RAM w du\u017cej mierze okre\u015bla\u0142 prostot\u0119 schematu przechowywania danych.<\/p>\n<h2>Pojawienie si\u0119 niezawodnych i du\u017cych no\u015bnik\u00f3w danych<\/h2>\n<p>\nP\u00f3\u017aniej pojawiaj\u0105 si\u0119 dyskietki, u\u0142atwiaj\u0105c proces kopiowania, zwi\u0119ksza si\u0119 niezawodno\u015b\u0107.<br \/>\nJednak sytuacja radykalnie zmienia si\u0119 dopiero, gdy pojawiaj\u0105 si\u0119 wystarczaj\u0105co du\u017ce lokalne magazyny w postaci HDD.<\/p>\n<p>Zasadniczo zmienia si\u0119 spos\u00f3b dostarczania: pojawiaj\u0105 si\u0119 programy instalacyjne, kt\u00f3re zarz\u0105dzaj\u0105 procesem konfigurowania systemu, a tak\u017ce czyszczeniem po usuni\u0119ciu, poniewa\u017c programy nie s\u0105 ju\u017c tylko \u0142adowane do pami\u0119ci, ale kopiowane do lokalnego magazynu, z kt\u00f3rego nale\u017cy umie\u0107 r\u00f3wnie\u017c usuwa\u0107 niepotrzebne w razie potrzeby.<\/p>\n<p>Jednocze\u015bnie zwi\u0119ksza si\u0119 z\u0142o\u017cono\u015b\u0107 dostarczanego oprogramowania.<br \/>\nLiczba plik\u00f3w w dostawie ro\u015bnie z jednego do setek i tysi\u0119cy, zaczynaj\u0105 si\u0119 konflikty wersji bibliotek i inne rado\u015bci, gdy r\u00f3\u017cne programy korzystaj\u0105 z tych samych danych.<\/p>\n<p><img decoding=\"async\" alt=\"Ewolucja \u015brodk\u00f3w dostarczania, czyli rozwa\u017cania na temat Dockera, deb, jar i innych\" src=\"\/wp-content\/uploads\/2019\/03\/48af8fca591a1061df45cd619854a59a.jpg\" style=\"display:block;margin: 0 auto;\" \/> W tamtych czasach nie wiedzia\u0142em jeszcze o istnieniu Linuxa, \u017cy\u0142em w \u015bwiecie MS DOS i p\u00f3\u017aniej Windows, a pisa\u0142em w Borland Pascal i Delphi, czasami zerkaj\u0105c w stron\u0119 C++. W tamtych czasach do dostarczania produkt\u00f3w wielu u\u017cywa\u0142o InstallShield <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/InstallShield\">ru.wikipedia.org\/wiki\/InstallShield<\/a><\/noindex>, kt\u00f3ry z powodzeniem rozwi\u0105zywa\u0142 wszystkie postawione zadania zwi\u0105zane z wdra\u017caniem i konfiguracj\u0105 oprogramowania.<\/p>\n<p><br clear=\"all\"><br \/>\n<br clear=\"all\"><\/p>\n<h2>Era internetu<\/h2>\n<p>\nStopniowo z\u0142o\u017cono\u015b\u0107 system\u00f3w oprogramowania jeszcze bardziej wzrasta\u0142a, przechodzi\u0142o si\u0119 od monolitycznych aplikacji desktopowych do system\u00f3w rozproszonych, cienkich klient\u00f3w i mikrous\u0142ug. Teraz trzeba by\u0142o konfigurowa\u0107 nie jedn\u0105 aplikacj\u0119, ale ich zestaw, tak, by wszystkie wsp\u00f3\u0142pracowa\u0142y.<\/p>\n<p>Kompletnie zmieni\u0142a si\u0119 koncepcja, nasta\u0142 Internet, zacz\u0119\u0142a si\u0119 era us\u0142ug chmurowych. Na razie w pocz\u0105tkowej fazie, w postaci stron internetowych, nikt szczeg\u00f3lnie nie marzy\u0142 o us\u0142ugach, ale to by\u0142 prze\u0142omowy moment w bran\u017cy zar\u00f3wno w kontek\u015bcie rozwoju, jak i samego dostarczania aplikacji.<\/p>\n<p>Dla mnie by\u0142 to moment, w kt\u00f3rym nast\u0105pi\u0142a zmiana pokole\u0144 programist\u00f3w (lub to tylko w moim otoczeniu), i mia\u0142em wra\u017cenie, \u017ce wszystkie stare dobre metody dostarczania zosta\u0142y zapomniane w jednej chwili, a wszystko zacz\u0119\u0142o si\u0119 od nowa: ca\u0142e dostarczanie zacz\u0119to robi\u0107 skryptami na kolanie, nazywaj\u0105c to dumnie \u201eContinuous delivery\u201d. W praktyce rozpocz\u0105\u0142 si\u0119 jaki\u015b okres chaosu, kiedy stare zosta\u0142o zapomniane i nie by\u0142o u\u017cywane, a nowego po prostu nie by\u0142o.<\/p>\n<p>Pami\u0119tam czasy, kiedy w naszej firmie, w kt\u00f3rej wtedy pracowa\u0142em (nie b\u0119d\u0119 podawa\u0107 nazwy), zamiast budowa\u0107 projekt przez ant (maven nie by\u0142 wtedy jeszcze popularny lub w og\u00f3le nie istnia\u0142), ludzie po prostu budowali jar w IDE i beztrosko commitowali go do SVN. Odpowiednio, wdro\u017cenie polega\u0142o na wyci\u0105gni\u0119ciu pliku z SVN i skopiowaniu go przez SSH na odpowiedni\u0105 maszyn\u0119. Tak prosto i prymitywnie.<\/p>\n<p>W tym samym czasie dostarczanie prostych stron na PHP odbywa\u0142o si\u0119 w bardzo prymitywny spos\u00f3b, przez zwyk\u0142e kopiowanie poprawionego pliku przez FTP na docelow\u0105 maszyn\u0119. Czasami nie by\u0142o nawet takiego luksusu \u2014 kod poprawiano na \u017cywo na serwerze produkcyjnym, a szczeg\u00f3lnym szczytem by\u0142a sytuacja, gdy gdzie\u015b by\u0142y kopie zapasowe.<\/p>\n<p><br clear=\"all\"><\/p>\n<h4>Pakiety RPM i DEB<\/h4>\n<p>\n<img decoding=\"async\" alt=\"Ewolucja \u015brodk\u00f3w dostarczania, czyli rozwa\u017cania na temat Dockera, deb, jar i innych\" src=\"\/wp-content\/uploads\/2019\/03\/8590e7db6c67cad4b97654465ba5e946.jpg\" style=\"display:block;margin: 0 auto;\" \/>Z drugiej strony, wraz z rozwojem internetu, systemy podobne do UNIX zyskiwa\u0142y na popularno\u015bci, a szczeg\u00f3lnie w tym czasie odkry\u0142em RedHat Linux 6, oko\u0142o 2000 roku. Oczywi\u015bcie istnia\u0142y tam r\u00f3wnie\u017c pewne narz\u0119dzia do dostarczania oprogramowania; wed\u0142ug Wikipedii RPM jako g\u0142\u00f3wny mened\u017cer pakiet\u00f3w pojawi\u0142 si\u0119 ju\u017c w 1995 roku w wersji RedHat Linux 2.0. I od tego czasu system dostarczany jest w postaci pakiet\u00f3w RPM i z powodzeniem istnieje oraz rozwija si\u0119 do dzi\u015b.<\/p>\n<p>Dystrybucje rodziny Debian pod\u0105\u017cy\u0142y podobn\u0105 drog\u0105 i zrealizowa\u0142y dostarczanie w postaci pakiet\u00f3w deb, co r\u00f3wnie\u017c utrzymuje si\u0119 do dzi\u015b.<\/p>\n<p>Mened\u017cery pakiet\u00f3w umo\u017cliwiaj\u0105 dostarczanie samych produkt\u00f3w programowych, konfiguracj\u0119 ich w trakcie instalacji, zarz\u0105dzanie zale\u017cno\u015bciami mi\u0119dzy r\u00f3\u017cnymi pakietami, a tak\u017ce usuwanie produkt\u00f3w i czyszczenie zb\u0119dnych element\u00f3w w trakcie deinstalacji. Wi\u0119c w wi\u0119kszo\u015bci to wszystko, co jest potrzebne, dlatego te\u017c przetrwa\u0142y one przez kilka dziesi\u0119cioleci praktycznie bez zmian.<\/p>\n<p>Chmura doda\u0142a do mened\u017cer\u00f3w pakiet\u00f3w instalacj\u0119 nie tylko z fizycznych no\u015bnik\u00f3w, ale i z chmurowych repozytori\u00f3w, ale zasadniczo niewiele si\u0119 zmieni\u0142o.<\/p>\n<p>Warto zauwa\u017cy\u0107, \u017ce obecnie istniej\u0105 pewne trendy w kierunku odej\u015bcia od deb i przej\u015bcia na pakiety snap, ale o tym p\u00f3\u017aniej.<\/p>\n<p>Tak wi\u0119c, nowe pokolenie tw\u00f3rc\u00f3w chmurowych, kt\u00f3re nie zna\u0142o ani DEB, ani RPM, r\u00f3wnie\u017c stopniowo ros\u0142o, zdobywa\u0142o do\u015bwiadczenie, produkty stawa\u0142y si\u0119 coraz bardziej z\u0142o\u017cone i potrzebne by\u0142y bardziej rozs\u0105dne sposoby dostarczania ni\u017c FTP, skrypty bash i podobne studenckie wynalazki. <br \/>\nI tutaj na scen\u0119 wchodzi Docker, swoisty mix wirtualizacji, izolacji zasob\u00f3w i sposobu dostarczania. To teraz modne, m\u0142odzie\u017cowe, ale czy jest potrzebne wsz\u0119dzie? Czy to panaceum?<\/p>\n<p>Z moich obserwacji wynika, \u017ce Docker cz\u0119sto jest proponowany nie jako rozs\u0105dny wyb\u00f3r, a po prostu dlatego, \u017ce m\u00f3wi si\u0119 o tym w spo\u0142eczno\u015bci, a ci, kt\u00f3rzy go proponuj\u0105, znaj\u0105 tylko to. Z drugiej strony, o starych dobrych systemach pakowania w wi\u0119kszo\u015bci milczy si\u0119 \u2014 istniej\u0105 i robi\u0105 swoje cicho i niepozornie. W takiej sytuacji nie ma innego wyboru \u2014 wyb\u00f3r jest oczywisty \u2014 Docker.<\/p>\n<p>Spr\u00f3buj\u0119 podzieli\u0107 si\u0119 do\u015bwiadczeniem, jak wprowadzali\u015bmy Docker, i co w rezultacie osi\u0105gn\u0119li\u015bmy.<\/p>\n<p><br clear=\"all\"><\/p>\n<h4>W\u0142asne skrypty<\/h4>\n<p>\nPocz\u0105tkowo by\u0142y to skrypty bash, kt\u00f3re wdra\u017ca\u0142y archiwa jar na odpowiednie maszyny. Proces ten by\u0142 zarz\u0105dzany przez Jenkins. Dzia\u0142a\u0142o to pomy\u015blnie, poniewa\u017c samo w sobie archiwum jar jest ju\u017c budowl\u0105, zawieraj\u0105c\u0105 klasy, zasoby, a nawet konfiguracj\u0119. Je\u015bli wszystko zebra\u0107, to roz\u0142o\u017cenie go za pomoc\u0105 skryptu nie jest najtrudniejszym zadaniem.<\/p>\n<p>Jednak skrypty maj\u0105 kilka wad:<\/p>\n<ul>\n<li> skrypty zazwyczaj pisane s\u0105 w po\u015bpiechu, dlatego s\u0105 tak prymitywne, \u017ce zawieraj\u0105 tylko jeden, najbardziej udany scenariusz. Sprzyja temu fakt, \u017ce programista jest zainteresowany jak najszybszym dostarczeniem, a normalny skrypt wymaga zainwestowania odpowiedniej ilo\u015bci zasob\u00f3w.<\/li>\n<li> w wyniku poprzedniego punktu, skrypty nie zawieraj\u0105 procedury deinstalacji.<\/li>\n<li> brak ustalonej procedury aktualizacji.<\/li>\n<li> po pojawieniu si\u0119 nowego produktu trzeba pisa\u0107 nowy skrypt.<\/li>\n<li> brak wsparcia dla zale\u017cno\u015bci.<\/li>\n<\/ul>\n<p>\nOczywi\u015bcie, mo\u017cna napisa\u0107 rozbudowany skrypt, ale, jak pisa\u0142em wcze\u015bniej \u2014 to wymaga czasu na opracowanie, a czasu, jak wiadomo, zawsze brakuje.<\/p>\n<p>To wszystko oczywi\u015bcie ogranicza zastosowanie tej metody wdra\u017cania tylko do najprostszych system\u00f3w. Nasta\u0142 czas, aby to zmieni\u0107.<\/p>\n<p><br clear=\"all\"><\/p>\n<h4>Docker<\/h4>\n<p>\n<img decoding=\"async\" alt=\"Ewolucja \u015brodk\u00f3w dostarczania, czyli rozwa\u017cania na temat Dockera, deb, jar i innych\" src=\"\/wp-content\/uploads\/2019\/03\/f9c6180a2775513ce88c5425727817d1.jpg\" style=\"display:block;margin: 0 auto;\" \/>W pewnym momencie zacz\u0119li do nas przychodzi\u0107 nowi mid-level developerzy, pe\u0142ni pomys\u0142\u00f3w i marz\u0105cy o Dockerze. C\u00f3\u017c, flag\u0119 w r\u0119ce \u2014 dzia\u0142amy! By\u0142y dwie pr\u00f3by. Obie nieudane \u2014 powiedzmy, z powodu du\u017cych ambicji, ale niewystarczaj\u0105cego do\u015bwiadczenia. Czy trzeba by\u0142o przyspiesza\u0107 i ko\u0144czy\u0107 za wszelk\u0105 cen\u0119? Raczej nie \u2014 zesp\u00f3\u0142 powinien ewolucyjnie dorosn\u0105\u0107 do odpowiedniego poziomu, zanim b\u0119dzie m\u00f3g\u0142 korzysta\u0107 z odpowiednich narz\u0119dzi. Co wi\u0119cej, korzystaj\u0105c z gotowych obraz\u00f3w Dockera, cz\u0119sto napotykali\u015bmy problemy z dzia\u0142aniem sieci (co by\u0107 mo\u017ce by\u0142o zwi\u0105zane z niedoskona\u0142o\u015bciami samego Dockera) lub trudno\u015bci w rozszerzaniu cudzych kontener\u00f3w.<\/p>\n<p>Z jakimi problemami si\u0119 spotkali\u015bmy?<\/p>\n<ul>\n<li> Problemy z sieci\u0105 w trybie bridge.<\/li>\n<li> Niepor\u0119cznie przegl\u0105da si\u0119 logi w kontenerze (je\u015bli nie zosta\u0142y przeniesione oddzielnie do systemu plik\u00f3w maszyny-host).<\/li>\n<li> Okresowe dziwne zawieszanie si\u0119 ElasticSearch wewn\u0105trz kontenera, przyczyny nie ustalono, kontener by\u0142 oficjalny.<\/li>\n<li> Niepor\u0119cznie korzysta si\u0119 z pow\u0142oki wewn\u0105trz kontenera \u2014 wszystko jest znacznie ograniczone, brakuje znajomych narz\u0119dzi.<\/li>\n<li> Du\u017ce rozmiary zbieranych kontener\u00f3w \u2013 kosztownie przechowywa\u0107.<\/li>\n<li> Z powodu du\u017cych rozmiar\u00f3w kontener\u00f3w trudno jest utrzyma\u0107 wiele wersji.<\/li>\n<li> D\u0142u\u017cszy czas budowy w por\u00f3wnaniu do innych metod (skrypty lub pakiety deb).<\/li>\n<\/ul>\n<p>\nZ drugiej strony, czemu serwis Spring w postaci archiwum jar jest gorszy do wdro\u017cenia przez ten sam deb? Czy naprawd\u0119 potrzebna jest izolacja zasob\u00f3w? Czy warto rezygnowa\u0107 z wygodnych narz\u0119dzi systemu operacyjnego, pakuj\u0105c serwis w mocno okrojonym kontenerze?<\/p>\n<p>Jak pokazuje praktyka \u2013 w rzeczywisto\u015bci nie jest to potrzebne, pakiet deb wystarcza w 90% przypadk\u00f3w.<\/p>\n<p>Kiedy jednak stary dobry deb nie dzia\u0142a i kiedy naprawd\u0119 potrzebny nam by\u0142 Docker?<\/p>\n<p>Dla nas to by\u0142o wdro\u017cenie serwis\u00f3w w Pythonie. Wiele bibliotek potrzebnych do uczenia maszynowego, kt\u00f3re nie by\u0142y obecne w standardowej dostawie systemu operacyjnego (a to, co tam by\u0142o \u2013 nie tych wersji), triki z konfiguracjami, potrzeba r\u00f3\u017cnych wersji dla r\u00f3\u017cnych serwis\u00f3w dzia\u0142aj\u0105cych na tym samym systemie gospodarza doprowadzi\u0142y do tego, \u017ce jedynym rozs\u0105dnym sposobem dostarczenia tej mieszanki okaza\u0142 si\u0119 Docker. Pracoch\u0142onno\u015b\u0107 budowy kontenera Docker okaza\u0142a si\u0119 ni\u017csza ni\u017c pomys\u0142 zapakowania tego wszystkiego w osobne pakiety deb z zale\u017cno\u015bciami, a tak naprawd\u0119 nikt w zdrowym zmy\u015ble by si\u0119 za to nie zabra\u0142.<\/p>\n<p>Drugi moment, w kt\u00f3rym planowane jest u\u017cycie Dockera \u2013 do wdra\u017cania serwis\u00f3w w schemacie blue-green deploy. Ale tutaj chcemy uzyska\u0107 stopniowe zwi\u0119kszanie z\u0142o\u017cono\u015bci: najpierw budowane s\u0105 pakiety deb, a nast\u0119pnie na ich podstawie budowany jest kontener Docker.<\/p>\n<p><br clear=\"all\"><\/p>\n<h4>Snap-pakiety.<\/h4>\n<p>\n<img decoding=\"async\" alt=\"Ewolucja \u015brodk\u00f3w dostarczania, czyli rozwa\u017cania na temat Dockera, deb, jar i innych\" src=\"\/wp-content\/uploads\/2019\/03\/8c9001b28757f8427c85e54bca5b4e73.jpg\" style=\"display:block;margin: 0 auto;\" \/> Wr\u00f3\u0107my do snap-pakiet\u00f3w. Po raz pierwszy pojawi\u0142y si\u0119 oficjalnie w Ubuntu 16.04. W przeciwie\u0144stwie do znanych pakiet\u00f3w deb i rpm, snap zawiera wszystkie zale\u017cno\u015bci. Z jednej strony pozwala to unikn\u0105\u0107 konflikt\u00f3w bibliotek, z drugiej strony \u2013 skutkuje to wi\u0119kszymi rozmiarami rezultatu pakietu. Ponadto mo\u017ce to wp\u0142yn\u0105\u0107 na bezpiecze\u0144stwo systemu: w przypadku dostarczania snap za wszystkie zmiany w\u0142\u0105czonych bibliotek musi czuwa\u0107 sam programista, kt\u00f3ry tworzy pakiet. Og\u00f3lnie rzecz bior\u0105c, nie wszystko jest jednoznaczne, a powszechne szcz\u0119\u015bcie z ich u\u017cycia nie nadchodzi. Niemniej jednak jest to ca\u0142kiem rozs\u0105dna alternatywa, je\u015bli ten sam Docker jest u\u017cywany tylko jako \u015brodek pakowania, a nie wirtualizacji.<\/p>\n<p><br clear=\"all\"><br \/>\nW rezultacie obecnie w rozs\u0105dnej proporcji wykorzystujemy zar\u00f3wno pakiety deb, jak i kontenery Docker, kt\u00f3re by\u0107 mo\u017ce w niekt\u00f3rych przypadkach zast\u0105pimy pakietami snap.<\/p>\n<p class=\"for_users_only_msg\">Tylko zarejestrowani u\u017cytkownicy mog\u0105 bra\u0107 udzia\u0142 w ankiecie. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Zaloguj si\u0119<\/a><\/noindex>, prosz\u0119.<\/p>\n<h2 class=\"default-block__polling-title\">A czego u\u017cywacie do dostarczania?<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    W\u0142asne skrypty<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Kopiujemy r\u0119cznie na FTP<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    pakiety deb<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    pakiety rpm<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    pakiety snap<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    obrazy Docker<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Obrazy maszyn wirtualnych<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Klonujemy ca\u0142y HDD<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    puppet<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    ansible<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Inne<\/p>\n<\/li>\n<\/ul>\n<p>    Zag\u0142osowa\u0142o 109 u\u017cytkownik\u00f3w. 32 u\u017cytkownik\u00f3w wstrzyma\u0142o si\u0119.<\/p>\n<p>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/srg\/blog\/444102\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041a\u0430\u043a-\u0442\u043e \u0432 \u043e\u0434\u0438\u043d \u043c\u043e\u043c\u0435\u043d\u0442 \u044f \u0440\u0435\u0448\u0438\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044e \u043f\u0440\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u043a\u0443 \u0432 \u0432\u0438\u0434\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0434\u043e\u043a\u0435\u0440 \u0438 deb-\u043f\u0430\u043a\u0435\u0442\u043e\u0432, \u043d\u043e \u043a\u043e\u0433\u0434\u0430 \u043d\u0430\u0447\u0430\u043b, \u043c\u0435\u043d\u044f \u043f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u043f\u043e\u043d\u0435\u0441\u043b\u043e \u0432 \u0434\u0430\u043b\u0435\u043a\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0430 \u043f\u0435\u0440\u0432\u044b\u0445 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u0432 \u0438 \u0434\u0430\u0436\u0435 \u043a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440\u043e\u0432. \u0412 \u043e\u0431\u0449\u0435\u043c, \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u0443\u0445\u0438\u0445 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0439 \u0434\u043e\u043a\u0435\u0440\u0430 \u0438 deb \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438\u0441\u044c \u0432\u043e\u0442 \u0442\u0430\u043a\u0438\u0435 \u0432\u043e\u0442 \u0440\u0430\u0437\u043c\u044b\u0448\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u0442\u0435\u043c\u0443 \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u0438, \u043a\u043e\u0438 \u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e \u043d\u0430 \u0412\u0430\u0448 \u0441\u0443\u0434. \u041b\u044e\u0431\u043e\u0439 \u043f\u0440\u043e\u0434\u0443\u043a\u0442, [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-42175","post","type-post","status-publish","format-standard","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=\"\u041a\u0430\u043a-\u0442\u043e \u0432 \u043e\u0434\u0438\u043d \u043c\u043e\u043c\u0435\u043d\u0442.\" \/>\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\/evolyutsiya-sredstv-postavki-ili-razmyshleniya-o-docker-deb-jar-i-prochem\" \/>\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\u042d\u0432\u043e\u043b\u044e\u0446\u0438\u044f \u0441\u0440\u0435\u0434\u0441\u0442\u0432 \u043f\u043e\u0441\u0442\u0430\u0432\u043a\u0438, \u0438\u043b\u0438 \u0440\u0430\u0437\u043c\u044b\u0448\u043b\u0435\u043d\u0438\u044f \u043e Docker, deb, jar \u0438 \u043f\u0440\u043e\u0447\u0435\u043c | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041a\u0430\u043a-\u0442\u043e \u0432 \u043e\u0434\u0438\u043d \u043c\u043e\u043c\u0435\u043d\u0442.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/evolyutsiya-sredstv-postavki-ili-razmyshleniya-o-docker-deb-jar-i-prochem\" \/>\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-03-17T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T10:45:00+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\udd47Ewolucja narz\u0119dzi dostarczania, czyli refleksje o Dockerze, deb, jar i innych | ProHoster","description":"Jako\u015b w pewnym momencie.","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/evolyutsiya-sredstv-postavki-ili-razmyshleniya-o-docker-deb-jar-i-prochem","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\u042d\u0432\u043e\u043b\u044e\u0446\u0438\u044f \u0441\u0440\u0435\u0434\u0441\u0442\u0432 \u043f\u043e\u0441\u0442\u0430\u0432\u043a\u0438, \u0438\u043b\u0438 \u0440\u0430\u0437\u043c\u044b\u0448\u043b\u0435\u043d\u0438\u044f \u043e Docker, deb, jar \u0438 \u043f\u0440\u043e\u0447\u0435\u043c | ProHoster","og:description":"\u041a\u0430\u043a-\u0442\u043e \u0432 \u043e\u0434\u0438\u043d \u043c\u043e\u043c\u0435\u043d\u0442.","og:url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/evolyutsiya-sredstv-postavki-ili-razmyshleniya-o-docker-deb-jar-i-prochem","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-03-17T21:00:00+00:00","article:modified_time":"2020-02-18T10:45:00+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"42175","title":null,"description":null,"keywords":null,"keyphrases":null,"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-22 07:30:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 00:04:29","updated":"2026-01-22 07:30:19","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\/42175","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=42175"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/42175\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=42175"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=42175"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=42175"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}