{"id":2008,"date":"2019-03-05T08:04:25","date_gmt":"2019-03-05T13:04:25","guid":{"rendered":"http:\/\/soul-repairs.com\/?p=2008"},"modified":"2019-02-14T21:16:14","modified_gmt":"2019-02-15T02:16:14","slug":"why-containers","status":"publish","type":"post","link":"https:\/\/soul-repairs.com\/blog\/2019\/03\/05\/why-containers\/","title":{"rendered":"Why Containers"},"content":{"rendered":"<p id=\"E186\" class=\"qowt-stl-NormalWeb\"><span id=\"E187\">In this blog post, we&#8217;re going to talk about distributed architectures, and the progression they&#8217;ve made over time. We&#8217;re going to do this because a long time ago, when we were watching the <a href=\"https:\/\/www.pluralsight.com\/courses\/docker-getting-started\" target=\"_blank\" rel=\"noopener\"><em>Getting Started with Docker<\/em><\/a> training on PluralSite, Josh started ranting about this very topic and Laine told him it should to be a blog post because the information that just <em>falls out of his head<\/em> sometimes is really cool.\u00a0<em>You&#8217;re welcome, internet!<\/em><\/span><\/p>\n<p><!--more--><\/p>\n<h2 id=\"E201\" class=\"qowt-stl-Heading1\"><span id=\"E202\">The Progression<\/span><\/h2>\n<h3 id=\"E203\" class=\"qowt-stl-Heading2\"><span id=\"E204\">One Server, Two Server, Red Server, <em>5000 Servers ahh panic!<\/em><\/span><span id=\"E208\">\u00a0(1990s-2000s)<\/span><\/h3>\n<p id=\"E209\" class=\"qowt-stl-NormalWeb\"><span id=\"E210\">You need to run server applications, e.g. a mail server, so you spin one up. You pay the hardware and licensing costs, install and configure some software, and keep up to date with updates, patches, and user requests. By hand.<\/span><\/p>\n<p id=\"E211\" class=\"qowt-stl-NormalWeb\"><span id=\"E212\">One server, not so bad.\u00a0<\/span><em><span id=\"E213\" class=\"qowt-stl-Emphasis\">We definitely got this, you guys<\/span><span id=\"E214\">.<\/span><\/em><\/p>\n<p id=\"E215\" class=\"qowt-stl-NormalWeb\"><span id=\"E216\">&#8230;but eventually you need to run <\/span><em><span id=\"E217\" class=\"qowt-stl-Emphasis\">more server applications<\/span><\/em><span id=\"E218\">, because &#8220;hey, these things are cool!&#8221;\u00a0This leads to\u00a0<\/span><span id=\"E219\" class=\"qowt-stl-Emphasis\"><em>more servers<\/em>.<\/span><span id=\"E220\">\u00a0Which of course leads to more patching, installs, configuring, space, networking, costs &#8211; and ultimately, more<\/span><span id=\"E221\" class=\"qowt-stl-Emphasis\">\u00a0<\/span><strong><span id=\"E222\" class=\"qowt-stl-Strong\">time<\/span><\/strong><span id=\"E223\" class=\"qowt-stl-Emphasis\">.\u00a0<em>We maybe do not got this&#8230;<\/em><\/span><\/p>\n<h3 id=\"E224\" class=\"qowt-stl-Heading2\"><span id=\"E225\">It&#8217;s a bird! It&#8217;s a plane! It&#8217;s&#8230;VMWare! (Late 2000s)<\/span><\/h3>\n<p id=\"E226\" class=\"qowt-stl-NormalWeb\"><a id=\"E227\" contenteditable=\"false\" href=\"https:\/\/en.wikipedia.org\/wiki\/Hypervisor\" target=\"_blank\" rel=\"noopener\"><span id=\"E228\" class=\"qowt-stl-Hyperlink\">Hypervisor<\/span><\/a><span id=\"E229\"> technology (VMWare, KVM, Microsoft Hyper-V) lets server admins <\/span><strong><span id=\"E230\" class=\"qowt-stl-Strong\">virtualize servers<\/span><\/strong><span id=\"E231\">. This means that they could:<\/span><\/p>\n<ol>\n<li id=\"E232\" class=\"qowt-li-1_0 qowt-list\"><strong><span id=\"E233\" class=\"qowt-stl-Strong\">Create<\/span><\/strong><span id=\"E234\">\u00a0massive pools of <\/span><span id=\"E236\">compute<\/span><span id=\"E238\">, networking, and storage resources from relatively inexpensive commodity blade servers<\/span><\/li>\n<li id=\"E239\" class=\"qowt-li-1_0 qowt-list\"><strong><span id=\"E240\" class=\"qowt-stl-Strong\">Manage<\/span><\/strong><span id=\"E241\"> all of those from a central location (e.g. VMWare)<\/span><\/li>\n<li id=\"E242\" class=\"qowt-li-1_0 qowt-list\"><span id=\"E243\" class=\"qowt-stl-Strong\"><strong>Allocate<\/strong>\u00a0<\/span><span id=\"E244\">those pools to specific virtual servers (aka virtual machines aka VMs)<\/span><\/li>\n<li id=\"E245\" class=\"qowt-li-1_0 qowt-list\"><strong><span id=\"E246\" class=\"qowt-stl-Strong\">Configure<\/span><\/strong><span id=\"E247\"> and <\/span><strong><span id=\"E248\" class=\"qowt-stl-Strong\">patch<\/span><\/strong><span id=\"E249\">\u00a0the virtual servers automatically using profiles<\/span><\/li>\n<li id=\"E250\" class=\"qowt-li-1_0 qowt-list\"><strong><span id=\"E251\" class=\"qowt-stl-Strong\">Monitor<\/span><\/strong><span id=\"E252\">\u00a0the virtual servers<\/span><\/li>\n<\/ol>\n<p id=\"E253\" class=\"qowt-stl-NormalWeb\"><span id=\"E254\">This was a <\/span><em><span id=\"E255\" class=\"qowt-stl-Emphasis\">revolution<\/span><\/em><span id=\"E256\">\u00a0in server management. Rather than spending days buying\/setting up\/configuring physical machines, server admins could buy hardware once, and then allocate it as needed without ever moving hardware around.<\/span><\/p>\n<p id=\"E257\" class=\"qowt-stl-NormalWeb\"><span id=\"E258\">However, there are still some annoyances:<\/span><\/p>\n<ol>\n<li id=\"E259\" class=\"qowt-li-2_0 qowt-list\"><span id=\"E260\">Each server had to have its own <\/span><strong><span id=\"E261\" class=\"qowt-stl-Strong\">operating system\u00a0and application install <\/span><\/strong><span id=\"E261\" class=\"qowt-stl-Strong\">configured<\/span><\/li>\n<li id=\"E262\" class=\"qowt-li-2_0 qowt-list\"><span id=\"E263\">That configuration then<\/span><strong><span id=\"E264\" class=\"qowt-stl-Strong\">\u00a0had to be done multiple times<\/span><\/strong><span id=\"E265\"> for testing environments, high availability\/failover, etc.<\/span><\/li>\n<li id=\"E266\" class=\"qowt-li-2_0 qowt-list\"><span id=\"E267\">Even though the <\/span><span id=\"E269\">compute<\/span><span id=\"E271\">, networking, and storage was paid for once,<\/span><strong><span id=\"E272\" class=\"qowt-stl-Strong\"> the operating system, utilities, and applications had to be paid for per server<\/span><\/strong><\/li>\n<\/ol>\n<h3 id=\"E273\" class=\"qowt-stl-Heading2\"><span id=\"E274\">Containers! (Mid 2010s)<\/span><\/h3>\n<p id=\"E276\" class=\"qowt-stl-NormalWeb\"><span id=\"E277\">Containers (e.g. <a href=\"https:\/\/www.docker.com\/\" target=\"_blank\" rel=\"noopener\">Docker<\/a>) changed the game again, by changing how applications are installed and deployed, and how they integrate with their operating systems.<\/span><\/p>\n<ol>\n<li id=\"E278\" class=\"qowt-li-0_0 qowt-list\"><span id=\"E279\">Containers run\u00a0<\/span><span id=\"E280\" class=\"qowt-stl-Emphasis\">in\u00a0<\/span><span id=\"E281\">an operating system on their host machine, but they pretend to run each application in its<\/span><em><span id=\"E282\" class=\"qowt-stl-Emphasis\">\u00a0own <\/span><\/em><span id=\"E283\">operating system. <\/span><span id=\"E285\">Tl<\/span><span id=\"E287\">;dr<\/span><span id=\"E290\">: they have\u00a0<\/span><strong><span id=\"E291\" class=\"qowt-stl-Strong\">one <em>actual\u00a0<\/em>operating system <\/span><\/strong><span id=\"E293\" class=\"qowt-stl-Strong\"><strong> shared by many, many containers<\/strong>.<\/span><span id=\"E294\"> One install, one license, and one setup (to run the containers).<\/span><\/li>\n<li id=\"E295\" class=\"qowt-li-0_0 qowt-list\"><span id=\"E296\">Containers define <em>their<\/em> setup and configuration <em>in the container.<\/em>\u00a0This setup and configuration can then be reused anywhere the container (which\u00a0<\/span><span id=\"E297\" class=\"qowt-stl-Emphasis\">contains<\/span><span id=\"E298\"> the application) is deployed. <\/span><strong><span id=\"E299\" class=\"qowt-stl-Strong\">No need for application install on each server.<\/span><\/strong><\/li>\n<\/ol>\n<p id=\"E300\" class=\"qowt-stl-NormalWeb\"><span id=\"E301\">So now, with virtualized <\/span><span id=\"E303\">compute<\/span><span id=\"E305\"> hardware (hypervisor technology) and virtualized operating systems (Docker), plus standardized configuration spec (<\/span><span id=\"E307\">dockerfiles<\/span><span id=\"E309\">), the annoyances we talked about for maintaining all those virtualized servers have <em>pretty cool solutions<\/em>.<\/span><\/p>\n<p id=\"E310\" class=\"qowt-stl-NormalWeb\"><span id=\"E311\">Solving all of these problems means it&#8217;s\u00a0<\/span><em><span id=\"E312\" class=\"qowt-stl-Emphasis\">very <\/span><span id=\"E314\" class=\"qowt-stl-Emphasis\">very<\/span><\/em><span id=\"E316\" class=\"qowt-stl-Emphasis\"><em> fast and easy to spin up a lot of containers<\/em>\u00a0<\/span><span id=\"E317\">&#8211; and then you get into the problem of\u00a0<\/span><em><span id=\"E319\" class=\"qowt-stl-Emphasis\">ohhh<\/span><span id=\"E321\" class=\"qowt-stl-Emphasis\"> <\/span><span id=\"E323\" class=\"qowt-stl-Emphasis\">sooo<\/span><span id=\"E325\" class=\"qowt-stl-Emphasis\"> <\/span><span id=\"E327\" class=\"qowt-stl-Emphasis\">mannyyy<\/span><span id=\"E329\" class=\"qowt-stl-Emphasis\"> <\/span><span id=\"E331\" class=\"qowt-stl-Emphasis\">connntaiinnerrssss<\/span><\/em><span id=\"E333\">, which is where you need a container management and orchestration tool like <\/span><a id=\"E334\" contenteditable=\"false\" href=\"https:\/\/dcos.io\/\" target=\"_blank\" rel=\"noopener\"><span id=\"E335\" class=\"qowt-stl-Hyperlink\">DCOS <\/span><\/a><span id=\"E336\">or our\u00a0<em>definite nerdy favorite<\/em>,\u00a0<\/span><a id=\"E337\" contenteditable=\"false\" href=\"https:\/\/www.openshift.com\/\" target=\"_blank\" rel=\"noopener\"><span id=\"E339\" class=\"qowt-stl-Hyperlink\">Openshift<\/span><\/a><span id=\"E341\">\u00a0(<\/span><a id=\"E342\" contenteditable=\"false\" href=\"https:\/\/soul-repairs.com\/blog\/tag\/openshift\/\" target=\"_blank\" rel=\"noopener\"><span id=\"E343\" class=\"qowt-stl-Hyperlink\">related blog posts<\/span><\/a><span id=\"E344\">).<\/span><\/p>\n<p id=\"E345\" class=\"qowt-stl-NormalWeb\"><span id=\"E346\" class=\"qowt-stl-Strong\"><strong>Note<\/strong>:\u00a0<\/span><span id=\"E347\">at no point did we say\u00a0<\/span><span id=\"E348\" class=\"qowt-stl-Emphasis\">anything <\/span><span id=\"E349\">here\u00a0about &#8220;written Java\/etc applications.&#8221; Actually, this was more about <\/span><span id=\"E350\" class=\"qowt-stl-Strong\">setting up and maintaining <em>external<\/em> applications that run on servers<\/span><span id=\"E351\">\u00a0than about applications built internally. One of the places that Docker shines is in setting up these types of server applications &#8211; but it&#8217;s genuinely pretty great at running applications written in-house too.<\/span><\/p>\n<h2 id=\"E352\" class=\"qowt-stl-Heading2\"><span id=\"E353\">Bring it on home&#8230;<\/span><\/h2>\n<p id=\"E354\" class=\"qowt-stl-NormalWeb\"><span id=\"E355\">Distributed architecture is great for a lot of reasons, but handling the servers has always been a pain point for infrastructure\/operations people &#8211; which means it&#8217;s a pain point for developers, and for end users too. Making server setup, configuration, and care easier, faster, and cheaper has been a goal since, <em>uh<\/em>&#8230;since servers existed. Container technology like Docker is another leap forward in the evolution of how the industry tries to meet that goal.<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this blog post, we&#8217;re going to talk about distributed architectures, and the progression they&#8217;ve made over time. We&#8217;re going to do this because a long time ago, when we were watching the Getting Started with Docker training on PluralSite, Josh started ranting about this very topic and Laine told him it should to be &hellip; <\/p>\n<p class=\"read-more\"><a class=\"btn btn-default\" href=\"https:\/\/soul-repairs.com\/blog\/2019\/03\/05\/why-containers\/\"> Read More<span class=\"screen-reader-text\">  Read More<\/span><\/a><\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"nf_dc_page":"","_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[4],"tags":[82,44],"wf_post_folders":[],"coauthors":[26,11],"class_list":["post-2008","post","type-post","status-publish","format-standard","hentry","category-technology","tag-docker","tag-openshift"],"_links":{"self":[{"href":"https:\/\/soul-repairs.com\/blog\/wp-json\/wp\/v2\/posts\/2008","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/soul-repairs.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/soul-repairs.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/soul-repairs.com\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/soul-repairs.com\/blog\/wp-json\/wp\/v2\/comments?post=2008"}],"version-history":[{"count":8,"href":"https:\/\/soul-repairs.com\/blog\/wp-json\/wp\/v2\/posts\/2008\/revisions"}],"predecessor-version":[{"id":2458,"href":"https:\/\/soul-repairs.com\/blog\/wp-json\/wp\/v2\/posts\/2008\/revisions\/2458"}],"wp:attachment":[{"href":"https:\/\/soul-repairs.com\/blog\/wp-json\/wp\/v2\/media?parent=2008"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/soul-repairs.com\/blog\/wp-json\/wp\/v2\/categories?post=2008"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/soul-repairs.com\/blog\/wp-json\/wp\/v2\/tags?post=2008"},{"taxonomy":"wf_post_folders","embeddable":true,"href":"https:\/\/soul-repairs.com\/blog\/wp-json\/wp\/v2\/wf_post_folders?post=2008"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/soul-repairs.com\/blog\/wp-json\/wp\/v2\/coauthors?post=2008"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}