Docker - Containervirtualisierung leichtgemacht

47
Docker – Containervirtualisierung leicht gemacht CeBIT 2015 18. März 2015 Michel Rode Linux/Unix Consultant & Trainer B1 Systems GmbH [email protected] B1 Systems GmbH - Linux/Open Source Consulting, Training, Support & Development

Transcript of Docker - Containervirtualisierung leichtgemacht

Page 1: Docker - Containervirtualisierung leichtgemacht

Docker – Containervirtualisierungleicht gemachtCeBIT 2015 18. März 2015

Michel RodeLinux/Unix Consultant & Trainer

B1 Systems [email protected]

B1 Systems GmbH - Linux/Open Source Consulting, Training, Support & Development

Page 2: Docker - Containervirtualisierung leichtgemacht

Vorstellung B1 Systems

gegründet 2004primär Linux/Open Source-Themennational & international tätigüber 60 Mitarbeiterunabhängig von Soft- und Hardware-HerstellernLeistungsangebot:

Beratung & ConsultingSupportEntwicklungTrainingBetriebLösungen

dezentrale Strukturen

B1 Systems GmbHDocker – Containervirtualisierung leicht

gemacht 2 / 47

Page 3: Docker - Containervirtualisierung leichtgemacht

SchwerpunkteVirtualisierung (XEN, KVM & RHEV)Systemmanagement (Spacewalk, Red Hat Satellite, SUSEManager)Konfigurationsmanagement (Puppet & Chef)Monitoring (Nagios & Icinga)IaaS Cloud (OpenStack & SUSE Cloud & RDO)Hochverfügbarkeit (Pacemaker)Shared Storage (GPFS, OCFS2, DRBD & CEPH)Dateiaustausch (ownCloud)Paketierung (Open Build Service)Administratoren oder Entwickler zur Unterstützung des Teamsvor Ort

B1 Systems GmbHDocker – Containervirtualisierung leicht

gemacht 3 / 47

Page 4: Docker - Containervirtualisierung leichtgemacht

Docker –Build, Ship and Run Applications

B1 Systems GmbHDocker – Containervirtualisierung leicht

gemacht 4 / 47

Page 5: Docker - Containervirtualisierung leichtgemacht

Was ist Docker?

Open Source Engine zum Standardisieren vonProzessumgebungen unter Linux„build, ship and run (distributed) applications“offene Plattform für Entwickler und Systemadministratorennutzt Container-Technologien (LXC/libcontainer)einfaches Erstellen und Teilen von Container ImagesDocker ist kein virtueller Server! (⇒ wenig Overhead)„Docker“ bezeichnet sowohl den Server-Daemon als auch denClient samt CLIOpen-Source-Projekt, veröffentlicht unter der Apache-2.0-Lizenz

B1 Systems GmbHDocker – Containervirtualisierung leicht

gemacht 5 / 47

Page 6: Docker - Containervirtualisierung leichtgemacht

Eigenschaften

Docker ermöglicht ein automatisches Deployment einerstandardisierten Prozessumgebung für Linux-Anwendungen.Alle Linux-Anwendungen laufen in Docker.Docker läuft auf allen gängigen Linux-Distributionen.Alle benötigten Funktionen befinden sich innerhalb desContainers:

BibliothekenAbhängigkeitenBinärdateien. . .

Container sind auf die Architektur der Host-Plattformbeschränkt.

B1 Systems GmbHDocker – Containervirtualisierung leicht

gemacht 6 / 47

Page 7: Docker - Containervirtualisierung leichtgemacht

Vorteile

kleinschnellsicherflexibelreproduzierbarportabel

B1 Systems GmbHDocker – Containervirtualisierung leicht

gemacht 7 / 47

Page 8: Docker - Containervirtualisierung leichtgemacht

VMs vs. Container

VMs komplette Maschine einschl. Kernel wird mit Hilfe einesHypervisors virtualisiert.

Container nur Prozesse werden virtualisiert, das OS undBinaries/Libraries gemeinsam genutzt.

B1 Systems GmbHDocker – Containervirtualisierung leicht

gemacht 8 / 47

Page 9: Docker - Containervirtualisierung leichtgemacht

Einsatzbereiche

Docker ermöglicht ein schnelles Bereitstellen reproduzierbarer(Laufzeit-)Umgebungen für Entwickler und Systemadministratoren:

Evaluations-SystemePOC-SystemeTest-SystemeQA-SystemeLive-UmgebungenKonfigurationstests. . .

B1 Systems GmbHDocker – Containervirtualisierung leicht

gemacht 9 / 47

Page 10: Docker - Containervirtualisierung leichtgemacht

Container Execution Environments

Docker kann derzeit zwei Execution Driver für die Erstellung vonContainern nutzen:

LXCbewährte leichtgewichtige Prozessvirtualisierungim Linux-Kernel

Libcontainerneue Eigenentwicklung von Docker zur Nutzungder Kernel-Features

Libcontainer ist Default seit Version 1.0Ein einzelner Kernel sorgt für die Limitierung und Isolation derRessourcen.⇒ Emulation von Hardware entfällt⇒ Performance-Overhead wird minimiert

B1 Systems GmbHDocker – Containervirtualisierung leicht

gemacht 10 / 47

Page 11: Docker - Containervirtualisierung leichtgemacht

Linux Containers (LXC)

leichtgewichtiger Virtualisierungsmechanismus(Prozessvirtualisierung) mit modularem Designverwaltet Ressourcen und Prozessgruppen voneinander isoliert inso genannten Containernnutzt vorhandene Kernel-Features wie Capabilities, ControlGroups und Namespaces„chroot on steroids“ (http://lxc.sourceforge.net)seit 2.6.29 Teil des Upstream Kernels (und damit aller gängigenDistributionen)freie Software (größtenteils GNU-LGPL-Lizenz)

B1 Systems GmbHDocker – Containervirtualisierung leicht

gemacht 11 / 47

Page 12: Docker - Containervirtualisierung leichtgemacht

libcontainer I

Go-Implementation, um Linux-Kernel-Namespaces ohne weitereAbhängigkeiten für Container zu nutzenvollständig unabhängig von LXCverwaltet als Teil von Docker die nötigen Kernel-Features:

CapabilitiesControl GroupsNamespacesApparmor-/SELinux-ProfileNetzwerkschnittstellenFirewall-Regeln

B1 Systems GmbHDocker – Containervirtualisierung leicht

gemacht 12 / 47

Page 13: Docker - Containervirtualisierung leichtgemacht

libcontainer II

Grundlage für die Windows-ImplementierungGrundlage für weitere EntwicklungenRed Hat, Google, Canonical & Parallels

B1 Systems GmbHDocker – Containervirtualisierung leicht

gemacht 13 / 47

Page 14: Docker - Containervirtualisierung leichtgemacht

Capabilities

teilen die Rechte eines privilegierten Benutzers (root) inbestimmte Teilbereiche aufkönnen für unterschiedliche Prozesse individuell gesetzt werden⇒ geringere Gefahr eines Missbrauchs von Rechtenda Container = Prozesse besteht die Möglichkeit, bestimmteRechte innerhalb eines Containers einzuräumenminimieren Wechselwirkungen (z. B. beim Mounten desroot-Dateisystems mit read only beim Herunterfahren einesContainers)

B1 Systems GmbHDocker – Containervirtualisierung leicht

gemacht 14 / 47

Page 15: Docker - Containervirtualisierung leichtgemacht

CGroups 1/2

fassen Prozesse in einer hierarchischen Struktur zusammen.ermöglichen es, den Zugriff dieser Prozesse auf Ressourcen zubeschränken oder zu unterbinden und so die Nutzung dieserRessourcen zu limitieren.Typische Ressourcen sind Prozessoren, Arbeitsspeicher,Netzwerkressourcen oder Kernel Namespaces.Die hierarchische Struktur ermöglicht es, Eigenschaften vonSubsystemen auf mehreren Ebenen zu unterteilen.Zu jeder dieser Ebenen lässt sich die Nutzung der möglichenRessourcen weiter einschränken.Prozesse (Container) lassen sich dann gezielt in die Tasklist derbetreffenden CGroup aufnehmen.

B1 Systems GmbHDocker – Containervirtualisierung leicht

gemacht 15 / 47

Page 16: Docker - Containervirtualisierung leichtgemacht

CGroups 2/2

B1 Systems GmbHDocker – Containervirtualisierung leicht

gemacht 16 / 47

Page 17: Docker - Containervirtualisierung leichtgemacht

ChrootFunktion unter Unix-Systemen, um im laufenden System einneues Rootverzeichnis zuzuweisenprimär für das Aufsetzen virtueller Umgebungen entwickelteinfache Möglichkeit, nicht vertrauenswürdige Programme zuisolieren (aka. „Sandbox“)einfacher Jail-Mechanismus – aus dem aber durchausausgebrochen werden kannProzess im Chroot-Verzeichnis kann nicht mehr auf Dateienaußerhalb dieses Verzeichnisses zugreifenProgramm muss im Chroot-Verzeichnis eine kompletteUmgebung vorfinden (Platz für temporäre Dateien,Konfigurationsdateien, Programmbibliotheken, . . . )keine Ressourcen-Limitierung

B1 Systems GmbHDocker – Containervirtualisierung leicht

gemacht 17 / 47

Page 18: Docker - Containervirtualisierung leichtgemacht

Kernel Namespaces

Integration von Namespaces im Kernel mit Version 2.6.19Namespaces helfen, Prozesse voneinander zu isolierenmögliche Eigenschaften zum Definieren eines Namensraumes:

ipc System-V-Interprozess-Kommunikation (IPC)uts Hostnamemnt Mountpoints und Dateisystemepid Prozessenet Netzwerk-Stack

user Benutzer (UIDs)

B1 Systems GmbHDocker – Containervirtualisierung leicht

gemacht 18 / 47

Page 19: Docker - Containervirtualisierung leichtgemacht

Übersicht

B1 Systems GmbHDocker – Containervirtualisierung leicht

gemacht 19 / 47

Page 20: Docker - Containervirtualisierung leichtgemacht

Images, Container und Registries

Docker Imagesread only TemplateBasis für Container

Docker Containerwird auf Basis eines Image und Dockerfile erzeugthält zur Laufzeit die Änderungen vor (Read-/Write-Layer)Änderungen können in einem neuen Image übernommen(„committed“) werden

Docker RegistriesImage Repositoryprivat und öffentlichzentrale Ressource: Docker Hub

B1 Systems GmbHDocker – Containervirtualisierung leicht

gemacht 20 / 47

Page 21: Docker - Containervirtualisierung leichtgemacht

Bestandteile – Die Docker-Engine

Die Docker Engine besteht auszwei Teilen:

Server Daemon für denServerprozess zurVerwaltung derContainer

Client Client zur(Fern-)Steuerungdes Daemons

B1 Systems GmbHDocker – Containervirtualisierung leicht

gemacht 21 / 47

Page 22: Docker - Containervirtualisierung leichtgemacht

Docker und die weitere Welt

Docker ist kollaborativ, modular und erweiterbar:Atomic atomar aufgebautes Hostsystem für Docker-ContainerCoreOS minimales Linux als Container-BetriebssystemGitlab Collaboration on Code

Jenkins Continuous Integration System für Servlet Container(z. B. Apache Tomcat)

Puppet KonfigurationsmanagementFig Orchestration

Packer Erstellung fertiger Images mittels Templates. . .

B1 Systems GmbHDocker – Containervirtualisierung leicht

gemacht 22 / 47

Page 23: Docker - Containervirtualisierung leichtgemacht

Docker Hub

B1 Systems GmbHDocker – Containervirtualisierung leicht

gemacht 23 / 47

Page 24: Docker - Containervirtualisierung leichtgemacht

Konfiguration

B1 Systems GmbHDocker – Containervirtualisierung leicht

gemacht 24 / 47

Page 25: Docker - Containervirtualisierung leichtgemacht

Container – Ressourcen (Default)

CPU 1024 CPU-Shares für neue Container durch CGroups(Default)

Speicher gesamter Arbeitsspeicher des Hosts nutzbar (Default)Block Devices keine Bandbreiteneinschränkung beim Lese- und

Schreibzugriff auf Blockgeräte (Default)Netzwerk automatisch über Linux-Bridge docker0 mit dem

Netzwerk des Hosts verbunden (Default)Storage 10 GB Festplattenplatz pro Container (Default)

B1 Systems GmbHDocker – Containervirtualisierung leicht

gemacht 25 / 47

Page 26: Docker - Containervirtualisierung leichtgemacht

Treiber für Storage

Der Docker-Daemon unterstützt drei verschiedene Treiber fürStorage:

aufs alt, nicht im Kernel (nur via Patchset), schnell (!!!)devicemapper Thin Provisioning und Copy on Write (CoW),

Snapshots, Direct- &Loop-LVMbtrfs sehr schnell, Cow, Snapshots, default teilweise

OverlayFS sehr schnell, in der Entwicklung

B1 Systems GmbHDocker – Containervirtualisierung leicht

gemacht 26 / 47

Page 27: Docker - Containervirtualisierung leichtgemacht

Treiber für Storage

Storage-Treiber setzen:# docker -s <devicemapper|btrfs|overlayfs...>

Storage-Informationen abfragen:# docker info[...]Storage Driver: devicemapperPool Name: docker-253:2-1443148-poolPool Blocksize: 65.54 kBData file: /var/lib/docker/devicemapper/devicemapper/dataMetadata file: /var/lib/docker/devicemapper/devicemapper/metadataData Space Used: 5.739 GBData Space Total: 107.4 GBMetadata Space Used: 5.976 MBMetadata Space Total: 2.147 GB

B1 Systems GmbHDocker – Containervirtualisierung leicht

gemacht 27 / 47

Page 28: Docker - Containervirtualisierung leichtgemacht

Storage, Images und Container

layerbasiertbis auf den oberstenalle read-onlybeinhaltenÄnderungen/Diffsnormalerweise alsBase-Image-Scratch

B1 Systems GmbHDocker – Containervirtualisierung leicht

gemacht 28 / 47

Page 29: Docker - Containervirtualisierung leichtgemacht

Dockerfiles

B1 Systems GmbHDocker – Containervirtualisierung leicht

gemacht 29 / 47

Page 30: Docker - Containervirtualisierung leichtgemacht

Dockerfiles – Grundlagen

Bauanleitung für ein Imageenthält die notwendigen Anweisungen zum Erstellen eines Imagestellt so die Reproduzierbarkeit eines Image bei jeder neuenErstellung sicherAnweisungen sind einzeilig und beginnen mit einemSchlüsselwortAnweisungen sind nicht case-sensitive (Schlüsselwörtergewöhnlich groß)Kommentare werden durch ein #-Zeichen eingeleitet

B1 Systems GmbHDocker – Containervirtualisierung leicht

gemacht 30 / 47

Page 31: Docker - Containervirtualisierung leichtgemacht

Dockerfiles verwenden

Minimalistisches Dockerfile:# johndoe/nodejs# VERSION 0.0.1

FROM <repo>MAINTAINER John Doe <[email protected]>

Dockerfile verwenden (hier: aktuelles Verzeichnis):$ docker build .

B1 Systems GmbHDocker – Containervirtualisierung leicht

gemacht 31 / 47

Page 32: Docker - Containervirtualisierung leichtgemacht

Dockerfiles – Anweisungen

ADD/COPY Kopieren lokaler Dateien vom Host in den ContainerCMD Aufruf für Programme innerhalb eines Containers

EXPOSE Portadresse für das NetzwerkFROM Repository als Basis für das ImageRUN (Kommandozeilen-)Befehl ausführen

MAINTAINER Ersteller des Dockerfiles (optional)VERSION Versionsnummer (optional)

B1 Systems GmbHDocker – Containervirtualisierung leicht

gemacht 32 / 47

Page 33: Docker - Containervirtualisierung leichtgemacht

Dockerfiles – Beispiel

Dockerfile für MySQL-Server (Beispiel):FROM rhelMAINTAINER John Doe <[email protected]>RUN yum install -y mysql mysql-serverADD start.sh /startRUN chmod +x /startEXPOSE 3306CMD ["/start"]

B1 Systems GmbHDocker – Containervirtualisierung leicht

gemacht 33 / 47

Page 34: Docker - Containervirtualisierung leichtgemacht

GitLab – kollaborativ entwickeln

B1 Systems GmbHDocker – Containervirtualisierung leicht

gemacht 34 / 47

Page 35: Docker - Containervirtualisierung leichtgemacht

Features

komplett frei und Open SourceVerwalten und Durchsuchen von Git Repositorieseigener Code auf eigenem ServerVerwaltung von ZugriffsrechtenAusführen von Code Reviews und Merge RequestsHooks. . .

B1 Systems GmbHDocker – Containervirtualisierung leicht

gemacht 35 / 47

Page 36: Docker - Containervirtualisierung leichtgemacht

GitLab 1/3

B1 Systems GmbHDocker – Containervirtualisierung leicht

gemacht 36 / 47

Page 37: Docker - Containervirtualisierung leichtgemacht

GitLab 2/3

B1 Systems GmbHDocker – Containervirtualisierung leicht

gemacht 37 / 47

Page 38: Docker - Containervirtualisierung leichtgemacht

GitLab 3/3

B1 Systems GmbHDocker – Containervirtualisierung leicht

gemacht 38 / 47

Page 39: Docker - Containervirtualisierung leichtgemacht

Jenkins – Continuous Integration

B1 Systems GmbHDocker – Containervirtualisierung leicht

gemacht 39 / 47

Page 40: Docker - Containervirtualisierung leichtgemacht

Was ist Jenkins?

Jenkins ist ein serverbasiertes System für ContinuousIntegration, das in einem Servlet Container (wie ApacheTomcat) betrieben wird.Jenkins unterstützt SCM Tools wie AccuRev, CVS, Subversion,Git, Mercurial, Perforce, Clearcase und RCT und kann ApacheAnt und Maven ausführen.Jenkins ist freie Software; lizenziert unter der MIT-Licence.Builds können auf unterschiedliche Weise gestartet werden, auchper Commit-Trigger eines Versionskontrollsystems.Jenkins überwacht die Ausführung wiederholter Jobs wie z. B.das Bauen eines Softwareprojekts oder Cronjobs.Jenkins ist in Java geschrieben.

B1 Systems GmbHDocker – Containervirtualisierung leicht

gemacht 40 / 47

Page 41: Docker - Containervirtualisierung leichtgemacht

Jenkins 1/3

B1 Systems GmbHDocker – Containervirtualisierung leicht

gemacht 41 / 47

Page 42: Docker - Containervirtualisierung leichtgemacht

Jenkins 2/3

B1 Systems GmbHDocker – Containervirtualisierung leicht

gemacht 42 / 47

Page 43: Docker - Containervirtualisierung leichtgemacht

Jenkins 3/3

B1 Systems GmbHDocker – Containervirtualisierung leicht

gemacht 43 / 47

Page 44: Docker - Containervirtualisierung leichtgemacht

Jenkins PluginsDocker Buildstep verschiedene Docker-Kommandos zu einem Job als

Build Step hinzufügenDocker publish Projekte mittels Dockerfile bauen und sie in die

Docker Registry ladenGit Verwendung von Git als Build-SCM

Gitlab Build Trigger, der GitLab vorgaukelt, dass Jenkins einGitLab CI ist

Build Pipeline Plugin bietet Ansicht der Build Pipeline vonUpstream- und Downstream-verbundenen Jobs, die eineBuild Pipeline bilden

Downstream-Ext Plugin unterstützt erweiterte Konfiguration zumTriggern von Downstream Builds.

Publish Over SSH Plugin Daten- und Dateitransfer (SSH)

B1 Systems GmbHDocker – Containervirtualisierung leicht

gemacht 44 / 47

Page 45: Docker - Containervirtualisierung leichtgemacht

Jenkins – Build Pipeline Plugin

bildet die Build Pipeline aberlaubt Festlegung manueller Trigger für Jobs, die vor derAusführung ein Eingreifen erfordern, z. B. Abnahmeprozessaußerhalb von Jenkins

B1 Systems GmbHDocker – Containervirtualisierung leicht

gemacht 45 / 47

Page 46: Docker - Containervirtualisierung leichtgemacht

Jenkins – Downstream-Ext Plugin

Dieses Plugin bietet weitreichende Konfigurationsmöglichkeiten zumTriggern von Downstream Builds:

triggert Builds nur, wenn ein Downstream-Job Änderungen imSCM aufweisttriggert Builds, wenn ein Upstream Buildbesser/gleich/schlechter als ein definiertes Ergebnis abschneidet(SUCCESS, UNSTABLE, FAILURE, ABORTED)für Matrix (aka Multi-Configuration) Jobs kann festgelegtwerden, welcher Teil des Jobs den Downstream Job triggern soll:parent only, configuration only oder beide

B1 Systems GmbHDocker – Containervirtualisierung leicht

gemacht 46 / 47

Page 47: Docker - Containervirtualisierung leichtgemacht

Vielen Dank für Ihre Aufmerksamkeit!

Bei weiteren Fragen wenden Sie sich bitte an [email protected] +49 (0)8457 - 931096.

Besuchen Sie uns auch hier auf der CeBIT,Halle 6, H16/312.

B1 Systems GmbH - Linux/Open Source Consulting, Training, Support & Development