[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"9_t0YFtO844PW3-iCfPxRTbw8yv0-2zzu2bChZFenjo":3,"btz8hO-MXSFLpybqvfjYVBre4OvrEJO1wFySe3Zmv-s":49,"10_eB8SzdUxIZHW5y3PsiqmO-Am_TPUhzsggq6k5F2o":75,"URAj7eJkIejy-7LmWOyixc5HrF2rKlr7pDM4buf9as8":181,"_apollo:default":223},{"menu":4},{"__typename":5,"id":6,"name":7,"items":8},"Menu","nuxt-main-menu","Nuxt Hauptmenü",[9,24,29,34,39,44],{"__typename":10,"id":11,"title":12,"description":13,"url":14,"langcode":15,"internal":20,"expanded":21,"attributes":22},"MenuItem","9ffc5019-cbd8-4b2e-8eb7-9feae486d4a1","Blog",null,"/know-how",{"__typename":16,"id":17,"name":18,"direction":19},"Language","de","German","ltr",true,false,{"__typename":23,"class":13},"MenuItemAttributes",{"__typename":10,"id":25,"title":26,"description":13,"url":27,"langcode":15,"internal":20,"expanded":21,"attributes":28},"1c7a5430-8a42-4b24-9544-252adabc2f4c","Projekte","/projekte",{"__typename":23,"class":13},{"__typename":10,"id":30,"title":31,"description":13,"url":32,"langcode":15,"internal":20,"expanded":21,"attributes":33},"9c4feedc-79e4-4fbf-b68c-065f33ebfe4c","Sparring","/workshop-ux-sparring-fuer-unternehmen",{"__typename":23,"class":13},{"__typename":10,"id":35,"title":36,"description":13,"url":37,"langcode":15,"internal":20,"expanded":21,"attributes":38},"3b77a27b-272a-489f-843e-53e23ed07741","Trainings","/liechtenecker-ux-academy",{"__typename":23,"class":13},{"__typename":10,"id":40,"title":41,"description":13,"url":42,"langcode":15,"internal":20,"expanded":21,"attributes":43},"ce0bb82b-e1ee-4036-be95-f693a62e9f4a","Über uns","/about",{"__typename":23,"class":13},{"__typename":10,"id":45,"title":46,"description":13,"url":47,"langcode":15,"internal":20,"expanded":21,"attributes":48},"04a19381-81a9-4694-8653-182d8855d2b5","Kontakt","/kontakt",{"__typename":23,"class":13},{"menu":50},{"__typename":5,"id":51,"name":52,"items":53},"footer","Fußzeile",[54,60,65,70],{"__typename":10,"id":55,"title":56,"description":13,"url":57,"langcode":58,"internal":20,"expanded":21,"attributes":59},"e2873307-b50a-4aab-b6b2-1950fd99c72e","Impressum","/impressum",{"__typename":16,"id":17,"name":18,"direction":19},{"__typename":23,"class":13},{"__typename":10,"id":61,"title":62,"description":13,"url":63,"langcode":58,"internal":20,"expanded":21,"attributes":64},"2cd9b7c9-142a-4ea3-b898-a0952c54a195","Datenschutz","/datenschutz",{"__typename":23,"class":13},{"__typename":10,"id":66,"title":67,"description":13,"url":68,"langcode":58,"internal":20,"expanded":21,"attributes":69},"a5effba3-5a8c-4125-8d78-0cdba09824db","AGB","/agb",{"__typename":23,"class":13},{"__typename":10,"id":71,"title":72,"description":13,"url":73,"langcode":58,"internal":21,"expanded":21,"attributes":74},"114bf071-bdbb-44cf-85c1-69e9d9e0777d","Newsletter","https://liechtenecker.at/newsletter-subscribe",{"__typename":23,"class":13},{"route":76},{"__typename":77,"entity":78},"RouteInternal",{"__typename":79,"id":80,"title":81,"changed":82,"created":88,"langcode":91,"path":92,"promote":21,"status":20,"sticky":21,"metatag":93,"postCategory":118,"postContentElements":13,"evergreen":21,"tags":143,"postWpBody":149,"wpHeaderImage":153,"wpHeaderImageOld":13,"wpHeaderImageOldSmall":13,"wpOgImage":166,"wpPromotedTeaserImage":13,"wpShareDescription":13,"wpShareTitle":113,"wpTeaserText":152,"wpYoastHead":174,"author":175},"NodeWpPost","779","Let’s Dockerize everything!",{"__typename":83,"timestamp":84,"timezone":85,"offset":86,"time":87},"DateTime",1774361885,"UTC","+00:00","2026-03-24T14:18:05+00:00",{"__typename":83,"timestamp":89,"timezone":85,"offset":86,"time":90},1583843597,"2020-03-10T12:33:17+00:00",{"__typename":16,"id":17,"name":18,"direction":19},"/blog/lets-dockerize-everything",[94,101,108,114],{"__typename":95,"tag":96,"attributes":97},"MetaTagValue","meta",{"__typename":98,"name":99,"content":100},"MetaTagValueAttributes","title","Let's Dockerize Everything | Liechtenecker UX Design Studio",{"__typename":102,"tag":103,"attributes":104},"MetaTagLink","link",{"__typename":105,"href":106,"hreflang":13,"rel":107,"media":13,"sizes":13,"type":13},"MetaTagLinkAttributes","http://liechtenecker-cms.liechtenecker-cms.svc.cluster.local/blog/lets-dockerize-everything","canonical",{"__typename":109,"tag":96,"attributes":110},"MetaTagProperty",{"__typename":111,"property":112,"content":113},"MetaTagPropertyAttributes","og:title","Let's Dockerize Everything",{"__typename":109,"tag":96,"attributes":115},{"__typename":111,"property":116,"content":117},"og:image","http://liechtenecker-cms.liechtenecker-cms.svc.cluster.local/sites/default/files/styles/meta_og_image/public/wp-migration/wordpress-media-image/2020/03/dockerize-sm.jpg?h=3ecc83bb&itok=C1ZtiCHP",{"__typename":119,"id":120,"name":121,"path":122,"status":20,"weight":123,"description":124,"langcode":128,"changed":129,"metatag":132},"TermCategories","7","Technologie","/kategorie/technologie",0,{"__typename":125,"processed":126,"format":127},"Text","Development Themen sowie zukünftige Technologien, mit denen wir uns auseinandersetzen. ","wp_html",{"__typename":16,"id":17,"name":18,"direction":19},{"__typename":83,"timestamp":130,"timezone":85,"offset":86,"time":131},1713772777,"2024-04-22T07:59:37+00:00",[133,136,140],{"__typename":95,"tag":96,"attributes":134},{"__typename":98,"name":99,"content":135},"Technologie | Liechtenecker UX Design Studio",{"__typename":95,"tag":96,"attributes":137},{"__typename":98,"name":138,"content":139},"description","Development Themen sowie zukünftige Technologien, mit denen wir uns auseinandersetzen.",{"__typename":102,"tag":103,"attributes":141},{"__typename":105,"href":142,"hreflang":13,"rel":107,"media":13,"sizes":13,"type":13},"http://liechtenecker-cms.liechtenecker-cms.svc.cluster.local/kategorie/technologie",[144],{"__typename":145,"id":146,"name":147,"path":148,"weight":123},"TermTags","370","docker","/tag/docker",{"__typename":150,"processed":151,"format":127,"summary":152},"TextSummary","\u003Cdiv class=\"grid-wrapper\">\u003Cdiv class=\"row ckeditor-grid grid-100-dl\">\u003Cdiv class=\"ckeditor-grid-col default-left col-xsmall-12 col-medium-6 col-medium-offset-2 col-large-6 col-large-offset-3\">\u003Cp>Ich bin sehr begeistert von Docker. Hier ein kleiner Anstoß für all jene, die sich noch nicht den Ruck gegeben haben, sich damit zu beschäftigen. Alles in allem ist Docker eine ziemlich coole Anwendung. Der Workflow beim Entwickeln wird nach initialem Setup um ein Vielfaches vereinfacht.\u003C/p>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"grid-wrapper\">\u003Cdiv class=\"row ckeditor-grid grid-100-dl\">\u003Cdiv class=\"ckeditor-grid-col default-left col-xsmall-12 col-medium-6 col-medium-offset-2 col-large-6 col-large-offset-3\">\u003Cp>Das hier ist keine technische Anleitung und kein How-To.\u003C/p>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"grid-wrapper\">\u003Cdiv class=\"row ckeditor-grid grid-100-dl\">\u003Cdiv class=\"ckeditor-grid-col default-left col-xsmall-12 col-medium-6 col-medium-offset-2 col-large-6 col-large-offset-3\">\u003Cp>Es sind einfach nur ein paar Basics, die erklären, warum Docker zu einem wichtigen Teil in meinem Development-Workflow wurde und die euch den Einstieg in die Docker-Welt hoffentlich erleichtern.\u003C/p>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"grid-wrapper\">\u003Cdiv class=\"row ckeditor-grid grid-100-dl\">\u003Cdiv class=\"ckeditor-grid-col default-left col-xsmall-12 col-medium-6 col-medium-offset-2 col-large-6 col-large-offset-3\">\u003Ch2>Was ist Docker?\u003C/h2>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"grid-wrapper\">\u003Cdiv class=\"row ckeditor-grid grid-100-dl\">\u003Cdiv class=\"ckeditor-grid-col default-left col-xsmall-12 col-medium-6 col-medium-offset-2 col-large-6 col-large-offset-3\">\u003Cblockquote>\u003Cspan class=\"quote-text\" data-ftf=\"true\">Docker ist eine Freie Software zur Isolierung von Anwendungen mit Containervirtualisierung.\u003C/span>\u003Ccite class=\"author\">wikipedia\u003C/cite>\u003Cdiv class=\"background-text background-text-light\">Say What\u003C/div>\u003C/blockquote>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"grid-wrapper\">\u003Cdiv class=\"row ckeditor-grid grid-100-dl\">\u003Cdiv class=\"ckeditor-grid-col default-left col-xsmall-12 col-medium-6 col-medium-offset-2 col-large-6 col-large-offset-3\">\u003Cp>Bitte was!?\u003C/p>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"grid-wrapper\">\u003Cdiv class=\"row ckeditor-grid grid-100-dl\">\u003Cdiv class=\"ckeditor-grid-col default-left col-xsmall-12 col-medium-6 col-medium-offset-2 col-large-6 col-large-offset-3\">\u003Cp>Jede Software hat bestimmte Anforderungen an das zugrundeliegende Betriebssystem. Eine Webseite wird von außen nur über einen Webserver erreichbar sein. PHP Code wird nur ausgeführt werden, wenn am System ein PHP Interpreter installiert ist, und eine Java Applikation wird nur funktionieren, wenn ein Java Framework vorhanden ist.&nbsp;\u003C/p>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"grid-wrapper\">\u003Cdiv class=\"row ckeditor-grid grid-100-dl\">\u003Cdiv class=\"ckeditor-grid-col default-left col-xsmall-12 col-medium-6 col-medium-offset-2 col-large-6 col-large-offset-3\">\u003Cp>Docker kümmert sich darum, all diese Dependencies einer Anwendung in ein sogenanntes “Container-Image” zu packen. Das Image ist eine ausführbare Datei, welche alles notwendige enthält, um die Applikation auszuführen. Weitere Infos zu Docker findet ihr hier:&nbsp;\u003Ca href=\"https://www.docker.com/resources/what-container\" target=\"_blank\" aria-label=\" (öffnet in neuem Tab)\" rel=\"noreferrer noopener\">Docker.com – What is docker?\u003C/a>\u003Cbr>&nbsp;\u003C/p>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"grid-wrapper\">\u003Cdiv class=\"row ckeditor-grid grid-100-dl\">\u003Cdiv class=\"ckeditor-grid-col default-left col-xsmall-12 col-medium-6 col-medium-offset-2 col-large-6 col-large-offset-3\">\u003Cp>Das Container-Image enthält also das Betriebssystem,&nbsp;\u003Ca href=\"https://de.wikipedia.org/wiki/Laufzeitumgebung\" target=\"_blank\" aria-label=\" (öffnet in neuem Tab)\" rel=\"noreferrer noopener\">die Laufzeitumgebung\u003C/a>, alle benötigten Libraries und Programme, um die Applikation auszuführen. Der Docker-Container “glaubt” also, ein eigenes System zu sein, obwohl er doch eigentlich nur ein Prozess am Host-System ist.\u003Cbr>&nbsp;\u003C/p>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"grid-wrapper\">\u003Cdiv class=\"row ckeditor-grid grid-100-dl\">\u003Cdiv class=\"ckeditor-grid-col default-left col-xsmall-12 col-medium-6 col-medium-offset-2 col-large-6 col-large-offset-3\">\u003Cp>Lassen wir das mal so stehen, und schauen uns ein klassisches Webhosting Beispiel an:\u003C/p>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"grid-wrapper\">\u003Cdiv class=\"row ckeditor-grid grid-100-dl\">\u003Cdiv class=\"ckeditor-grid-col default-left col-xsmall-12 col-medium-6 col-medium-offset-2 col-large-6 col-large-offset-3\">\u003Cp>Auf einem Ubuntu Server soll ein WordPress CMS gehostet werden. Die Serveranforderungen von WordPress können&nbsp;\u003Ca href=\"https://wordpress.org/about/requirements/\" target=\"_blank\" aria-label=\" (öffnet in neuem Tab)\" rel=\"noreferrer noopener\">auf der Requirements-Seite von WordPress\u003C/a>&nbsp;nachgelesen werden.\u003C/p>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"grid-wrapper\">\u003Cdiv class=\"row ckeditor-grid grid-100-dl\">\u003Cdiv class=\"ckeditor-grid-col default-left col-xsmall-12 col-medium-6 col-medium-offset-2 col-large-6 col-large-offset-3\">\u003Cp>Die Version 5.3.2 hat folgende Requirements:\u003C/p>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"grid-wrapper\">\u003Cdiv class=\"row ckeditor-grid grid-100-dl\">\u003Cdiv class=\"ckeditor-grid-col default-left col-xsmall-12 col-medium-6 col-medium-offset-2 col-large-6 col-large-offset-3 standard-list\">\u003Cul>\u003Cli data-list-item-id=\"ede6c2d0b1ded6a6cba474bf86db5e18c\">PHP &gt;= 7.3\u003C/li>\u003Cli data-list-item-id=\"e60b75b042ff192ee88a1db4405eaa9d5\">MySQL &gt;= 5.6 oder MariaDB &gt;= 10.1\u003C/li>\u003Cli data-list-item-id=\"e198439b8ce60cd9048557d81997a4b7d\">Webserver (nginx oder Apache2)\u003C/li>\u003C/ul>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"grid-wrapper\">\u003Cdiv class=\"row ckeditor-grid grid-100-dl\">\u003Cdiv class=\"ckeditor-grid-col default-left col-xsmall-12 col-medium-6 col-medium-offset-2 col-large-6 col-large-offset-3\">\u003Cp>Jetzt denkt ihr euch bestimmt:&nbsp;\u003Cbr>Kein Problem! Das Ganze kann man doch locker flockig am Server installieren!\u003C/p>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"grid-wrapper\">\u003Cdiv class=\"row ckeditor-grid grid-100-dl\">\u003Cdiv class=\"ckeditor-grid-col default-left col-xsmall-12 col-medium-6 col-medium-offset-2 col-large-6 col-large-offset-3\">\u003Ch2>Wozu also Docker?!\u003C/h2>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"grid-wrapper\">\u003Cdiv class=\"row ckeditor-grid grid-100-dl\">\u003Cdiv class=\"ckeditor-grid-col default-left col-xsmall-12 col-medium-6 col-medium-offset-2 col-large-6 col-large-offset-3\">\u003Ch4>1. Scalability\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"grid-wrapper\">\u003Cdiv class=\"row ckeditor-grid grid-100-dl\">\u003Cdiv class=\"ckeditor-grid-col default-left col-xsmall-12 col-medium-6 col-medium-offset-2 col-large-6 col-large-offset-3\">\u003Cp>Mithilfe von Docker kann man kann beliebig viele Container-Instanzen aus einem Docker-Image erstellen. Das bedeutet, man kann 10 Web Server Instanzen gleichzeitig laufen lassen, einen Load-Balancer davor schalten und somit die Last auf diese 10 Instanzen verteilen.\u003C/p>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"grid-wrapper\">\u003Cdiv class=\"row ckeditor-grid grid-100-dl\">\u003Cdiv class=\"ckeditor-grid-col default-left col-xsmall-12 col-medium-6 col-medium-offset-2 col-large-6 col-large-offset-3\">\u003Cp>Anwendungen, wie&nbsp;\u003Ca href=\"https://docs.docker.com/engine/swarm/\" target=\"_blank\" aria-label=\" (öffnet in neuem Tab)\" rel=\"noreferrer noopener\">Docker Swarm\u003C/a>&nbsp;und&nbsp;\u003Ca href=\"https://kubernetes.io/de/\" target=\"_blank\" aria-label=\" (öffnet in neuem Tab)\" rel=\"noreferrer noopener\">Kubernetes\u003C/a>&nbsp;stellen einfache und intuitive Plattformen zur Verfügung, wie die Container sogar auf mehrere physische Server verteilt werden können. Mehr dazu findet ihr auf deren Webseiten.\u003Cbr>&nbsp;\u003C/p>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"grid-wrapper\">\u003Cdiv class=\"row ckeditor-grid grid-100-dl\">\u003Cdiv class=\"ckeditor-grid-col default-left col-xsmall-12 col-medium-6 col-medium-offset-2 col-large-6 col-large-offset-3\">\u003Cp>Dieser Punkt wird dann essentiell, wenn auf den Anwendungen sehr viele Zugriffe zugleich passieren.&nbsp;\u003C/p>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"grid-wrapper\">\u003Cdiv class=\"row ckeditor-grid grid-100-dl\">\u003Cdiv class=\"ckeditor-grid-col default-left col-xsmall-12 col-medium-6 col-medium-offset-2 col-large-6 col-large-offset-3\">\u003Cp>Für kleinere Projekte sind die nächsten beiden Use-Cases relevanter:\u003C/p>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"grid-wrapper\">\u003Cdiv class=\"row ckeditor-grid grid-100-dl\">\u003Cdiv class=\"ckeditor-grid-col default-left col-xsmall-12 col-medium-6 col-medium-offset-2 col-large-6 col-large-offset-3\">\u003Ch4>2. Entwicklungsumgebungen —&nbsp;Lokal, Dev, Test, Staging, Production\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"grid-wrapper\">\u003Cdiv class=\"row ckeditor-grid grid-100-dl\">\u003Cdiv class=\"ckeditor-grid-col default-left col-xsmall-12 col-medium-6 col-medium-offset-2 col-large-6 col-large-offset-3\">\u003Cp>Es kommt (gottseidank) nur selten vor, dass Änderungen der Codebase am Live-Server durchgeführt werden. Eher wird lokal (am Rechner der Entwickler) entwickelt, die Änderungen werden dann Schritt für Schritt auf die unterschiedlichen Umgebungen deployed.\u003C/p>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"grid-wrapper\">\u003Cdiv class=\"row ckeditor-grid grid-100-dl\">\u003Cdiv class=\"ckeditor-grid-col default-left col-xsmall-12 col-medium-6 col-medium-offset-2 col-large-6 col-large-offset-3\">\u003Cp>Es gibt also nicht einen Server, sondern eine lokale Entwicklungsumgebung und vier Server (Dev, Test, Staging, Produktion). Man müsste also nicht einen, sondern vier Server aufsetzen. Lokal hat man meisten überhaupt mehr Projekte mit unterschiedlichsten System-Requirements. Und hier kommt Docker zum Einsatz:\u003C/p>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"grid-wrapper\">\u003Cdiv class=\"row ckeditor-grid grid-100-dl\">\u003Cdiv class=\"ckeditor-grid-col default-left col-xsmall-12 col-medium-6 col-medium-offset-2 col-large-6 col-large-offset-3\">\u003Cp>Docker-Images enthalten bekanntlich \u003Cstrong>alle Dependencies\u003C/strong>, um eine Anwendung auszuführen.\u003C/p>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"grid-wrapper\">\u003Cdiv class=\"row ckeditor-grid grid-100-dl\">\u003Cdiv class=\"ckeditor-grid-col default-left col-xsmall-12 col-medium-6 col-medium-offset-2 col-large-6 col-large-offset-3\">\u003Cp>Wenn man Applikationen als Docker-Image bereitstellt, ist sichergestellt, dass die Applikation im Container läuft — alle Dependencies sind ja im Container geladen. Das Image wird lokal einmal erstellt, und kann auf den Servern einfach gestartet werden.&nbsp;\u003C/p>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"grid-wrapper\">\u003Cdiv class=\"row ckeditor-grid grid-100-dl\">\u003Cdiv class=\"ckeditor-grid-col default-left col-xsmall-12 col-medium-6 col-medium-offset-2 col-large-6 col-large-offset-3\">\u003Ch4>3. Hosting mehrerer Applikationen mit unterschiedlichen Systemanforderungen\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"grid-wrapper\">\u003Cdiv class=\"row ckeditor-grid grid-100-dl\">\u003Cdiv class=\"ckeditor-grid-col default-left col-xsmall-12 col-medium-6 col-medium-offset-2 col-large-6 col-large-offset-3\">\u003Cp>Weiters wird ein Server meist nicht nur zum Hosting einer Applikation genutzt. Viel wahrscheinlicher ist es, dass mehrere gleichzeitig auf einem Server laufen sollen.&nbsp;\u003C/p>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"grid-wrapper\">\u003Cdiv class=\"row ckeditor-grid grid-100-dl\">\u003Cdiv class=\"ckeditor-grid-col default-left col-xsmall-12 col-medium-6 col-medium-offset-2 col-large-6 col-large-offset-3\">\u003Cp>Bsp:\u003C/p>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"grid-wrapper\">\u003Cdiv class=\"row ckeditor-grid grid-100-dl\">\u003Cdiv class=\"ckeditor-grid-col default-left col-xsmall-12 col-medium-6 col-medium-offset-2 col-large-6 col-large-offset-3 standard-list\">\u003Cul>\u003Cli data-list-item-id=\"e2b0578f1097c25702e1d1421bcc23095\">Frontend App (Angular 9)\u003C/li>\u003Cli data-list-item-id=\"ea8bd19fbe7f6ab755a817e46876efdeb\">Frontend App (Angular 7)\u003C/li>\u003Cli data-list-item-id=\"e2b104af170291481aabe2720360c89e0\">WordPress (&lt;= PHP 7.0 weil ein benötigtes Plugin noch nicht PHP 7.3 unterstützt; MySQL 5.7)\u003C/li>\u003Cli data-list-item-id=\"ef6d14148c751b2d278a38e42f75ad99d\">Drupal 8.8.0 (&gt;= PHP 7.3, MySQL 8.0)\u003C/li>\u003Cli data-list-item-id=\"e4bbe3344f7738249af9347d5c2dd8a99\">Laravel 6.0 (PHP &gt;= 7.2)\u003C/li>\u003Cli data-list-item-id=\"e71487f963aeb82aba2853fb9c8477ab2\">KeyCloak (Java 8 JDK &amp; MySQL 8.0)&nbsp;\u003C/li>\u003C/ul>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"grid-wrapper\">\u003Cdiv class=\"row ckeditor-grid grid-100-dl\">\u003Cdiv class=\"ckeditor-grid-col default-left col-xsmall-12 col-medium-6 col-medium-offset-2 col-large-6 col-large-offset-3\">\u003Cp>In diesem Szenario stößt man schnell mal auf Probleme beim Server-Setup. Für Drupal und Laravel wird PHP 7.3 oder 7.4 benötigt. WordPress funktioniert aber nur bis PHP 7.0. Bei der&nbsp; MySQL Datenbank besteht das gleiche Problem. Auch die Frontend Apps könnten unterschiedliche node/npm Versionen benötigen.\u003C/p>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"grid-wrapper\">\u003Cdiv class=\"row ckeditor-grid grid-100-dl\">\u003Cdiv class=\"ckeditor-grid-col default-left col-xsmall-12 col-medium-6 col-medium-offset-2 col-large-6 col-large-offset-3\">\u003Cp>Jetzt gibt es 2 mögliche Wege:\u003C/p>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"grid-wrapper\">\u003Cdiv class=\"row ckeditor-grid grid-100-dl\">\u003Cdiv class=\"ckeditor-grid-col default-left col-xsmall-12 col-medium-6 col-medium-offset-2 col-large-6 col-large-offset-3 standard-list\">\u003Cul>\u003Cli data-list-item-id=\"ef12893d8b192feae423157ed20a2f208\">für jede Applikation einen neuen Server aufsetzen.\u003C/li>\u003Cli data-list-item-id=\"e3ec80ab462665b4d8423d2c09d166982\">die Applikationen isolieren, und als Container parallel laufen lassen.\u003C/li>\u003C/ul>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"grid-wrapper\">\u003Cdiv class=\"row ckeditor-grid grid-100-dl\">\u003Cdiv class=\"ckeditor-grid-col default-left col-xsmall-12 col-medium-6 col-medium-offset-2 col-large-6 col-large-offset-3\">\u003Cp>Da ersteres aus diversen Gründen (Preis, Ressourcen, Umwelt, ..) nicht praktikabel ist, können auch hier Docker Container Abhilfe leisten.\u003C/p>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"grid-wrapper\">\u003Cdiv class=\"row ckeditor-grid grid-100-dl\">\u003Cdiv class=\"ckeditor-grid-col default-left col-xsmall-12 col-medium-6 col-medium-offset-2 col-large-6 col-large-offset-3\">\u003Cp>Die beiden Frontend-Apps werden je mit der richtigen Node-Version in ein Docker-Image gepackt. Für die beiden nötigen Datenbank-Versionen wird je ein Image erstellt. Ein weiteres Image wird mit WordPress, einem Webserver (z.B. Apache2) und PHP 7.0 erstellt. Drupal und Laravel kommen ebenfalls je in ein Image mit einem Webserver und PHP. In dem Fall allerdings in der Version 7.4. Keycloak wird in ein Image mit der Java 8 JDK gepackt.\u003C/p>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"grid-wrapper\">\u003Cdiv class=\"row ckeditor-grid grid-100-dl\">\u003Cdiv class=\"ckeditor-grid-col default-left col-xsmall-12 col-medium-6 col-medium-offset-2 col-large-6 col-large-offset-3\">\u003Cp>Gesamt gibt es nun 6 Images, in denen die jeweils relevanten System-Requirements installiert, und die Codebase der Applikation geladen ist. Diese Images können nun auf den Servern einfach via “docker run” gestartet werden.\u003C/p>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"grid-wrapper\">\u003Cdiv class=\"row ckeditor-grid grid-100-dl\">\u003Cdiv class=\"ckeditor-grid-col default-left col-xsmall-12 col-medium-6 col-medium-offset-2 col-large-6 col-large-offset-3\">\u003Cp>Um die Kommunikation zwischen Containern zu ermöglichen, können Docker Netzwerke angelegt werden. Drupal und Keycloak würden in unserem Fall mit dem MySQL 8.0 Container kommunizieren, und WordPress mit dem MySQL 5.7 Container.\u003C/p>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"grid-wrapper\">\u003Cdiv class=\"row ckeditor-grid grid-100-dl\">\u003Cdiv class=\"ckeditor-grid-col default-left col-xsmall-12 col-medium-6 col-medium-offset-2 col-large-6 col-large-offset-3\">\u003Ch2>Sum up\u003C/h2>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"grid-wrapper\">\u003Cdiv class=\"row ckeditor-grid grid-100-dl\">\u003Cdiv class=\"ckeditor-grid-col default-left col-xsmall-12 col-medium-6 col-medium-offset-2 col-large-6 col-large-offset-3\">\u003Cp>Alles in allem ist Docker eine ziemlich mächtige Anwendung. Falls du noch keine Erfahrung mit Docker hast, findest du viele Informationen in der&nbsp;\u003Ca href=\"https://docs.docker.com/\">offiziellen Docker Dokumentation\u003C/a>. Falls du bereits einige Projekte mit Docker, oder einer anderen Container-Virtualisierung-Software, umgesetzt hast, schreib’ uns doch bitte deine größten “Wow”-Erfahrungen in den Kommentaren!&nbsp;\u003Cbr>&nbsp;\u003C/p>\u003C/div>\u003C/div>\u003C/div>","Warum Docker ein wichtiger Teil im Development-Workflow ist und wie der Einstieg in die Docker-Welt einfacher geht.",{"__typename":154,"id":155,"excludeFromScreenreader":13,"mediaImage":156,"name":162,"path":165,"status":20},"MediaImage","827",{"__typename":157,"url":158,"width":159,"height":160,"alt":161,"title":162,"size":163,"mime":164},"Image","http://liechtenecker-cms.liechtenecker-cms.svc.cluster.local/sites/default/files/wp-migration/wordpress-media-image/2020/03/dockerize-web-scaled.jpg",2560,1156,"Dockerize everything","dockerize everything",1635041,"image/jpeg","/media/827/edit",{"__typename":154,"id":167,"excludeFromScreenreader":13,"mediaImage":168,"name":161,"path":173,"status":20},"826",{"__typename":157,"url":169,"width":170,"height":171,"alt":161,"title":161,"size":172,"mime":164},"http://liechtenecker-cms.liechtenecker-cms.svc.cluster.local/sites/default/files/wp-migration/wordpress-media-image/2020/03/dockerize-sm.jpg",1204,630,857571,"/media/826/edit","\u003C!-- This site is optimized with the Yoast SEO plugin v15.7 - https://yoast.com/wordpress/plugins/seo/ -->\r\n\u003Cmeta name=\"description\" content=\"Warum Docker ein wichtiger Teil im Development-Workflow ist und wie der Einstieg in die Docker-Welt einfacher geht.\" />\r\n\u003Cmeta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" />\r\n\u003Clink rel=\"canonical\" href=\"https://legacy.liechtenecker.dev/blog/lets-dockerize-everything/\" />\r\n\u003Cmeta property=\"og:locale\" content=\"de_DE\" />\r\n\u003Cmeta property=\"og:type\" content=\"article\" />\r\n\u003Cmeta property=\"og:title\" content=\"Let’s Dockerize everything! - Liechtenecker\" />\r\n\u003Cmeta property=\"og:description\" content=\"Warum Docker ein wichtiger Teil im Development-Workflow ist und wie der Einstieg in die Docker-Welt einfacher geht.\" />\r\n\u003Cmeta property=\"og:url\" content=\"https://legacy.liechtenecker.dev/blog/lets-dockerize-everything/\" />\r\n\u003Cmeta property=\"og:site_name\" content=\"Liechtenecker\" />\r\n\u003Cmeta property=\"article:published_time\" content=\"2020-03-10T13:33:17+00:00\" />\r\n\u003Cmeta property=\"article:modified_time\" content=\"2021-02-26T09:21:17+00:00\" />\r\n\u003Cmeta name=\"twitter:card\" content=\"summary_large_image\" />\r\n\u003Cmeta name=\"twitter:label1\" content=\"Geschätzte Lesezeit\">\r\n\t\u003Cmeta name=\"twitter:data1\" content=\"4 Minuten\">\r\n\u003Cscript type=\"application/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"https://legacy.liechtenecker.dev/#website\",\"url\":\"https://legacy.liechtenecker.dev/\",\"name\":\"Liechtenecker\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"https://legacy.liechtenecker.dev/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"de-DE\"},{\"@type\":\"WebPage\",\"@id\":\"https://legacy.liechtenecker.dev/blog/lets-dockerize-everything/#webpage\",\"url\":\"https://legacy.liechtenecker.dev/blog/lets-dockerize-everything/\",\"name\":\"Let\\u2019s Dockerize everything! - Liechtenecker\",\"isPartOf\":{\"@id\":\"https://legacy.liechtenecker.dev/#website\"},\"datePublished\":\"2020-03-10T13:33:17+00:00\",\"dateModified\":\"2021-02-26T09:21:17+00:00\",\"author\":{\"@id\":\"https://legacy.liechtenecker.dev/#/schema/person/d8b80cc046b867225321ea8b7a2a6de7\"},\"description\":\"Warum Docker ein wichtiger Teil im Development-Workflow ist und wie der Einstieg in die Docker-Welt einfacher geht.\",\"inLanguage\":\"de-DE\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https://legacy.liechtenecker.dev/blog/lets-dockerize-everything/\"]}]},{\"@type\":\"Person\",\"@id\":\"https://legacy.liechtenecker.dev/#/schema/person/d8b80cc046b867225321ea8b7a2a6de7\",\"name\":\"Daniel\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https://legacy.liechtenecker.dev/#personlogo\",\"inLanguage\":\"de-DE\",\"url\":\"https://secure.gravatar.com/avatar/5708f7599c8e99528411ef29bef1ee34?s=96&d=mm&r=g\",\"caption\":\"Daniel\"}}]}\u003C/script>\r\n\u003C!-- / Yoast SEO plugin. -->",{"__typename":176,"id":177,"myRole":178,"name":179,"nickname":180},"User","5","Backend Development🤓","d-steindl","Daniel",{"latestKnowhow":182},[183,198,211],{"__typename":79,"id":184,"title":185,"path":186,"wpTeaserText":187,"wpPromotedTeaserImage":13,"wpHeaderImage":188},"1619","Behind the scenes: Ein Barrierefreiheits-Audit","/blog/behind-scenes-ein-barrierefreiheits-audit","”Entspricht unsere Website den gesetzlichen Anforderungen und wenn nicht, was genau müssen wir ändern?”\r\nDiese Frage lieben wir. Echt! Und so sieht unsere Antwort aus.",{"__typename":154,"id":189,"excludeFromScreenreader":13,"mediaImage":190,"name":196,"path":197,"status":20},"3364",{"__typename":157,"url":191,"width":192,"height":193,"alt":194,"title":13,"size":195,"mime":164},"http://liechtenecker-cms.liechtenecker-cms.svc.cluster.local/sites/default/files/2026-04/Headerbilder%20Blogartikel%20Behind%20the%20scene%20Accessibility%20Audit.jpg",2880,1300,"Headline mit Sujet: Tastatur mit Symbolen für Barrierefreiheit im Fokus auf hellem  Hintergrund",838204,"Headerbilder Blogartikel Behind the scene Accessibility Audit.jpg","/media/3364/edit",{"__typename":79,"id":199,"title":200,"path":201,"wpTeaserText":202,"wpPromotedTeaserImage":13,"wpHeaderImage":203},"1616","Agentic KI trifft Design-System: Wie unser Presentation Maker entstand.","/blog/agentic-ki-trifft-design-system-wie-unser-presentation-maker-entstand","Nein, wir wollen euch jetzt nicht erzählen, was KI alles kann. Aber wir möchten euch zeigen, wie wir mit KI umgehen. \r\n",{"__typename":154,"id":204,"excludeFromScreenreader":13,"mediaImage":205,"name":209,"path":210,"status":20},"3355",{"__typename":157,"url":206,"width":192,"height":193,"alt":207,"title":13,"size":208,"mime":164},"http://liechtenecker-cms.liechtenecker-cms.svc.cluster.local/sites/default/files/2026-03/BLOG_Presentation%20Tool_TITEL-2880x1300px_1.jpg","Lukas und Daniel  arbeiten an Computern im Büro.",2621988,"BLOG_Presentation Tool_TITEL-2880x1300px.jpg","/media/3355/edit",{"__typename":79,"id":212,"title":213,"path":214,"wpTeaserText":13,"wpPromotedTeaserImage":13,"wpHeaderImage":215},"1606","UI Trends 2026","/blog/ui-trends-2026",{"__typename":154,"id":216,"excludeFromScreenreader":21,"mediaImage":217,"name":221,"path":222,"status":20},"3303",{"__typename":157,"url":218,"width":192,"height":193,"alt":219,"title":13,"size":220,"mime":164},"http://liechtenecker-cms.liechtenecker-cms.svc.cluster.local/sites/default/files/2026-01/BLOG_Trendbericht%202026.jpg","UI Trends 2026, gelber Hintergrund, schwarze Schrift.",4700748,"BLOG_Trendbericht 2026.jpg","/media/3303/edit",{"Language:de":224,"MenuItem:9ffc5019-cbd8-4b2e-8eb7-9feae486d4a1":225,"MenuItem:1c7a5430-8a42-4b24-9544-252adabc2f4c":229,"MenuItem:9c4feedc-79e4-4fbf-b68c-065f33ebfe4c":232,"MenuItem:3b77a27b-272a-489f-843e-53e23ed07741":235,"MenuItem:ce0bb82b-e1ee-4036-be95-f693a62e9f4a":238,"MenuItem:04a19381-81a9-4694-8653-182d8855d2b5":241,"Menu:nuxt-main-menu":244,"ROOT_QUERY":258,"MenuItem:e2873307-b50a-4aab-b6b2-1950fd99c72e":274,"MenuItem:2cd9b7c9-142a-4ea3-b898-a0952c54a195":277,"MenuItem:a5effba3-5a8c-4125-8d78-0cdba09824db":280,"MenuItem:114bf071-bdbb-44cf-85c1-69e9d9e0777d":283,"Menu:footer":286,"TermCategories:7":296,"TermTags:370":307,"MediaImage:827":308,"MediaImage:826":310,"User:5":312,"NodeWpPost:779":313,"MediaImage:3364":338,"NodeWpPost:1619":340,"MediaImage:3355":343,"NodeWpPost:1616":345,"MediaImage:3303":348,"NodeWpPost:1606":350},["null","__typename",16,"id",17,"name",18,"direction",19],["null","__typename",10,"id",11,"title",12,"description",13,"url",14,"langcode",226,"internal",20,"expanded",21,"attributes",228],{"__ref":227},"Language:de",["null","__typename",23,"class",13],["null","__typename",10,"id",25,"title",26,"description",13,"url",27,"langcode",230,"internal",20,"expanded",21,"attributes",231],{"__ref":227},["null","__typename",23,"class",13],["null","__typename",10,"id",30,"title",31,"description",13,"url",32,"langcode",233,"internal",20,"expanded",21,"attributes",234],{"__ref":227},["null","__typename",23,"class",13],["null","__typename",10,"id",35,"title",36,"description",13,"url",37,"langcode",236,"internal",20,"expanded",21,"attributes",237],{"__ref":227},["null","__typename",23,"class",13],["null","__typename",10,"id",40,"title",41,"description",13,"url",42,"langcode",239,"internal",20,"expanded",21,"attributes",240],{"__ref":227},["null","__typename",23,"class",13],["null","__typename",10,"id",45,"title",46,"description",13,"url",47,"langcode",242,"internal",20,"expanded",21,"attributes",243],{"__ref":227},["null","__typename",23,"class",13],["null","__typename",5,"id",6,"name",7,"items",245],[246,248,250,252,254,256],{"__ref":247},"MenuItem:9ffc5019-cbd8-4b2e-8eb7-9feae486d4a1",{"__ref":249},"MenuItem:1c7a5430-8a42-4b24-9544-252adabc2f4c",{"__ref":251},"MenuItem:9c4feedc-79e4-4fbf-b68c-065f33ebfe4c",{"__ref":253},"MenuItem:3b77a27b-272a-489f-843e-53e23ed07741",{"__ref":255},"MenuItem:ce0bb82b-e1ee-4036-be95-f693a62e9f4a",{"__ref":257},"MenuItem:04a19381-81a9-4694-8653-182d8855d2b5",["null","__typename",259,"menu({\"name\":\"NUXT_MAIN_MENU\"})",260,"menu({\"name\":\"FOOTER\"})",262,"route({\"path\":\"/blog/lets-dockerize-everything\"})",264,"latestKnowhow({\"excludeId\":\"779\",\"limit\":3})",267],"Query",{"__ref":261},"Menu:nuxt-main-menu",{"__ref":263},"Menu:footer",["null","__typename",77,"entity",265],{"__ref":266},"NodeWpPost:779",[268,270,272],{"__ref":269},"NodeWpPost:1619",{"__ref":271},"NodeWpPost:1616",{"__ref":273},"NodeWpPost:1606",["null","__typename",10,"id",55,"title",56,"description",13,"url",57,"langcode",275,"internal",20,"expanded",21,"attributes",276],{"__ref":227},["null","__typename",23,"class",13],["null","__typename",10,"id",61,"title",62,"description",13,"url",63,"langcode",278,"internal",20,"expanded",21,"attributes",279],{"__ref":227},["null","__typename",23,"class",13],["null","__typename",10,"id",66,"title",67,"description",13,"url",68,"langcode",281,"internal",20,"expanded",21,"attributes",282],{"__ref":227},["null","__typename",23,"class",13],["null","__typename",10,"id",71,"title",72,"description",13,"url",73,"langcode",284,"internal",21,"expanded",21,"attributes",285],{"__ref":227},["null","__typename",23,"class",13],["null","__typename",5,"id",51,"name",52,"items",287],[288,290,292,294],{"__ref":289},"MenuItem:e2873307-b50a-4aab-b6b2-1950fd99c72e",{"__ref":291},"MenuItem:2cd9b7c9-142a-4ea3-b898-a0952c54a195",{"__ref":293},"MenuItem:a5effba3-5a8c-4125-8d78-0cdba09824db",{"__ref":295},"MenuItem:114bf071-bdbb-44cf-85c1-69e9d9e0777d",["null","__typename",119,"id",120,"name",121,"path",122,"status",20,"weight",123,"description",297,"langcode",298,"changed",299,"metatag",300],["null","__typename",125,"processed",126,"format",127],{"__ref":227},["null","__typename",83,"timestamp",130,"timezone",85,"offset",86,"time",131],[301,303,305],["null","__typename",95,"tag",96,"attributes",302],["null","__typename",98,"name",99,"content",135],["null","__typename",95,"tag",96,"attributes",304],["null","__typename",98,"name",138,"content",139],["null","__typename",102,"tag",103,"attributes",306],["null","__typename",105,"href",142,"hreflang",13,"rel",107,"media",13,"sizes",13,"type",13],["null","__typename",145,"id",146,"name",147,"path",148,"weight",123],["null","__typename",154,"id",155,"excludeFromScreenreader",13,"mediaImage",309,"name",162,"path",165,"status",20],["null","__typename",157,"url",158,"width",159,"height",160,"alt",161,"title",162,"size",163,"mime",164],["null","__typename",154,"id",167,"excludeFromScreenreader",13,"mediaImage",311,"name",161,"path",173,"status",20],["null","__typename",157,"url",169,"width",170,"height",171,"alt",161,"title",161,"size",172,"mime",164],["null","__typename",176,"id",177,"myRole",178,"name",179,"nickname",180],["null","__typename",79,"id",80,"title",81,"changed",314,"created",315,"langcode",316,"path",92,"promote",21,"status",20,"sticky",21,"metatag",317,"category",326,"contentElements",13,"evergreen",21,"tags",328,"wpBody",331,"wpHeaderImage",332,"wpHeaderImageOld",13,"wpHeaderImageOldSmall",13,"wpOgImage",334,"wpPromotedTeaserImage",13,"wpShareDescription",13,"wpShareTitle",113,"wpTeaserText",152,"wpYoastHead",174,"author",336],["null","__typename",83,"timestamp",84,"timezone",85,"offset",86,"time",87],["null","__typename",83,"timestamp",89,"timezone",85,"offset",86,"time",90],{"__ref":227},[318,320,322,324],["null","__typename",95,"tag",96,"attributes",319],["null","__typename",98,"name",99,"content",100],["null","__typename",102,"tag",103,"attributes",321],["null","__typename",105,"href",106,"hreflang",13,"rel",107,"media",13,"sizes",13,"type",13],["null","__typename",109,"tag",96,"attributes",323],["null","__typename",111,"property",112,"content",113],["null","__typename",109,"tag",96,"attributes",325],["null","__typename",111,"property",116,"content",117],{"__ref":327},"TermCategories:7",[329],{"__ref":330},"TermTags:370",["null","__typename",150,"processed",151,"format",127,"summary",152],{"__ref":333},"MediaImage:827",{"__ref":335},"MediaImage:826",{"__ref":337},"User:5",["null","__typename",154,"id",189,"excludeFromScreenreader",13,"mediaImage",339,"name",196,"path",197,"status",20],["null","__typename",157,"url",191,"width",192,"height",193,"alt",194,"title",13,"size",195,"mime",164],["null","__typename",79,"id",184,"title",185,"path",186,"wpTeaserText",187,"wpPromotedTeaserImage",13,"wpHeaderImage",341],{"__ref":342},"MediaImage:3364",["null","__typename",154,"id",204,"excludeFromScreenreader",13,"mediaImage",344,"name",209,"path",210,"status",20],["null","__typename",157,"url",206,"width",192,"height",193,"alt",207,"title",13,"size",208,"mime",164],["null","__typename",79,"id",199,"title",200,"path",201,"wpTeaserText",202,"wpPromotedTeaserImage",13,"wpHeaderImage",346],{"__ref":347},"MediaImage:3355",["null","__typename",154,"id",216,"excludeFromScreenreader",21,"mediaImage",349,"name",221,"path",222,"status",20],["null","__typename",157,"url",218,"width",192,"height",193,"alt",219,"title",13,"size",220,"mime",164],["null","__typename",79,"id",212,"title",213,"path",214,"wpTeaserText",13,"wpPromotedTeaserImage",13,"wpHeaderImage",351],{"__ref":352},"MediaImage:3303"]