{"id":31641,"date":"2019-10-31T21:42:19","date_gmt":"2019-10-31T18:42:19","guid":{"rendered":"https:\/\/prohoster.info\/blog\/docker-eto-igrushka-ili-net-ili-vsyo-taki-da\/"},"modified":"2019-10-31T21:42:19","modified_gmt":"2019-10-31T18:42:19","slug":"docker-eto-igrushka-ili-net-ili-vsyo-taki-da","status":"publish","type":"post","link":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/docker-eto-igrushka-ili-net-ili-vsyo-taki-da","title":{"rendered":"Is Docker a toy or not? Or does it actually serve a purpose?","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hello everyone!<\/p>\n<p><\/p>\n<p>I really want to dive straight into the topic, but it's better to share a bit about my story first:<\/p>\n<p><\/p>\n<h2>Introduction<\/h2>\n<p><\/p>\n<p>I am a programmer with experience in developing frontend single-page applications, and backend using Scala\/Java and Node.js. <\/p>\n<p><\/p>\n<p>For quite some time (definitely a couple to three years), I believed that Docker is a godsend and an incredibly cool tool that every developer should know how to use. This leads to the conclusion that every developer should have Docker installed on their local machine. Just look at the job postings on sites like hh.ru. In every second one, there's mention of Docker, and if you know how to use it, that will be your competitive advantage \ud83d\ude09<\/p>\n<p><\/p>\n<p>Along the way, I encountered many people with varying attitudes towards Docker and its ecosystem. Some said it was a convenient tool that guarantees cross-platform compatibility. Others didn\u2019t understand why they should run in containers and what the benefits were. Some didn\u2019t care at all and just wrote code and went home \u2013 I actually envy them \ud83d\ude42<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Reasons for using it<\/h2>\n<p><\/p>\n<p>Why did I use Docker? Probably for the following reasons:<\/p>\n<p><\/p>\n<ul>\n<li>to run databases, as 99% of applications use them<\/li>\n<li>to run Nginx for serving the frontend and proxying to the backend<\/li>\n<li>you can package the application into a Docker image, so my application will work anywhere Docker is present, solving the distribution problem right away<\/li>\n<li>service discovery out of the box, you can create microservices where each container (connected to a common network) can easily reach another by alias, which is very convenient<\/li>\n<li>It's fun to create a container and \"play around\" in it.<\/li>\n<\/ul>\n<p><\/p>\n<h2>What I have always DISLIKED about Docker:<\/h2>\n<p><\/p>\n<ul>\n<li>to run my application, Docker needs to be installed on the server. Why do I need that when my applications run on JRE or Node.js and the environment for them is already set up on the server?<\/li>\n<li>if I want to run my (private) locally built image on a remote server, I need my own Docker repository, I need to have a registry running somewhere, and I also need to set up HTTPS because Docker CLI only works over HTTPS. Oh man\u2026 there are options, of course, to save the image locally and then simply transfer it via SCP\u2026 But it involves so much hassle. Plus, it seems like a \"workaround\" solution until you have your own repository. <code>docker save<\/code> And then just use scp to transfer the image... But that requires so much effort. Plus, it seems like a \"hacky\" solution until you have your own repository.<\/li>\n<li><code>docker-compose<\/code>It is only needed to run containers. That's all. It can't do anything else. <code>Docker-compose<\/code> It has a bunch of versions of its files, its own syntax. No matter how declarative it may be, I don't want to read their documentation. I won't need it anywhere else.<\/li>\n<li>When working in a team, most people write Dockerfiles very poorly, not understanding how caching works, adding everything necessary and unnecessary to the image, inheriting from images that are not available on dockerhub or in private repositories, creating some <code>docker-compose<\/code> Files with databases and nothing persists. Meanwhile, developers proudly claim that Docker is cool, everything works locally, and HR importantly states in the job postings: \"We use Docker and need a candidate with that experience.\"<\/li>\n<li>Constantly plagued by thoughts of bringing everything and anything up in Docker: PostgreSQL, Kafka, Redis. It's a shame not everything works in containers, not all is easy to configure and run. This is supported by third-party developers rather than the vendors themselves. And by the way, the question arises immediately: the vendors don't care about maintaining their products in Docker, why is that? Maybe they know something?<\/li>\n<li>There is always a question about the persistence of container data. And here you think, should I just mount a host directory or create a Docker volume or make a data container which now <code>deprecated<\/code>? \u0415\u0441\u043b\u0438 \u044f \u043c\u043e\u043d\u0442\u0438\u0440\u0443\u044e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0442\u043e \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f \u0447\u0442\u043e uid \u0438 gid \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 id \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0432\u0448\u0435\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440, \u0438\u043d\u0430\u0447\u0435 \u0444\u0430\u0439\u043b\u044b \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u043c \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u0441 \u043f\u0440\u0430\u0432\u0430\u043c\u0438 \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430 root. \u0415\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e <code>volume<\/code> will simply create data in some random <code>\/usr\/*<\/code> And the same story will happen with uid and gid as in the first case. If you're running a third-party component, you need to delve into the documentation and look for the answer to the question: \"In which directories does the component write files in the container?\"<\/li>\n<\/ul>\n<p>I've always disliked having to spend too much time fiddling with Docker <strong>at the initial stage.<\/strong>: I was figuring out how to run containers, from which images to start, creating Makefiles that contained aliases for long Docker commands. I couldn't stand Docker Compose because I didn't want to learn yet another tool in the Docker ecosystem. And <code>to start the containers. This command will bring up 3 containers:<\/code> it stressed me out, especially if there were more <code>build<\/code> constructs rather than already built images. All I really wanted was to simply create the product effectively and quickly. But I couldn't sort out the use of Docker at all.<\/p>\n<p><\/p>\n<h2>Familiarity with Ansible<\/h2>\n<p><\/p>\n<p>Recently (about three months ago), I worked with a DevOps team, almost every member of which had a negative attitude towards Docker. The reasons were:<\/p>\n<p><\/p>\n<ul>\n<li>Docker governs iptables (although it can be disabled in daemon.json)<\/li>\n<li>We won't launch Docker in production.<\/li>\n<li>If the Docker daemon crashes, all containers using the infrastructure will collapse accordingly.<\/li>\n<li>There is no need for Docker.<\/li>\n<li>Why use Docker when we have Ansible and virtual machines?<\/li>\n<\/ul>\n<p><\/p>\n<p>At the same job, I also got acquainted with another tool \u2014 Ansible. I had heard about it before, but had not tried writing my own playbooks. Now I started writing my own tasks and my perspective changed completely! I realized that Ansible has modules to run the same Docker containers, build images, manage networks, etc. Moreover, containers can be deployed not only locally, but also on remote servers! My excitement knew no bounds \u2014 I found a PROPER tool and discarded my Makefile and docker-compose files, which were replaced by YAML tasks. The code was reduced by using constructs like <code>loop<\/code>, <code>block<\/code>, etc.<\/p>\n<p><\/p>\n<h2>Docker for running external components like databases.<\/h2>\n<p><\/p>\n<p>Recently, I got acquainted with SSH tunnels. It turned out to be very simple to \"forward\" a remote server's port to a local port. The remote server can be a cloud machine or a virtual machine running in VirtualBox. If I or a colleague needs a database (or any other third-party component), we can simply start the server with that component and shut it down when it's not needed. Port forwarding provides the same effect as a database running in a Docker container.<\/p>\n<p><\/p>\n<p>This command forwards my local port to the remote server with PostgreSQL:<\/p>\n<p><\/p>\n<blockquote><p>ssh -L 9000:localhost:5432 user@example.com<\/p><\/blockquote>\n<p>Using a remote server solves the problem of team development. Several developers can use such a server at the same time, and they don't need to know how to configure PostgreSQL, deal with Docker, or other complexities. The same database can be installed on the remote server in Docker if setting up a specific version is challenging. All that developers will need is SSH access!<\/p>\n<p><\/p>\n<p>I recently read that SSH tunnels are a limited functionality of a regular VPN! You can simply set up OpenVPN or other VPN implementations, configure the infrastructure, and provide it for developers to use. Isn't that so cool!<\/p>\n<p><\/p>\n<p>Fortunately, AWS, Google Cloud, and others offer a year of free usage, so make use of them! They are quite inexpensive if you power them down when not in use. I've always wondered what purposes I would need a remote server like gcloud for; it seems I've found out.<\/p>\n<p><\/p>\n<p>As a virtual machine on a local system, you can use the same Alpine that is actively used in Docker containers. Or other lightweight distributions to speed up machine boot time.<\/p>\n<p><\/p>\n<p>In summary: it's possible and advisable to run databases and other infrastructure utilities on remote servers or in VirtualBox. I don't need Docker for these purposes.<\/p>\n<p><\/p>\n<h2>A little about Docker images and distribution.<\/h2>\n<p><\/p>\n<p>I've already written. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/443136\/\">the article<\/a><\/noindex> In which I wanted to convey that using Docker images does not provide any guarantees. Docker images are only needed to create Docker containers. If you depend on a Docker image, it means you are relying on using Docker containers, and you'll only work with them.<\/p>\n<p><\/p>\n<p>Have you ever seen software developers port their products only in a Docker image?<br \/>\nThe majority of products result in binary files for a specific platform; they simply add these to a Docker image derived from the required platform. Haven't you wondered why there are so many similar images on Docker Hub? For instance, search for nginx, and you'll see countless images from different people. These individuals did not develop nginx itself; they simply added the official nginx to their Docker image and complemented it with their configurations for easier container launch. <\/p>\n<p><\/p>\n<p>In general, you can store simply in tgz; if someone needs to run this in Docker, they can just add tgz in the Dockerfile, inherit from the needed environment, and create additional utilities that do not alter the application in tgz. Whoever will create the Docker image will know what this tgz is and what is needed for operation. That's how I use Docker. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kondaurovDev\/dockerfile\">here<\/a><\/noindex><\/p>\n<p><\/p>\n<p>In conclusion: I don't need a Docker registry; I will use some S3 or simply a file storage like Google Drive\/Dropbox.<\/p>\n<p><\/p>\n<h2>Docker in CI.<\/h2>\n<p><\/p>\n<p>All the companies I've worked for are similar to each other. They tend to be product-oriented. That is, they have a single application, one technology stack (or maybe a couple to three programming languages).<\/p>\n<p><\/p>\n<p>These companies use Docker on their servers to run the CI process. The question is\u2014why is it necessary to build projects in a Docker container on their servers? Why not simply prepare an environment for building, for example, by writing an Ansible playbook that installs the required versions of Node.js, PHP, JDK, copies SSH keys, etc., to the server where the build will take place? <\/p>\n<p><\/p>\n<p>Now I realize this is shooting myself in the foot because Docker doesn't bring any profit with its isolation. Here are the CI problems in Docker that I encountered:<\/p>\n<p><\/p>\n<ul>\n<li>You still need a Docker image for the build. You have to find an image or write your own Dockerfile.<\/li>\n<li>There is a 90% chance you'll need to pass some SSH keys and secret data, which you don't want to include in the Docker image.<\/li>\n<li>The container is created and dies, losing all caches with it. The next build will download all project dependencies again, which is slow and inefficient. Time is money.<\/li>\n<\/ul>\n<p><\/p>\n<p>Developers do not build projects in Docker containers (I used to be a big fan, funny to think about my past self xD). In Java, it's possible to have multiple versions and switch to the needed one with a single command. The same goes for Node.js, there's NVM.<\/p>\n<p><\/p>\n<h2>Output<\/h2>\n<p><\/p>\n<p>I believe that Docker is a very powerful and flexible tool; that's its drawback (sounds strange, right?). Companies easily get \"hooked\" on it, using it where they need and where they don't. Developers launch their own containers, create their own environments, and then everything smoothly transitions into CI and production. The DevOps team writes some custom solutions to run these containers.<\/p>\n<p><\/p>\n<p>Use Docker only at the <strong>very latest<\/strong> stage of your workflow, don't bring it into the project at the beginning. It won't solve your business problems. It will only shift problems to a DIFFERENT level and present its own solutions, making you do double work.<\/p>\n<p><\/p>\n<p><strong><em>When Docker is necessary<\/em><\/strong>: I've come to realize that Docker is excellent at optimizing established processes but not at building basic functionality.<\/p>\n<p><\/p>\n<p>If you do decide to use Docker, then:<\/p>\n<p><\/p>\n<ul>\n<li>be extremely cautious<\/li>\n<li>don't impose Docker usage on developers<\/li>\n<li>localize its usage in one place, do not spread Dockerfile and docker-compose across all repositories<\/li>\n<\/ul>\n<p><\/p>\n<p>PS:<\/p>\n<p><\/p>\n<ul>\n<li>I recently stumbled upon <noindex><a rel=\"nofollow\" href=\"https:\/\/www.packer.io\/\">packer<\/a><\/noindex> They say it works very well with Ansible and allows for the unification of the image-building process (including docker images).<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/www.smashcompany.com\/technology\/docker-is-a-dangerous-gamble-which-we-will-regret\">Also about docker, interesting article.<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<p>Thank you for reading to the end; I wish you transparent solutions in your business and productive workdays!<\/p>\n<p>Source: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/445914\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041e\u043e\u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u0440\u044f\u043c \u0441\u0440\u0430\u0437\u0443 \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043a \u0442\u0435\u043c\u0435, \u043d\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0435\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e \u043c\u043e\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e: \u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u042f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u0441 \u043e\u043f\u044b\u0442\u043e\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 frontend \u043e\u0434\u043d\u043e\u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, scala\/java \u0438 nodejs \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435. \u0414\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0433\u043e (\u0443\u0436\u0435 \u0442\u043e\u0447\u043d\u043e \u043f\u0430\u0440\u0443 \u2014 \u0442\u0440\u043e\u0439\u043a\u0443 \u043b\u0435\u0442), \u044f \u043f\u0440\u0438\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u043b\u0441\u044f \u043c\u043d\u0435\u043d\u0438\u044f, \u0447\u0442\u043e docker \u044d\u0442\u043e \u043c\u0430\u043d\u043d\u0430 \u043d\u0435\u0431\u0435\u0441\u043d\u0430\u044f \u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043e\u0447\u0435\u043d\u044c \u043a\u0440\u0443\u0442\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0438 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043a\u0430\u0436\u0434\u044b\u0439 [&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-31641","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=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041e\u043e\u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u0440\u044f\u043c \u0441\u0440\u0430\u0437\u0443 \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043a \u0442\u0435\u043c\u0435, \u043d\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0435\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e \u043c\u043e\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e: \u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u042f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u0441 \u043e\u043f\u044b\u0442\u043e\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 frontend.\" \/>\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\/docker-eto-igrushka-ili-net-ili-vsyo-taki-da\" \/>\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\udd47Docker \u2014 \u044d\u0442\u043e \u0438\u0433\u0440\u0443\u0448\u043a\u0430 \u0438\u043b\u0438 \u043d\u0435\u0442? \u0418\u043b\u0438 \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u0434\u0430? | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041e\u043e\u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u0440\u044f\u043c \u0441\u0440\u0430\u0437\u0443 \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043a \u0442\u0435\u043c\u0435, \u043d\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0435\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e \u043c\u043e\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e: \u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u042f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u0441 \u043e\u043f\u044b\u0442\u043e\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 frontend.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/docker-eto-igrushka-ili-net-ili-vsyo-taki-da\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:42:19+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:42:19+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\udd47Is Docker just a toy or not? Or is it indeed?","description":"Hello everyone! I\u2019m really eager to dive right into the topic, but it\u2019s better to share a bit about my background first: Introduction I am a programmer with experience in frontend development.","canonical_url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/docker-eto-igrushka-ili-net-ili-vsyo-taki-da","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\udd47Docker \u2014 \u044d\u0442\u043e \u0438\u0433\u0440\u0443\u0448\u043a\u0430 \u0438\u043b\u0438 \u043d\u0435\u0442? \u0418\u043b\u0438 \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u0434\u0430? | ProHoster","og:description":"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041e\u043e\u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u0440\u044f\u043c \u0441\u0440\u0430\u0437\u0443 \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043a \u0442\u0435\u043c\u0435, \u043d\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0435\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e \u043c\u043e\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e: \u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u042f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u0441 \u043e\u043f\u044b\u0442\u043e\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 frontend.","og:url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/docker-eto-igrushka-ili-net-ili-vsyo-taki-da","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:42:19+00:00","article:modified_time":"2019-10-31T18:42:19+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"31641","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-21 07:08:22","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 03:13:28","updated":"2026-01-21 07:08:22","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\/31641","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=31641"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/31641\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media?parent=31641"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/categories?post=31641"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/tags?post=31641"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}