efficiency. we set IT up. Das neue Entwicklerleben mit Windows 10 // 26.07.2017 // Marco Bratz & Klaus Moser // // Marco Bratz & Klaus Moser 1
Marco Bratz Senior Software Architect Klaus Moser Senior Software Architect // Marco Bratz & Klaus Moser 2
https://www.doubleslash.de/karriere // Marco Bratz & Klaus Moser 3
Was tun mit einer doubleslash-ente? ab in den Urlaub und uns davon berichten! // Marco Bratz & Klaus Moser 4
Windows Subsystem for Linux (WSL) // Marco Bratz & Klaus Moser 5
WSL: Voraussetzung und Installation Windows 10 64-bit mit Anniversary Update oder höher (Build 1607+) Installation gemäß Anleitung https://msdn.microsoft.com/dede/commandline/wsl/install_guide Unterschiede in den WSL-Versionen: Anniversary Update (Build 1607) Ubuntu 14.04 LTS Creators Update (Build 1703) Ubuntu 16.04 LTS // Marco Bratz & Klaus Moser 6
Ausblick: WSL ab Fall Creators Update Ab dem Fall Creators Update (Herbst 2017) ist das WSL über den Store verfügbar Verschiedene Distributionen: Ubuntu opensuse SUSE Linux Enterprise Server Lassen sich parallel verwenden und sind unabhängig voneinander // Marco Bratz & Klaus Moser 7
Dateisystemzugriff im WSL Das Windows-Dateisystem ist unter /mnt/c erreichbar Es kann ein symbolischer Link für den vereinfachten Zugriff erstellt werden Bspw. /c /mnt/c Achtung bei Sonderzeichen und Leerzeichen! // Marco Bratz & Klaus Moser 8
Inhalt des WSL unter Windows Der Inhalt des WSL ist in Windows verfügbar: C:\Users\<USER>\AppData\Local\ lxss Achtung: Wird im Explorer nicht direkt angezeigt. Über direkte Eingabe des Pfades in die Adressleiste aber sichtbar! // Marco Bratz & Klaus Moser 9
Windows-Programme im WSL starten Im WSL können Windows-Programme gestartet werden (ab 1703). Bspw.: explorer.exe notepad.exe cmd.exe /c ping google.de // Marco Bratz & Klaus Moser 10
Verbindung Windows <-> WSL Befehle lassen sich zwischen Windows und WSL miteinander kombinieren. Die Verbindung läuft über Pipes. // Marco Bratz & Klaus Moser 11
Einführung in Containertechnologie // Marco Bratz & Klaus Moser 12
Einführung in Containertechnologie Eine Definition Docker ist eine offene Plattform für Entwickler und Administratoren um verteilte Applikationen zu bauen, auszuliefern und zu betreiben. docker.com // Marco Bratz & Klaus Moser 13
Einführung in Containertechnologie Server Konfiguration und Deployment heute Experten-Know-How für Hardware/Software-Stack notwendig Kompliziert nur Erfahrene im Team führen das Deployment durch Jede Komponente muss anders konfiguriert werden Fehleranfällig Aufwändig Fehlende Automatisierung Lange Todo-Listen, komplizierte Installationsanleitungen viele kleine Vorgehensweisen, Skripte und Tools Gilt für alle Umgebungen (auch Dev)! // Marco Bratz & Klaus Moser 14
Einführung in Containertechnologie Matrix des Untergangs Hardware /Software CentOS Dev1 Dev2 TST INT PROD VM / Europa PROD Cloud USA?????? Java Apache JBoss MySQL?????? Vereinfachtes Beispiel!?????????????????? ELK?????? https://www.docker.com/whatisdocker/ // Marco Bratz & Klaus Moser 15
Einführung in Containertechnologie Matrix des Untergangs 6 Hardware -Umgebungen 6 Software-Komponenten = 36 Kombinationen, bei denen etwas schief gehen kann Wer will das alles testen??? // Marco Bratz & Klaus Moser 16
Einführung in Containertechnologie Matrix des Untergangs http://giphy.com/gifs/the-simpsons-crazy-r-simpson-7jbmfrlqjmxuc // Marco Bratz & Klaus Moser 17
Einführung in Containertechnologie Wie hat dies die Industrie gelöst? // Marco Bratz & Klaus Moser 18
Einführung in Containertechnologie Wie hat dies die Industrie gelöst? Güter???????????????????????????????????? // Marco Bratz & Klaus Moser 19
Einführung in Containertechnologie Matrix des Untergangs Hardware /Software CentOS Dev1 Dev2 TST INT PROD VM / Europa PROD Cloud USA?????? Java Apache JBoss MySQL ELK?????????????????????????????? // Marco Bratz & Klaus Moser 20
Einführung in Containertechnologie Textuelle Zusammenfassung Docker enables apps to be quickly assembled from components and eliminates the friction between development, QA, and production environments. As a result, IT can ship faster and run the same app, unchanged, on laptops, data center VMs, and any cloud. docker.com // Marco Bratz & Klaus Moser 21
Einführung in Containertechnologie Wer nutzt Docker? Auslieferung Developer baut Docker Image (Deploymentpaket) Administrator betreibt Docker Container (Laufendes Deploymentpaket) // Marco Bratz & Klaus Moser 22
Einführung in Containertechnologie Wie hilft Docker den Developers? Developer // Marco Bratz & Klaus Moser 23
Einführung in Containertechnologie Wie hilft Docker den Developers? baue jede Anwendung in jeder Sprache mit jeder Werkzeugkette Dockerifizierte Anwendungen sind komplett portabel und überall ausführbar (Linux, OS X, Windows Notebooks, Testumgebungen, Ubuntu in der Cloud, Produktions- Rechenzentren mit VMs auf denen Red Hat läuft) Developer Schnelles Ausführen von über 13,000+ Anwendungen, die im Docker Hub als Images zu Verfügung stehen // Marco Bratz & Klaus Moser 24
Einführung in Containertechnologie Wie hilft Docker den Developers? Docker verwaltet und verfolgt Änderungen und Abhängigkeiten Docker bietet eine einheitliche Bedien-API zum Starten/Stoppen von dockerifizierten Anwendungskomponenten Developer Reduktion von Installationsanleitungen // Marco Bratz & Klaus Moser 25
Einführung in Containertechnologie Wie hilft Docker den Developers? Komplette Zielumgebung wird lokal gleich abgebildet (keine Unterschiede bei Dev-Rechnern, bei mir geht s! ) Developer Integrationstests Schnelle Bereitstellung unterschiedlichster Umgebungen (z.b. unterschiedliche Linux Distributionen) // Marco Bratz & Klaus Moser 26
Einführung in Containertechnologie Wie hilft Docker den Developers? Developer erhält mehr Kontrolle über Serverkonfiguration Docker verschiebt die Serverkonfiguration in die Build-Phase, bisher eher Runtime-Phase Developer Serverkonfiguration kann vorher ausführlich getestet werden Komplette Zielumgebung kann lokal abgebildet werden // Marco Bratz & Klaus Moser 27
Die Technik // Marco Bratz & Klaus Moser 28
Wie ist dies technisch realisiert? Wie unterscheidet sich Docker von Virtuellen Machinen? App A App B Bin/Libs Gast OS Bin/Libs Gast OS VM App A Bin/Libs App B Bin/Libs Docker Hypervisor Host OS Server Docker Host OS Server // Marco Bratz & Klaus Moser 29
Wie ist dies technisch realisiert? Wie unterscheidet sich Docker von Virtuellen Machinen? App A Bin/Libs Gast OS Hypervisor Host OS Server App B Bin/Libs Gast OS VM Jede virtualisierte Anwendung enthält nicht nur die Anwendung (~ 100MB) sie enthält alle nötigen Programme und Bibliotheken Sie enthält ein komplettes Betriebsystem ( ~ GB) // Marco Bratz & Klaus Moser 30
Wie ist dies technisch realisiert? Wie unterscheidet sich Docker von Virtuellen Machinen? App A Bin/Libs Docker Host OS Server App B Bin/Libs Docker Jede virtualisierte Anwendung enthält nur die Anwendung, alle nötigen Programme und Bibliotheken Der Linux Kernel wird mit dem Host und anderen Containern geteilt Die Anwendung läuft als isolierter Prozess mit isolierten Ressourcen // Marco Bratz & Klaus Moser 31
Wie ist dies technisch realisiert? Begriffe 1. Image 2. Registry 3. Container // Marco Bratz & Klaus Moser 32
Wie ist dies technisch realisiert? Was ist ein Docker Image? Ein Image kann nur gelesen werden Ein Image verändert sich nie https://docs.docker.com/terms/image/ // Marco Bratz & Klaus Moser 33
Wie ist dies technisch realisiert? Was ist ein Docker Image? Images haben keinen Zustand Nur die oberste Schicht ist beschreibbar Es wird ein Union File System verwendet Auch gelöschte Dateien bleiben in tiefer liegenden Schichten erhalten https://docs.docker.com/terms/image/ // Marco Bratz & Klaus Moser 34
Wie ist dies technisch realisiert? Was ist ein Docker Image? Ein Image referenziert ein darunter liegendes Image Es werden Basis-Images bereitgestellt (ubuntu, centos, usw.) Jedes Image wird über eine eindeutige ID referenziert https://docs.docker.com/terms/image/ // Marco Bratz & Klaus Moser 35
Wie ist dies technisch realisiert? Wie baue ich ein Docker Image? - Dockerfile FROM fedora-httpd # base image MAINTAINER A D Ministator email: admin@corp.example.com # Add the tar file of the web site ADD mysite.tar /tmp/ # Docker automatically extracted. move files to web directory RUN mv /tmp/mysite/* /var/www/html # listen to port, use for container linking EXPOSE 80 ENTRYPOINT [ "/usr/sbin/httpd" ] CMD [ "-D", "FOREGROUND" ] http://www.projectatomic.io/docs/docker-building-images/ // Marco Bratz & Klaus Moser 36
Wie ist dies technisch realisiert? Was ist ein Docker Container? Runtime Version von Image Beim Starten des Containers werden alle nötigen Images geladen Eine beschreibbare Dateisystemschicht wird hinzugefügt +Eindeutige ID, Netzwerk, Resourcen Einschränkungen https://docs.docker.com/terms/container/ // Marco Bratz & Klaus Moser 37
Wie ist dies technisch realisiert? Was ist ein Docker Container? Container Zustände: Running Prozess läuft Exited Kein Prozess Memory wird NICHT erhalten! Dateisystemzustand bleibt erhalten https://docs.docker.com/terms/container/ // Marco Bratz & Klaus Moser 38
Wie ist dies technisch realisiert? Was ist ein Docker Container? Basiert auf existierenden Linux Technologien: Container (LXC) Chroot Ändere / für Prozess Cgroups Limit CPU, memory, disk I/O Namespaces NET, MNT (Mount), UTS (System ID), IPC (Interprocess), PID, USER http://www.adamjonas.com/blog/intro-to-docker/ // Marco Bratz & Klaus Moser http://crosbymichael.com/category/docker.html 39
Wie ist dies technisch realisiert? Docker Command Line Befehl build images pull push run stop start Beschreibung Image bauen Listet lokal vorhandene Images Image von Registry herunterladen Image auf Registry hochladen Erstellt und startet Container Stopt Container Starte Container // Marco Bratz & Klaus Moser 40
Wie ist dies technisch realisiert? Docker Command Line Befehl exec ps inspect rm logs Beschreibung Startet zusätzlichen Prozess innerhalb von Container Übersicht über Container (running, exited) Container/Image untersuchen Entfernen eines Containers Logausgaben eines Containers beobachten https://docs.docker.com/reference/commandline/cli/ // Marco Bratz & Klaus Moser 41
Wie ist dies technisch realisiert? Überblick Image A Push Docker Container Image Registry Dockerfile For A Source Code Repository Build Docker Engine Host 1 OS (Linux) Container A Search Docker Container C Container B Host 2 OS (Linux) Pull Run // Marco Bratz & Klaus Moser 42
Container unter Windows 10 // Marco Bratz & Klaus Moser 43
Microsoft im Docker Hub https://hub.docker.com/u/microsoft/ Eine Vielzahl an offiziell von Microsoft bereitgestellten Container-Images Linux-Container Windows-Container // Marco Bratz & Klaus Moser 44
Docker for Windows Native, in Windows integrierte Anwendung Verwendet Hyper-V als Virtualisierungsumgebung Erlaubt die Verwaltung der Containerumgebung in Windows: Netzwerk Dateisystem Konfiguration von Docker // Marco Bratz & Klaus Moser 45
Wichtige Optionen in Docker for Windows General Portfreigabe für localhost:2375 ohne TLS aktivieren. Shared Drives Grundlage für das Volume-Mapping in den Containern Zur lokalen Kommunikation Data-Volumes zum Datenaustausch und zur Persistierung. Nur auf DEV-Umgebungen!!! // Marco Bratz & Klaus Moser 46
Verbindung WSL zur Dockerumgebung Setzen der Umgebungsvariable DOCKER_HOST zur lokalen Kommunikation. Direkt in der aktuelle Konsole oder permanent in der Umgebung (bspw. ~/.bashrc) Erlaubt die Kommunikation des WSL mit dem lokalen Docker-Deamon. // Marco Bratz & Klaus Moser 47
Wechsel zwischen den Container-Welten Docker for Windows erlaubt den einfachen Wechsel zwischen den Container-Welten über Kontextmenü Ist ein Proxy für die eigentlichen Docker- Deamons Der Wechsel ist transparent für den Docker-Client // Marco Bratz & Klaus Moser 48
Praxisbeispiel.NET Anwendung im Docker Container #.NET Core App auf Basis von Linux (Debian) # Docker Image Größe: ~1 GB docker run microsoft/dotnet-samples:dotnetapp Hallo #.NET Core App auf Basis von Windows Nanoserver # Docker Image Größe: ~1 GB docker run microsoft/dotnet-samples:dotnetapp-nanoserver Hallo #.NET Full Framwork App auf Basis von Windows Server Core # Docker Image Größe: ~10 GB docker run microsoft/dotnet-framework-samples Hallo // Marco Bratz & Klaus Moser 49
Praxisbeispiel Dockerfile microsoft/dotnet-framework-samples FROM microsoft/dotnet-framework:4.6.2 WORKDIR /app COPY bin/release. ENTRYPOINT ["dotnetapp-4.6.2.exe"] https://github.com/microsoft/dotnet-framework-dockersamples/blob/dockerhub/dotnetapp-4.6.2/dotnetapp-4.6.2/dockerfile // Marco Bratz & Klaus Moser 50
Praxisbeispiel Siehe https://channel9.msdn.com/events/visual-studio/visual-studio-2017-launch/t111 // Marco Bratz & Klaus Moser 51
Fazit und Diskussion Vorteile Einheitliche Schnittstelle zur Verwaltung und Paketierung von Softwarekomponenten Keine lokale Installation von unterschiedlichen Laufzeitumgebungen notwendig Einfache Skalierung durch Betrieb Einheitliche Bedienung Einsatzmöglichkeiten Effizienzsteigerung und Flexibilität in der Entwicklung Standardisierung im Betrieb durch Containertechnologien (Public und private Cloud) Rollbackmöglichkeiten auf vorhergehende Versionen Unterstützt Umsetzung von Microservice-Architekturen Starker Enabler für DevOps-Kultur // Marco Bratz & Klaus Moser 52
efficiency. we set IT up. doubleslash Net-Business GmbH 07541/700 78-0 www.doubleslash.de info@doubleslash.de // Marco Bratz & Klaus Moser 53