Docker, Ansible & Co



30.09.2014

Wer bin ich?


Jens Nauber
Softwareentwickler und Servernerd
Fahrräder & Kaffee

@_jensen
+JensNauber


Agenda


Was ist Docker?
Welche Problem kann Docker lösen?
Vorteile/Nachteile?
Was kann ich mit Docker anfangen?
Scripting mit Ansible und Vagrant

TL;DR

"Docker bietet eine einfache Isolation und Wiederholbarkeit von Laufzeitumgebungen. Eine mit Docker erstellte Laufzeitumgebung, kann gepackt und einfach verteilt werden, um dann wieder auf anderen Maschine ausgeführt zu werden.
 
Darüber hinaus ist alles, was in dieser Laufzeitumgebung läuft, vom darunterliegenden Hostsystem isoliert (ähnlich wie eine virtuelle Maschine).

Und das Beste ist, alles ist schnell und einfach.   ...Oder?"


Das Problem


Eine Lösung



Was ist Docker?

  • Container Virtualization
    • kapselt eine Applikation in einem Container
    • "build once, run anywhere"-Paradigma
    • läuft isoliert und unabhängig
  • kein VM-Hypervisor, Virtual Environment (VE)
  • Docker API
    • Docker Daemon
    • Docker Client


Was ist Docker?

  • "Linux chroot on steroids"
  • nutzt Hardware und Kernel des Gastsystems
  • Ressourcenzuteilung möglich
  • Technologie
    • LXC (Linux Containers)
    • cgroups und kernel namespace
    • Device Mapper
  • läuft auf den meisten Linux-Distributionen (K>2.6.32)
  • Mac OS X & Windows (boot2docker, Vagrant)

BootFS vs. ROOTFS

Example: Debian

Container

One Base Image, Multiple container

Multiple Base Images


Welche Probleme Kann Docker Lösen?

  • Entwickler kann sich auf seine Applikation konzentrieren
  • Admin/Ops kann sich auf die Infrastruktur konzentrieren
  • verschiedene Versionen einer Applikation
    • Testing
    • Abhängigkeiten
    • Versionierung
  • vereinfachtes Deployment ("Golden Image")
  • Einbinden in vorhandene Systeme


Vorteile

  • "You will love Docker,
                                  when shell scripting is your favorite"
  • leichtgewichtiger, transportabler Container 
    • Ubuntu Base Image (150 MB)
  • weniger Probleme mit Abhängigkeiten
  • Automatisierung von Tests, Integration und Packaging
  • freie Wahl der Infrastruktur (dediziert, virtuell, Cloud)
  • Verteilung über Registry-Server
  • Kostenfaktor?
  • Schnelligkeit?
 

Nachteile

  • "You will hate Docker,
                          when shell scripting is not your favorite"

  • komplexe Strukturen (Images, Instanzen)
  • Lernkurve (Trial and Error)
  • riesige Dokumentation
  • "Debugging sucks!"

Fazit

"Handcrafted masterpieces on steroids"

Docker API - Image Workflow

search - Image-Suche im Docker-Registry-Server (index.docker.io)
 box:~$ docker search ubuntu
pull - Herunterladen und Bereitstellen eines Images
 box:~$ docker pull ubuntu:12.04
run - Kommando innerhalb des Images ausführen
 box:~$ docker run ubuntu:12.04 apt-get install -y mysql-server 
commit - Änderungen eines Containers übernehmen
 box:~$ docker commit -m="MySQL installiert" e7cb698ad0f3 jnauber/mysql
push - geändertes Image ins Repository übertragen
 box:~$ docker push jnauber/mysql

Dockerfile

  • Automatisierung von Schritten
 box:~$ docker build -t jnauber/mysql2 - < Dockerfile
# Custom MySQL Server image
# jnauber/mysql2
#
# VERSION	1.0

FROM ubuntu:12.04

# Install system updates
RUN apt-get update -y
RUN apt-get upgrade -y

# Install MySQL Server
RUN apt-get install -y mysql-server

EXPOSE 3306


Was kAnn man mit Docker

sonst Noch machen?

  • eigenes PaaS (Dokku)
  • privates Registry-Repository
  • Scripting mit Ansible, Puppet, Chef, etc.
    • Orchestration
    • Deployment
    • Testing
  • Low Level Hardware
    • Virtual Server on Raspberry PI

Vagrant

  • Wrapper für Virtualisierungssoftware
  • viele Provider (Virtualbox, vSphere, Cloud)
  • Chef, Ansible, Salt  & Puppet Provisioning
  • Docker als Provider oder Provisioning (ab v1.6)
  • in Ruby programmiert
    • zur Konfiguration steht aber nur ein Teil
      der Fähigkeiten von Ruby zur Verfügung

Ansible

  • Server Orchestration Software
  • Open Source & basiert auf Python
  • keine Agent auf Zielsystem nötig
    • Verbindung über SSH
  • Konfiguration über YAML-Dateien
  • viele Wrapper-Module bereits integriert
  • Multi-Role/Host-Orchestration
  • kleinere Lernkurve als Docker, Puppet oder Chef
  • im Gegensatz zu Docker keine Versionierung


RESSOURCEN


http://www.docker.io
https://www.docker.io/gettingstarted/

@docker
https://github.com/dotcloud/docker/
https://plus.google.com/u/0/communities/108146856671494713993


Danke


Fragen?

Made with Slides.com