Docker In Practise Best Practises Dipl. - Inf. Steffen Bleul IT-Consultant Anwendungsentwicklung sbl@itbleul.de
Über den Vortragenden Dipl. – Inf. Steffen Bleul 4 Jahre Wissenschaftlicher Mitarbeiter Universität Kassel -> Web Services and Semantic Web 6 Jahre Softwareentwicklung München Seit 2015 Freelancer IT-Consulting Anwendungsentwicklung Seit April 2015 Blacklabelops Docker Images auf Github
Eigene Docker Erfahrung 2 Jahre Bau von Community Images bei Github und Dockerhub 28 Github Repositories 36 Dockerhub Repositories 82 gewartete Images bei Dockerhub Vollautomatisiertes Build und Deployment Daily Build erzeugt ca. 1,5 TB/Monat Transfervolumen Zwischen 2 tausend, 1 Million Docker Pulls
Inhalt Was bringt Docker und Wo wird es eingesetzt? Praxisbeispiel „Wordpress“ 3 Level System für Docker Infrastruktur
Warum Docker? ROI! Weniger Server: $1k/Monat pro Server Ersparnis Üblich ist eine Konsolidierung 30% an Servern zwischen development und testing: Ersparnis: 6 Server @ $1k/Monat= $6k/Monat= $72k/Jahr Weniger VMs: $340$/Monat weniger Lizenz- und Managementkosten Üblich ist eine Konsolidierung von 50% an VMs Ersparnis: 10 Server @ 340$/Monat = $3.4k/Monat = $40.8k/Jahr Quelle: https://boxboat.com/2016/10/26/simple-roi-formula-docker-datacenter/
Docker Umfrage 2016 47% der Befragten sind im der Softwareentwicklung beschäftigt. 59% wenden Docker in der Entwicklung an 51% sogar in der Produktion Verbesserung der MTTR (Mean Time To Respond) 37% geben an „keine Veränderung“ 27% geben an 10%-25% schneller reagieren zu können 23% geben an 25%-50% schneller reagieren zu können Quelle: https://www.docker.com/survey-2016
Docker! Was ist neu? Docker 1.13 ist raus! Neues seit Docker 1.10 Deployment vom docker-compose Orchestrierung (1.12 Beta) App-Armor Configs für Container Beta: Infrakit „Self-Healing Infrastructure“ Neues seit Docker 1.10 Refactoring: runc, containerd, Docker Engine OCI: https://www.opencontainers.org/
World of Docker RHEL Open Shift DNS Server Docker Data Center Docker Compose Consul Kubernetes Kattle Flannel Elk/Fluentd Flocker Docker Cloud Service Registry Docker Mesos CoreOS Devicemapper Rancher Docker-Swarm Vagrant Aufs Container Registry Pod Manifest Vault Prometheus Alpine
Docker und Wordpress
Enterprise Docker Level 1 Docker Engine: Docker Toolbox (Windows Pre Windows 10) Windows Native Mac Native Linux Native Dockerisierung der Applikation Applikation Dockerisierbar? Welches Betriebssystem Host? Welches Betriebssystem Images? Umgang mit Immutable Images Reproduzierbarkeit des Builds Update and Upgrade der Applikation? Dockerfiles: Versionskontrolle Betriebssystem Installationsdateien Betriebssystem: Windows Mac Linux
Dockerisierung Software sollte keine Installationsroutine, oder automatisierbare Installationsroutine haben. Persistieren des Zustand: Die Applikation sollte in einem Arbeitsverzeichnis ungleich dem Installationsverzeichnis arbeiten. Abhängigkeiten der Applikation? Möglichst keine Abhängigkeiten zu System-Demons Keine Abhängigkeiten zu lokalen Prozessen Die Applikation sollte als blockender Prozess laufen können. Die perfekte Docker Applikation aktualisiert sich selbst. Logs müssen auf Systemout gelenkt werden können. Keine Logfiles in Images
Docker Images Best Practise Dockerfiles Container sollte nicht mit Root laufen. Container sudo Ersatz gosu: https://github.com/tianon/gosu Alle notwendigen externen Ports sollten deklariert sein. Volumes sollten explizit deklariert sein. Entrypoints: Mit tini ausgeführt: https://github.com/krallin/tini Mehrere Modi: Applikation, Bash und Parametrisierung Vererbungshierarchie und Layering der Images
Docker Images Wahl der Hierarchie der Images Layering Wiederverwendung von Base Images: Betriebssysteme: CentOS, Ubuntu, Alpine Runtime Umgebungen: Java, Python, Perl Tools: Maven, Gradle Ziel: Einheitliche Images mit wenig Wartungsaufwand Layering Viele Layer haben Performanzauswirkung. Layer Squashing fester Bestandteil von Docker 1.13
Layering und Base Images Fragestellung: Wann macht Imagevererbung Sinn? Es gibt mehrere Ausprägungen des Image Ein Image braucht eine dedizierte Testsuite Alternative: Ausprägungen als Tags: blacklabelops/jobber:aws CI-Build Jenkins Circle-CI Gitlab Registry Gitlab Dockerhub Artifactory
Manage Images Pro Image ein Repository unter Versionskontrolle Updates auf Development Branches als Commits verwalten. Releases als Merges auf Release Branches verwalten. Neue Images als Branches verwalten. Minimierung des Wartungsaufwandes durch Minimierung von Release Branches! Images werden in einem Image Registry verwaltet: Alle Images sind zu taggen! Kein „latest“ verwenden. Für alle Branches ein Tag zur Verfügung stellen
Community Images Dockerisierung kann beliebig weit getrieben werden! Beispiel: $ docker run -d \ -p 80:80 \ --name nginx \ -e "SERVER1REVERSE_PROXY_LOCATION1=/" \ -e "SERVER1REVERSE_PROXY_PASS1=http://www.heise.de" \ -e "SERVER1REVERSE_PROXY_LOCATION2=/alternate" \ -e "SERVER1REVERSE_PROXY_PASS2=http://www.alternate.de" \ blacklabelops/nginx
Best Practise Quellen Best practices for writing Dockerfiles: https://docs.docker.com/engine/userguide/eng- image/dockerfile_best-practices/ Container Best Practises: http://docs.projectatomic.io/container-best-practices/
Enterprise Docker Level 2 Einrichten des Hosts Wahl des Anbieters Wahl des Betriebssystems Security Docker Kompositionsengine Logging Backup
Wahl des Anbieters Dedicated Servers Cloud Anbieter Barebone ohne Virtualisierungslayer als Applikationsstack (http://www.projectatomic.io/) Cloud Anbieter VMs: AWS, G-Cloud, Azure, Bluemix, Digital Ocean, Linode, etc. Container-native: AWS EC2-CS, Google GCE, Azure-CS Container Management Plattform Docker-Cloud (https://cloud.docker.com)
Welcher Anbieter passt? Container Management Plattform oder Container Service ist passend für „nicht-Container-native-OS“ . Beispiele: CentOS, Ubuntu, Debian etc. Weil: Bietet Management UI, Einblick in Logs, „SSH-Ersatz“, Deployment von Kompositionen Container-native-OS: Beispiele: CoreOS, Rancher Im Bauch: Management UI, Kompositionsengine Multi-Host-Networking: Docker-Swarm, Mesos, Kubernetes
Security Den Host sicher machen: Center for Internet Security (CIS) Benchmarks für alle größeren Distributionen in den Leveln 1-2 Den Docker Demon absichern CIS Docker 1.13 Benchmark: https://benchmarks.cisecurity.org/tools2/docker/CIS_Docker_1.13.0_B enchmark_v1.0.0.pdf Benchmark als Docker Container: https://dockerbench.com Docker Images Scannen: CoreOS Clair https://github.com/coreos/clair Docker Demon Authorisierung: Twistlock https://github.com/twistlock/authz
Docker Container Keine einzelnen Container deployen, sondern Orchestrierung von Kompositionen Docker-compose, stackfiles, pod-manifests, cattle Keine Logs auf dem Server: Docker Logging Plugin auf Systeme wie fluentd, elk-stack und Cloud Logs wie https://www.loggly.com/ https://logentries.com/ https://papertrailapp.com/ Backups? Work-In-Progress. Cloud Lösung: Fli https://github.com/ClusterHQ/fli-docker Container: Volumerize https://github.com/blacklabelops/volumerize
Enterprise Docker Level 3 Multi-Host-Networking Docker-Swarm Mesos Kubernetes „Ephemeral VMs“ Infrastruktur Load Balancing Service Registry Monitoring
Ephemeral VM VM wird nicht geupdatet, sondern durch eine neue VM ersetzt. Zentrales firmenweites VM-Images CI-Build mit Hashicorp Packer: https://www.packer.io/intro/ Kickstart Files Provisioning: Shell, Puppet, Chef Multiple VM-Technologien: VMWare, Virtualbox, AWS-AMI Management und Rollout der Infrastruktur: Hashicorp Terraform: https://www.terraform.io/
Loadbalancing/Service Registry/Monitoring Nginx: https://www.nginx.com/blog/service-discovery-with-nginx-plus- and-consul/ Traefik: https://traefik.io/ Service Registry Etcd, Consul, SkyDNS Sidekick Container Registrator: https://github.com/gliderlabs/registrator Monitoring: Cadvisor: https://github.com/google/cadvisor Prometheus: https://prometheus.io/
Wo geht die Reise hin? Viele „Aspekte“ sind noch Open Source Projekte im „Alpha Status“: Beispiel Rancher Insbesondere für Volume Management und Host/Image User-Mapping sind noch Lösungen zu erwarten Produktlösungen wie Red Hats „Open Shift“ werden noch vermehrt kommen.
Vielen Dank für Ihre Aufmerksamkeit! Wie geht es weiter? Links zu den Projekten und Produkten sind den Folien zu entnehmen! Meine Open-Source Projekte auf Github: https://github.com/blacklabelops