{"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\/en\/blog\/administrirovanie\/evolyutsiya-sredstv-postavki-ili-razmyshleniya-o-docker-deb-jar-i-prochem","title":{"rendered":"The evolution of delivery tools, or reflections on Docker, deb, jar, and more","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"The evolution of delivery tools, or reflections on Docker, deb, jar, and more\" src=\"\/wp-content\/uploads\/2019\/03\/3c677d0628824497039901c0179a8749.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAt one point, I decided to write an article about delivering Docker containers and deb-packages, but as I started, I found myself reminiscing about the early days of personal computers and even calculators. So instead of dry comparisons between Docker and deb, I ended up with reflections on evolution, which I now present for your consideration.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nAny product, regardless of what it is, must somehow reach the product servers, be configured, and launched. This is what this article will be about.<\/p>\n<p>I will reflect in a historical context, 'what I see \u2014 I sing about', recalling what I saw when I first started coding and what I observe now, what we are currently using and why. The article does not claim to be a comprehensive study; some points are omitted, and this is my personal perspective on what was and what is now.<\/p>\n<p>So, in the good old days\u2026 the earliest delivery method I experienced was cassette tapes from tape recorders. I had a BK-0010.01 computer...<\/p>\n<h2>The era of calculators<\/h2>\n<p>\nNo, there was an even earlier moment; there was a calculator. <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> and <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=\"The evolution of delivery tools, or reflections on Docker, deb, jar, and more\" src=\"\/wp-content\/uploads\/2019\/03\/ea68507cd83b4da3038cea7329ff1813.jpg\" style=\"display:block;margin: 0 auto;\" \/> So, when I had <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>, the way to transfer a program was simply a piece of graph paper on which the program was written, which I would manually input into the calculator when needed. If you wanted to play (yes, yes, even on that ancient calculator there were games) \u2014 you would sit down and enter the program into the calculator. Naturally, when the calculator was turned off, the program would vanish into oblivion. In addition to the codes I manually wrote down on paper, programs were published in the magazines 'Radio' and 'Technique for Youth', as well as printed in books of that time.<\/p>\n<p>The next modification was the calculator <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>, which had some form of non-volatile data storage. Now, the game or program did not have to be entered manually; after performing some magical button presses, it would load automatically.<\/p>\n<p>The largest program on the calculator had 105 steps, and the MK-52 had a permanent memory size of 512 steps.<\/p>\n<p>By the way, if there are any fans of these calculators reading this article \u2014 while writing, I found an emulator for the calculator for Android, along with programs for it. Forward to the past!<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/play.google.com\/store\/apps\/details?id=com.cax.pmk.ext\">MK-61 emulator for Android<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/xvadim.github.io\/xbasoft\/pmk\/pmk.html\">Catalog of Programs for the MK-61<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<blockquote><p><b>A Brief Digression About the MK-52<\/b> <i>(from Wikipedia)<\/i><\/p>\n<p>The MK-52 flew into space aboard the Soyuz TM-7 spacecraft. It was intended for calculating the landing trajectory in case the onboard computer failed.<\/p>\n<p>Since 1988, the MK-52 with the memory expansion unit 'Electronika-Astro' was delivered to the Navy ships as part of the navigator computing kit. <\/p><\/blockquote>\n<h2>The First Personal Computers<\/h2>\n<p><img decoding=\"async\" alt=\"The evolution of delivery tools, or reflections on Docker, deb, jar, and more\" src=\"\/wp-content\/uploads\/2019\/03\/5d443c3919023854c53c83ac2265cea3.jpg\" style=\"display:block;margin: 0 auto;\" \/> Let\u2019s go back to the times <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>. Naturally, there was more memory, and entering code from paper was no longer an option (although at first I did just that because there were no other carriers). Audio cassettes for tape recorders became the main storage and distribution medium for software.<\/p>\n<p><br clear=\"all\"><br \/>\n<br clear=\"all\"><br \/>\n<img decoding=\"async\" alt=\"The evolution of delivery tools, or reflections on Docker, deb, jar, and more\" src=\"\/wp-content\/uploads\/2019\/03\/988316eac02a95a16e15502a826f0653.jpg\" style=\"display:block;margin: 0 auto;\" \/>Storage on cassette was usually in the form of one or two binary files, while everything else was contained within. Reliability was very low; it was necessary to keep 2-3 copies of the program. Load times were also disappointing; enthusiasts experimented with various frequency coding methods to overcome these shortcomings. At that time, I wasn't yet engaged in professional software development (aside from simple programs in BASIC), so I can't unfortunately explain the details of how everything was organized internally. The mere presence of only RAM in the computer largely determined the simplicity of the data storage scheme.<\/p>\n<h2>The Emergence of Reliable and Large Storage Media<\/h2>\n<p>\nLater, floppy disks appeared, simplifying the copying process and increasing reliability.<br \/>\nBut the situation radically changed only when sufficiently large local storage devices in the form of HDDs emerged.<\/p>\n<p>The delivery method fundamentally changed: installation programs appeared, managing the system configuration process, as well as cleanup after uninstallation, since programs were not just read into memory but were already copied to local storage, from which unnecessary data would need to be removed when necessary.<\/p>\n<p>At the same time, the complexity of the delivered software increased.<br \/>\nThe number of files included increased from single digits to hundreds and thousands, leading to version conflicts of libraries and other joys when different programs used the same data.<\/p>\n<p><img decoding=\"async\" alt=\"The evolution of delivery tools, or reflections on Docker, deb, jar, and more\" src=\"\/wp-content\/uploads\/2019\/03\/48af8fca591a1061df45cd619854a59a.jpg\" style=\"display:block;margin: 0 auto;\" \/> At that time, I was still unaware of the existence of Linux; I lived in a world of MS DOS and, later, Windows, writing in Borland Pascal and Delphi while occasionally glancing towards C++. For product delivery back then, many used InstallShield. <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/InstallShield\">ru.wikipedia.org\/wiki\/InstallShield<\/a><\/noindex>, which successfully resolved all tasks related to software deployment and configuration.<\/p>\n<p><br clear=\"all\"><br \/>\n<br clear=\"all\"><\/p>\n<h2>The era of the internet.<\/h2>\n<p>\nGradually, the complexity of software systems increased even further. The transition from monolithic and desktop applications began, moving towards distributed systems, thin clients, and microservices. Now, it\u2019s necessary to configure not just one application, but a set of them, ensuring that they all work well together.<\/p>\n<p>The entire concept changed; the Internet arrived, ushering in the era of cloud services. At that time, it was still only in its initial stages, represented by websites, and hardly anyone dreamed of services. But this was a turning point in the industry, both in development and in the delivery of applications.<\/p>\n<p>I noticed that at this moment there was a generational shift among developers (or was it just in my surroundings), and it seemed that all the old reliable methods of delivery were forgotten in an instant, starting everything anew: delivery began to be handled with ad-hoc scripts, which was proudly called 'Continuous Delivery.' In reality, a chaotic period began, where the old was forgotten and not used, and the new simply did not exist.<\/p>\n<p>I remember the times when at the company where I worked (I won\u2019t name it), instead of building through ant (maven was either not popular or didn\u2019t exist yet), people simply compiled jar files in the IDE and effortlessly committed them to SVN. Accordingly, deployment consisted of retrieving the file from SVN and copying it via SSH to the desired machine. It was that simple and crude.<\/p>\n<p>At the same time, delivering simple PHP websites was done in a very primitive way, by simply copying the modified file to the target machine via FTP. Sometimes there wasn\u2019t even that\u2014code was edited live on the production server, and it was a particular luxury if there were backups somewhere.<\/p>\n<p><br clear=\"all\"><\/p>\n<h4>RPM and DEB packages.<\/h4>\n<p>\n<img decoding=\"async\" alt=\"The evolution of delivery tools, or reflections on Docker, deb, jar, and more\" src=\"\/wp-content\/uploads\/2019\/03\/8590e7db6c67cad4b97654465ba5e946.jpg\" style=\"display:block;margin: 0 auto;\" \/>On the other hand, with the development of the internet, UNIX-like systems gained increasing popularity. During that time, I discovered RedHat Linux 6, around 2000. Naturally, there were certain tools for software delivery, and according to Wikipedia, RPM, as the main package manager, appeared back in 1995 with RedHat Linux 2.0. Since then, the system has been supplied in the form of RPM packages and continues to exist and evolve successfully.<\/p>\n<p>Debian family distributions took a similar path and implemented delivery via deb packages, which remains unchanged to this day.<\/p>\n<p>Package managers allow for the delivery of software products, configuring them during installation, managing dependencies between different packages, and performing uninstallation and cleanup. Essentially, this is everything you need; that\u2019s why they have lasted for several decades almost without changes.<\/p>\n<p>Cloud technology has added to package managers the ability to install not only from physical media but also from cloud repositories, though fundamentally little has changed.<\/p>\n<p>It is worth noting that currently, there are some movements towards moving away from deb and transitioning to snap packages, but more on that later.<\/p>\n<p>So, this new generation of cloud developers, who were unfamiliar with either DEB or RPM, has gradually grown, gained experience, and as products became more complex, there was a need for more reasonable delivery methods than FTP, bash scripts, and similar student projects. <br \/>\nAnd this is where Docker comes into play, a mix of virtualization, resource segregation, and delivery method. It\u2019s trendy and youthful now, but is it necessary for everything? Is it a panacea?<\/p>\n<p>In my observations, Docker is often offered not as a sensible choice but simply because, on one hand, it is talked about in the community, and those who propose it only know about it. On the other hand, the old reliable packaging systems are mostly quiet\u2014existing and doing their job silently and unobtrusively. In such a situation, there isn't much choice left\u2014the choice is obvious\u2014Docker.<\/p>\n<p>I will try to share my experience of how we implemented Docker and what the results turned out to be.<\/p>\n<p><br clear=\"all\"><\/p>\n<h4>Custom scripts<\/h4>\n<p>\nInitially, there were bash scripts that deployed jar archives to the required machines. This process was managed by Jenkins. It worked successfully, as the jar archive itself is already a build containing classes, resources, and even configuration. If you pack everything into it to the maximum, then deploying it with a script is not the most complicated task.<\/p>\n<p>However, scripts have several drawbacks:<\/p>\n<ul>\n<li> Scripts are usually written in a hurry and are so primitive that they contain only the most straightforward scenario. This is encouraged by the fact that the developer is focused on delivering quickly, while a proper script requires a considerable amount of resources.<\/li>\n<li> As a consequence of the previous point, scripts do not include an uninstallation procedure.<\/li>\n<li> There is no established upgrade procedure.<\/li>\n<li> With the emergence of a new product, a new script must be written.<\/li>\n<li> There is no support for dependencies.<\/li>\n<\/ul>\n<p>\nOf course, it's possible to write a sophisticated script, but as I mentioned earlier, this takes development time, and time, as we know, is always in short supply.<\/p>\n<p>All of this clearly limits the use of such a deployment method to only the simplest systems. It's time for a change.<\/p>\n<p><br clear=\"all\"><\/p>\n<h4>Docker<\/h4>\n<p>\n<img decoding=\"async\" alt=\"The evolution of delivery tools, or reflections on Docker, deb, jar, and more\" src=\"\/wp-content\/uploads\/2019\/03\/f9c6180a2775513ce88c5425727817d1.jpg\" style=\"display:block;margin: 0 auto;\" \/>At some point, fresh mid-level developers started coming to us, bursting with ideas and excited about Docker. Well, let\u2019s do it! There were two attempts. Both unsuccessful\u2014let's just say due to high ambitions but insufficient real experience. Did we need to rush and complete everything by any means? Unlikely\u2014the team needs to evolve to the necessary level before it can use the appropriate tools. Moreover, while using ready-made Docker images, we often encountered issues with network configurations (which may have been related to the immaturity of Docker itself) or found it difficult to extend others' containers.<\/p>\n<p>What inconveniences did we encounter?<\/p>\n<ul>\n<li> Network issues in bridge mode.<\/li>\n<li> It's inconvenient to view logs inside the container (if they are not separately output to the host machine's file system).<\/li>\n<li> Occasional strange freezes of ElasticSearch inside the container; the cause was never identified, as the container is official.<\/li>\n<li> It's inconvenient to use the shell inside the container\u2014all tools are severely limited, and familiar tools are absent.<\/li>\n<li> The large size of collected containers makes storage expensive.<\/li>\n<li> Due to the large size of the containers, it is difficult to maintain multiple versions.<\/li>\n<li> Longer build times compared to other methods (scripts or deb packages).<\/li>\n<\/ul>\n<p>\nOn the other hand, how is deploying a Spring service as a jar archive worse than via a deb? Is resource isolation really necessary? Is it worth sacrificing convenient operating system tools by stuffing the service into a heavily stripped-down container?<\/p>\n<p>As practice has shown, in reality this is not needed; a deb package suffices in 90% of cases.<\/p>\n<p>When does the good old deb fail, and when do we actually need Docker?<\/p>\n<p>For us, this was the deployment of services in Python. Many libraries required for machine learning were absent from the standard operating system distribution (and those that were there were not the right versions). Hacks to configuration, the need for different versions for different services living on the same host system led to Docker being the only reasonable way to deliver this core mix. The labor intensity of building a Docker container turned out to be lower than the idea of packaging all this into separate deb packages with dependencies; anyway, no rational person would take on that task.<\/p>\n<p>The second point where Docker is planned to be used is for deploying services in a blue-green deploy scheme. Here, we'd like to see a gradual increase in complexity: first, deb packages are built, and then a Docker container is created from them.<\/p>\n<p><br clear=\"all\"><\/p>\n<h4>Snap packages.<\/h4>\n<p>\n<img decoding=\"async\" alt=\"The evolution of delivery tools, or reflections on Docker, deb, jar, and more\" src=\"\/wp-content\/uploads\/2019\/03\/8c9001b28757f8427c85e54bca5b4e73.jpg\" style=\"display:block;margin: 0 auto;\" \/> Let's return to snap packages. They officially appeared in Ubuntu 16.04. Unlike traditional deb and rpm packages, snaps carry all their dependencies with them. On one hand, this helps avoid library conflicts; on the other hand, it results in larger package sizes. Additionally, this can impact system security: when supplying a snap, the developer creating the package must manage all changes to the included libraries. In general, it's not all black and white, and universal happiness from their use does not necessarily follow. However, it remains a reasonable alternative if Docker itself is used solely as a packaging tool, rather than for virtualization.<\/p>\n<p><br clear=\"all\"><br \/>\nAs a result, we are currently using a reasonable combination of both deb packages and Docker containers, which we may replace with snap packages in certain cases.<\/p>\n<p class=\"for_users_only_msg\">Only registered users can participate in the survey. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Please log in<\/a><\/noindex>, please.<\/p>\n<h2 class=\"default-block__polling-title\">What do you use for delivery?<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Custom scripts<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    We copy manually via FTP<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    deb packages<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    rpm packages<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    snap packages<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Docker images<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Virtual machine images<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    We clone the entire 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>                    Other<\/p>\n<\/li>\n<\/ul>\n<p>    109 users voted. 32 users abstained.<\/p>\n<p>Source: <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\/en\/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=\"en_US\" \/>\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\/en\/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\udd47The evolution of delivery methods, or reflections on Docker, deb, jar, and more | ProHoster","description":"At one point.","canonical_url":"https:\/\/prohoster.info\/en\/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":"en_US","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\/en\/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\/en\/wp-json\/wp\/v2\/posts\/42175","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/comments?post=42175"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/42175\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media?parent=42175"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/categories?post=42175"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/tags?post=42175"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}