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?"
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
- 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