0
The linux container engine Peter Daum
Über mich Peter Daum Entwickler seit 13 Jahren Java Developer @ tyntec Java EE / Spring im OSS / BSS Twitter - @MrPaeddah Blog - www.coders-kitchen.com
Agenda Docker?! Was ist ein Container Traditionelle VM vs. Container Docker - Basics Docker - Advanced Use cases Warum Docker? Die dunkle Seite Tooling
Docker?! Docker ist eine Software zur Definition und Verwaltung leichtgewichtiger, portabler und selbst-beschreibender (self-sufficient) Linux Container "jeder" Anwendung.
Was ist ein Container? Eine Umgebung mit shared OS (linux running in linux), isolierten Prozessen, isoliertem Netzwerk und anderen Ressourcen sowie mit anderen Containern geteilten Bibliotheken/Binaries (falls anwendbar) Keine VM
Container vs VM Allgemeiner Überblick Kleiner "Footprint" sehr kurze Bootzeit Bootprozesse VM - Normaler Bootprozess Container - Kein Bootprozess Unterstützte OS VM - fast alle Container - Nur Linux mit Kernel >= 3.8
Container vs VM Unterschiede zur Laufzeit
Container vs VM Multiple Instanzen und Änderungen Leichtgewichtiger Start mehrere Instanzen des selben Images Bei Änderungen muss nur das Delta zum Basisimage bereitgestellt werden.
Docker - Basics Image Template für Container Gespeichert in einem Repository Lokal oder Remote Definiert, normalerweise, nur das Delta gegenüber einem Basisimage Container - laufendes Image
Erzeugen eines Images Interaktiv Dockerfile Packer...
Bereitstellen eines Images Interactive peter ~>docker run -i -t centos:6.4 /bin/bash bash-4.1# ls bin dev home lib64 mnt proc sbin srv tmp var boot etc lib media opt root selinux sys usr bash-4.1# rpm -Uvh http://...... bash-4.1# exit peter ~>
Bereitstellen eines Images Dockerfile FROM centos:6.4 RUN rpm -Uvh http://download.fedoraproject.org/pub/... # Install Node.js and npm RUN yum install -y npm # Bundle app source ADD src /src RUN cd /src; npm install EXPOSE 8080 CMD ["node", "/src/index.js"]
Bereitstellen eines Images Packer Generisches LXC provisioning Unterstützt nicht alle features eines Dockerfile, bspw. exposed ports
Docker - Advanced Linking Volume-Resourcen 'Architektur'-Muster
Container Interaktion Linking Verbinden der Container via Host/..
Container Interaktion Linking Direkte Netzwerkverbindung der Container
Container Interaktion Volumen-Resourcen sind spezielle Verzeichnisse die zwischen Container geteilt werden können Änderungen werden sofort durchgeführt sind vom Update eines Images nicht betroffen existieren solange, wie mindestens ein Container sie benutzt.
Container Interaktion Volumen-Resourcen - Beispiel Logfiles sind pro Container verfügbar
Container Interaktion Volumen-Resourcen - Beispiel Logfiles sollen an zentraler Stelle gesammelt werden
Container Interaktion Volumen-Resourcen - Beispiel Logfiles sind in einem zentralen Log-Container verfügbar
'Architektur' Muster Cross-Host linking via Ambassador Containers Data-only container
Use cases Testing separierte Testresourcen separierte CI builds CI build slave nodes on demand erzeugen Continuous deployment Deployment und Skalierung von web apps, Datenbanken und Backend services PaaS Lokale separate Spielwiese
Warum Docker? DEV build once run "everywhere" die exakt "gleiche" Umgebung für testing, staging und production ist möglich OPS Konfiguration der Umgebung Konfiguration der Verbindungen im Fehlerfall ist es möglich dem Entwickler die aktuelle Umgebung zu geben
Die dunkle Seite Hausputz Läuft nur unter Linux kein normaler Bootprozess
Tools and Co Boot2Docker - minimales virtual machine image für Docker CoreOS - Linux distribution für verteilte Umgebungen mit Docker Fig - Management von komplexen Scenarios Serf - Service - Lookup Tooling Shipyard - UI um komplette Anwendungsetups mit Docker zu administrieren
Links docker.io
Vielen Dank für Eure Aufmerksamkeit!