SlideShare une entreprise Scribd logo
1  sur  32
Télécharger pour lire hors ligne
Christian Colbach 2018
Docker
• Entwickler: Docker, Inc.

(gegründet: unter dem Namen „dotCloud Inc.“ 2010)

• Erscheinungsjahr: 2013

• Lizenz: Opensource (Apache 2.0)

• Business Model: Free Software, Premium Support
Was ist Docker?
„Open-Source-Software zur Isolierung von
Anwendungen mit Containervirtualisierung“
„docker“ → zu Deutsch: „Hafenarbeiter“ 

Dockarbeiter (»Dockers«) in Bristol im Jahr 1940
(Ministry of Information Photo Division Photographer)
Was ist Docker?
„Open-Source-Software zur Isolierung von
Anwendungen mit Containervirtualisierung“
Was ist Docker?
„Open-Source-Software zur Isolierung von
Anwendungen mit Containervirtualisierung“
Was ist Docker?
„Open-Source-Software zur Isolierung von
Anwendungen mit Containervirtualisierung“
Container
Was ist Docker?
„Open-Source-Software zur Isolierung von
Anwendungen mit Containervirtualisierung“
Gründe für Isolation
1. Gleiche Umgebung, gleiches Verhalten

2. Erhöhung der Sicherheit und Zuverlässigkeit

3. Einfacher zu verwalten
Docker vs VMs
Hypervisor
Host Betriebsystem
Hardware
Gast Betriebsystem Gast Betriebsystem
Anwendung 1 Anwendung 2
Binaries /
Bibliotheken
Binaries /
Bibliotheken
VM 1 VM 2
Docker vs VMs
Host Betriebsystem
Hardware
Anwendung 1 Anwendung 2
Binaries /
Bibliotheken
Binaries /
Bibliotheken
Docker Engine
Container 1 Container 2
Docker vs VMs
Hypervisor
Host Betriebsystem
Hardware
Anwendung 1 Anwendung 2
Binaries /
Bibliotheken
Binaries /
Bibliotheken
Docker Engine
Container 1 Container 2
VM 1 VM 2
Host Betriebsystem
Hardware
Gast Betriebsystem Gast Betriebsystem
Anwendung 1 Anwendung 2
Binaries /
Bibliotheken
Binaries /
Bibliotheken
Vorteile Docker gegenüber VMs:

• Einfach neue Projekte aufzusetzen (keine Installation eines BS.)

• Einfaches Teilen von Daten zwischen Instanzen

• Leichtgewichtigere Instanzen

• Bessere Auslastung von Ressourcen 

• Gut zu vereinen mit: „Infrastructure as Code“
• Einfaches Testen während Endwicklung
Docker vs VMs
Hypervisor
Host Betriebsystem
Hardware
Anwendung 1 Anwendung 2
Binaries /
Bibliotheken
Binaries /
Bibliotheken
Docker Engine
Container 1 Container 2
VM 1 VM 2
Host Betriebsystem
Hardware
Gast Betriebsystem Gast Betriebsystem
Anwendung 1 Anwendung 2
Binaries /
Bibliotheken
Binaries /
Bibliotheken
Docker immer besser ?
Docker in VM
Anw. 1 Anw. 2
Bin/ Bib. Bin/ Bib.
Cloud-Server
Gast Betriebsystem
Docker Engine
Hypervisor
Host Betriebsystem
Hardware
Gast Betriebsystem Gast Betriebsystem
Anwendung 3 Anwendung 4
Binaries /
Bibliotheken
Binaries /
Bibliotheken
Docker in VM
Anw. 1 Anw. 2
Bin/ Bib. Bin/ Bib.
Cloud-Server
Gast Betriebsystem
Docker Engine
Hypervisor
Host Betriebsystem
Hardware
Gast Betriebsystem Gast Betriebsystem
Anwendung 3 Anwendung 4
Binaries /
Bibliotheken
Binaries /
Bibliotheken
Begriffe
„Image“ = Speicherabbild eines Containers
Bibliotheken

Dateien

Anwendungen
„Container“ = aktive Instanz
enthält
#
# NOTE: THIS DOCKERFILE IS GENERATED VIA
"update.sh"
#
# PLEASE DO NOT EDIT IT DIRECTLY.
#
FROM debian:stretch-slim
# prevent Debian's PHP packages from being
installed
# https://github.com/docker-library/php/pull/
542
RUN set -eux; 
        { 
                echo 'Package: php*'; 
                echo 'Pin: release *'; 
                echo 'Pin-Priority: -1'; 
        } > /etc/apt/preferences.d/no-debian-
php
# persistent / runtime deps
ENV PHPIZE_DEPS 
                autoconf 
                dpkg-dev 
                file 
                g++ 
                gcc 
                libc-dev 
                make 
                pkg-config 
                re2c
RUN apt-get update && apt-get install -y 
                $PHPIZE_DEPS 
                ca-certificates 
                curl 
Dockerfile
beschreibt
ausführen
( verpönt )
Dockerfile
#
# NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh"
#
# PLEASE DO NOT EDIT IT DIRECTLY.
#
FROM debian:stretch-slim
# prevent Debian's PHP packages from being installed
# https://github.com/docker-library/php/pull/542
RUN set -eux; 
        { 
                echo 'Package: php*'; 
                echo 'Pin: release *'; 
                echo 'Pin-Priority: -1'; 
        } > /etc/apt/preferences.d/no-debian-php
# persistent / runtime deps
ENV PHPIZE_DEPS 
                autoconf 
                dpkg-dev 
                file 
                g++ 
                gcc 
                libc-dev 
                make 
                pkg-config 
                re2c
RUN apt-get update && apt-get install -y 
                $PHPIZE_DEPS 
                ca-certificates 
                curl 
                xz-utils 
        --no-install-recommends && rm -r /var/lib/apt/lists/*
ENV PHP_INI_DIR /usr/local/etc/php
RUN mkdir -p $PHP_INI_DIR/conf.d
##<autogenerated>##
RUN apt-get update 
        && apt-get install -y --no-install-recommends 
                apache2 
        && rm -rf /var/lib/apt/lists/*
ENV APACHE_CONFDIR /etc/apache2
ENV APACHE_ENVVARS $APACHE_CONFDIR/envvars
RUN set -ex 
        
# generically convert lines like
#   export APACHE_RUN_USER=www-data
# into
#   : ${APACHE_RUN_USER:=www-data}
#   export APACHE_RUN_USER
# so that they can be overridden at runtime ("-e APACHE_RUN_USER=...")
        && sed -ri 's/^export ([^=]+)=(.*)$/: ${1:=2}nexport 1/'
"$APACHE_ENVVARS" 
        
# setup directories and permissions
        && . "$APACHE_ENVVARS" 
        && for dir in 
                "$APACHE_LOCK_DIR" 
= Textdatei mit einer Reihe von Befehlen um Container zu erzeugen
→ System konfigurieren

→ Software installieren

→ Dateien in Verzeichnis kopieren
Dockerfile
Beispiel: Dockerfile
( Keine Endung, Dateiname ist immer „Dockerfile“)
FROM phusion/baseimage:0.9.17
MAINTAINER Author Name <author@organisation.com>
RUN echo "deb http://archive.ubuntu.com/ubuntu trusty main universe" > /etc/apt/sources.list
RUN apt-get -y update
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y -q python-software-properties software-properties-common
ENV JAVA_VER 8
ENV JAVA_HOME /usr/lib/jvm/java-8-oracle
RUN echo 'deb http://ppa.launchpad.net/webupd8team/java/ubuntu trusty main' >> /etc/apt/sources.list && 
echo 'deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu trusty main' >> /etc/apt/sources.list && 
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys C2518248EEA14886 && 
apt-get update && 
echo oracle-java${JAVA_VER}-installer shared/accepted-oracle-license-v1-1 select true | sudo /usr/bin/debconf-set-selections && 
apt-get install -y --force-yes --no-install-recommends oracle-java${JAVA_VER}-installer oracle-java${JAVA_VER}-set-default && 
apt-get clean && 
rm -rf /var/cache/oracle-jdk${JAVA_VER}-installer
RUN update-java-alternatives -s java-8-oracle
RUN echo "export JAVA_HOME=/usr/lib/jvm/java-8-oracle" >> ~/.bashrc
RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
CMD ["/sbin/my_init"]
docker build -t demo/oracle-java:8 .Image bauen:
Beispiel: run Main.java
Main.java
public class Main
{
public static void main(String[] args) {
System.out.println("Hello, World");
}
}
docker run --rm -v $PWD:/app -w /app demo/oracle-java:8 javac Main.java
Main.java kompilieren:
docker run --rm -v $PWD:/app -w /app demo/oracle-java:8 java Main
Main.class ausführen:
Dateisystem
Linux Kernel
Änderungen (Benutzermodus)Änderungen (Basis Image)
Änderungen Änderungen
Änderungen
Änderungen Änderungen
Von Docker erzeugt
Vorhandenes System
( Commits vermeiden, besser
neue Dockerfiles anlegen )
Windows, Mac?
Mac / Windows
Hardware
Docker Engine
Linux Anwendung 1 Linux Anwendung 2
Linux Binaries /
Bibliotheken
Linux Binaries /
Bibliotheken
Container 1 Container 2
Windows, Mac?
Mac / Windows
Hardware
Docker Engine
Linux Anwendung 1 Linux Anwendung 2
Linux Binaries /
Bibliotheken
Linux Binaries /
Bibliotheken
Container 1 Container 2
Minimal Ubuntu VM
Startet in <2 Sekunden
Windows, Mac?
Mac / Windows
Hardware
Docker Engine
Linux Anwendung 1 Linux Anwendung 2
Linux Binaries /
Bibliotheken
Linux Binaries /
Bibliotheken
Container 1 Container 2
Minimal Ubuntu VM
Startet in <2 Sekunden
Windows-Container für Windows Server 2016Anmerkung
Docker Registry
• Verwalten Docker Images

• Docker Images können veröffentlicht oder bezogen werden

docker push docker pull 

• Registrys können selbst ausgeführt werden

docker run -d -p 5000:5000 --name registry registry:2
Docker Registry
Firmennetzwerk
Test Server
Private RegistryPublic Registry
Production Server
docker pull
docker push
docker pull
docker
pull
Entwickler
docker pull
Public Registry: Docker Hub
Docker Store für kommerzielle ImagesAnmerkung
Microservices
• Brechen umfangreiche Dienste in kleinere Dienste herunter

• Von aussen nur gesamter Dienst erkennbar

• Kommunikation üblicherweise über HTTP(S)
Microservices
Vorteile: - Verringerte Komplexität der zu entwickelnden Einheiten

- Kleinere Teams, einfachere Entwicklung

- Services lassen sich auslagern

- Skalierbarkeit

- Einfacher Austausch von Microservice

- Viele Microservices bereits frei verfügbar oder gegen Lizenz zu erwerben
Servicepartner
Baukasten:
• Zusammenfügen mehrer Container zu einer Umgebung

• Container bieten jeweils nur einen Microservice an

• Kommunikation grösstenteils über HTTP, aber auch über geteilte
Verzeichnisse möglich

• Konfiguration über docker-compose.yml
Docker Compose
-p 5000:80 -v ~/dev:/code
docker-compose.yml
Docker Compose
version: '3'
services:
database:
image: redis
frontend:
build: .
links:
- database
environment:
- SPRING_REDIS_HOST=database
load-balancer:
image: dockercloud/haproxy
links:
- frontend
volumes:
- /var/run/docker.sock:/var/run/docker.sock
ports:
- 80:80
AWS Elastic Beanstalk
Elastic Beanstalk
Elastic Container Service
EC2 Instanzen
Load Balancer Relational Database Service
CloudWatch
Simple Notification Service
Benutzer Entwickler
#
# NOTE: THIS
DOCKERFILE IS
GENERATED VIA
"update.sh"
#
# PLEASE DO NOT
EDIT IT DIRECTLY.
#
FROM
debian:stretch-slim
# prevent Debian's
PHP packages from
AWS Elastic Beanstalk
Elastic Beanstalk
Elastic Container Service
EC2 Instanzen
Load Balancer Relational Database Service
CloudWatch
Simple Notification Service
Benutzer Entwickler
Amazon Elastic

Container Registry
Anmerkung
Demo

Contenu connexe

Tendances

Docker Introduction
Docker IntroductionDocker Introduction
Docker IntroductionPeng Xiao
 
Introduction to Docker
Introduction to DockerIntroduction to Docker
Introduction to DockerAditya Konarde
 
Docker and the Linux Kernel
Docker and the Linux KernelDocker and the Linux Kernel
Docker and the Linux KernelDocker, Inc.
 
Software Containerization
Software ContainerizationSoftware Containerization
Software ContainerizationRoshan Deniyage
 
Docker Tutorial For Beginners | What Is Docker And How It Works? | Docker Tut...
Docker Tutorial For Beginners | What Is Docker And How It Works? | Docker Tut...Docker Tutorial For Beginners | What Is Docker And How It Works? | Docker Tut...
Docker Tutorial For Beginners | What Is Docker And How It Works? | Docker Tut...Simplilearn
 
Midi technique - présentation docker
Midi technique - présentation dockerMidi technique - présentation docker
Midi technique - présentation dockerOlivier Eeckhoutte
 
オトナのDocker入門
オトナのDocker入門オトナのDocker入門
オトナのDocker入門Tsukasa Kato
 
Rootless Containers
Rootless ContainersRootless Containers
Rootless ContainersAkihiro Suda
 
Docker 101 - from 0 to Docker in 30 minutes
Docker 101 - from 0 to Docker in 30 minutesDocker 101 - from 0 to Docker in 30 minutes
Docker 101 - from 0 to Docker in 30 minutesLuciano Fiandesio
 
Introduction to Docker - 2017
Introduction to Docker - 2017Introduction to Docker - 2017
Introduction to Docker - 2017Docker, Inc.
 
Docker introduction (1)
Docker introduction (1)Docker introduction (1)
Docker introduction (1)Gourav Varma
 
Getting started with Docker
Getting started with DockerGetting started with Docker
Getting started with DockerRavindu Fernando
 
Docker introduction
Docker introductionDocker introduction
Docker introductiondotCloud
 
containerdの概要と最近の機能
containerdの概要と最近の機能containerdの概要と最近の機能
containerdの概要と最近の機能Kohei Tokunaga
 
CKA Certified Kubernetes Administrator Notes
CKA Certified Kubernetes Administrator Notes CKA Certified Kubernetes Administrator Notes
CKA Certified Kubernetes Administrator Notes Adnan Rashid
 
Docker Compose by Aanand Prasad
Docker Compose by Aanand Prasad Docker Compose by Aanand Prasad
Docker Compose by Aanand Prasad Docker, Inc.
 

Tendances (20)

Docker Introduction
Docker IntroductionDocker Introduction
Docker Introduction
 
Introduction to Docker
Introduction to DockerIntroduction to Docker
Introduction to Docker
 
Docker and the Linux Kernel
Docker and the Linux KernelDocker and the Linux Kernel
Docker and the Linux Kernel
 
Software Containerization
Software ContainerizationSoftware Containerization
Software Containerization
 
Docker Tutorial For Beginners | What Is Docker And How It Works? | Docker Tut...
Docker Tutorial For Beginners | What Is Docker And How It Works? | Docker Tut...Docker Tutorial For Beginners | What Is Docker And How It Works? | Docker Tut...
Docker Tutorial For Beginners | What Is Docker And How It Works? | Docker Tut...
 
Midi technique - présentation docker
Midi technique - présentation dockerMidi technique - présentation docker
Midi technique - présentation docker
 
オトナのDocker入門
オトナのDocker入門オトナのDocker入門
オトナのDocker入門
 
Rootless Containers
Rootless ContainersRootless Containers
Rootless Containers
 
Docker Basics
Docker BasicsDocker Basics
Docker Basics
 
Docker architecture-04-1
Docker architecture-04-1Docker architecture-04-1
Docker architecture-04-1
 
Virtual Container - Docker
Virtual Container - Docker Virtual Container - Docker
Virtual Container - Docker
 
Docker 101 - from 0 to Docker in 30 minutes
Docker 101 - from 0 to Docker in 30 minutesDocker 101 - from 0 to Docker in 30 minutes
Docker 101 - from 0 to Docker in 30 minutes
 
Introduction to Docker - 2017
Introduction to Docker - 2017Introduction to Docker - 2017
Introduction to Docker - 2017
 
Docker introduction (1)
Docker introduction (1)Docker introduction (1)
Docker introduction (1)
 
Getting started with Docker
Getting started with DockerGetting started with Docker
Getting started with Docker
 
Docker introduction
Docker introductionDocker introduction
Docker introduction
 
containerdの概要と最近の機能
containerdの概要と最近の機能containerdの概要と最近の機能
containerdの概要と最近の機能
 
CKA Certified Kubernetes Administrator Notes
CKA Certified Kubernetes Administrator Notes CKA Certified Kubernetes Administrator Notes
CKA Certified Kubernetes Administrator Notes
 
Docker Compose by Aanand Prasad
Docker Compose by Aanand Prasad Docker Compose by Aanand Prasad
Docker Compose by Aanand Prasad
 
Docker Networking
Docker NetworkingDocker Networking
Docker Networking
 

Similaire à Einführung in Docker

Hendrik Jungnitsch: Software verpacken mit Docker
Hendrik Jungnitsch: Software verpacken mit DockerHendrik Jungnitsch: Software verpacken mit Docker
Hendrik Jungnitsch: Software verpacken mit Dockergedoplan
 
docker.io @ CentOS 7 - Secure And Portable Containers Made Easy
docker.io @ CentOS 7 - Secure And Portable Containers Made Easydocker.io @ CentOS 7 - Secure And Portable Containers Made Easy
docker.io @ CentOS 7 - Secure And Portable Containers Made Easyinovex GmbH
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsQAware GmbH
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsJosef Adersberger
 
Ausrollen von Multi-Tier-Applikationen mit Docker
Ausrollen von Multi-Tier-Applikationen mit DockerAusrollen von Multi-Tier-Applikationen mit Docker
Ausrollen von Multi-Tier-Applikationen mit DockerB1 Systems GmbH
 
DDEV - Eine lokale Entwicklungsumgebung
DDEV - Eine lokale EntwicklungsumgebungDDEV - Eine lokale Entwicklungsumgebung
DDEV - Eine lokale EntwicklungsumgebungFrank Schmittlein
 
Docker for Windows / Windows Container
Docker for Windows / Windows ContainerDocker for Windows / Windows Container
Docker for Windows / Windows ContainerThomas Wilhelm Wiefel
 
docker.io - Secure And Portable Containers Made Easy
docker.io - Secure And Portable Containers Made Easydocker.io - Secure And Portable Containers Made Easy
docker.io - Secure And Portable Containers Made Easyinovex GmbH
 
Tipps und Tricks im Umgang mit Docker
Tipps und Tricks im Umgang mit DockerTipps und Tricks im Umgang mit Docker
Tipps und Tricks im Umgang mit DockerNicholas Dille
 
Dockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdf
Dockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdfDockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdf
Dockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdfSyahri Ramadhan
 
Docker - Automatisches Deployment für Linux-Instanzen
Docker - Automatisches Deployment für Linux-Instanzen Docker - Automatisches Deployment für Linux-Instanzen
Docker - Automatisches Deployment für Linux-Instanzen B1 Systems GmbH
 
Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...
Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...
Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...B1 Systems GmbH
 
Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17remigius-stalder
 
Was gibt es Neues im Docker-Universum
Was gibt es Neues im Docker-UniversumWas gibt es Neues im Docker-Universum
Was gibt es Neues im Docker-UniversumNicholas Dille
 
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...gedoplan
 
Abläufe mit PHP und Phing automatisieren
Abläufe mit PHP und Phing automatisierenAbläufe mit PHP und Phing automatisieren
Abläufe mit PHP und Phing automatisierenChristian Münch
 
Vagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und ArchitektenVagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und ArchitektenOPITZ CONSULTING Deutschland
 
DOAG Webinar Oracle und Docker
DOAG Webinar Oracle und DockerDOAG Webinar Oracle und Docker
DOAG Webinar Oracle und DockerStefan Oehrli
 

Similaire à Einführung in Docker (20)

Hendrik Jungnitsch: Software verpacken mit Docker
Hendrik Jungnitsch: Software verpacken mit DockerHendrik Jungnitsch: Software verpacken mit Docker
Hendrik Jungnitsch: Software verpacken mit Docker
 
docker.io @ CentOS 7 - Secure And Portable Containers Made Easy
docker.io @ CentOS 7 - Secure And Portable Containers Made Easydocker.io @ CentOS 7 - Secure And Portable Containers Made Easy
docker.io @ CentOS 7 - Secure And Portable Containers Made Easy
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-Patterns
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-Patterns
 
Ausrollen von Multi-Tier-Applikationen mit Docker
Ausrollen von Multi-Tier-Applikationen mit DockerAusrollen von Multi-Tier-Applikationen mit Docker
Ausrollen von Multi-Tier-Applikationen mit Docker
 
DDEV - Eine lokale Entwicklungsumgebung
DDEV - Eine lokale EntwicklungsumgebungDDEV - Eine lokale Entwicklungsumgebung
DDEV - Eine lokale Entwicklungsumgebung
 
Docker for Windows / Windows Container
Docker for Windows / Windows ContainerDocker for Windows / Windows Container
Docker for Windows / Windows Container
 
docker.io - Secure And Portable Containers Made Easy
docker.io - Secure And Portable Containers Made Easydocker.io - Secure And Portable Containers Made Easy
docker.io - Secure And Portable Containers Made Easy
 
Tipps und Tricks im Umgang mit Docker
Tipps und Tricks im Umgang mit DockerTipps und Tricks im Umgang mit Docker
Tipps und Tricks im Umgang mit Docker
 
Dockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdf
Dockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdfDockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdf
Dockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdf
 
Docker - Automatisches Deployment für Linux-Instanzen
Docker - Automatisches Deployment für Linux-Instanzen Docker - Automatisches Deployment für Linux-Instanzen
Docker - Automatisches Deployment für Linux-Instanzen
 
Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...
Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...
Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...
 
Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17
 
Was gibt es Neues im Docker-Universum
Was gibt es Neues im Docker-UniversumWas gibt es Neues im Docker-Universum
Was gibt es Neues im Docker-Universum
 
FLOW3-Workshop F3X12
FLOW3-Workshop F3X12FLOW3-Workshop F3X12
FLOW3-Workshop F3X12
 
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
 
Abläufe mit PHP und Phing automatisieren
Abläufe mit PHP und Phing automatisierenAbläufe mit PHP und Phing automatisieren
Abläufe mit PHP und Phing automatisieren
 
Vagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und ArchitektenVagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und Architekten
 
DOAG Webinar Oracle und Docker
DOAG Webinar Oracle und DockerDOAG Webinar Oracle und Docker
DOAG Webinar Oracle und Docker
 
Was ist Docker ?
Was ist Docker ?Was ist Docker ?
Was ist Docker ?
 

Einführung in Docker

  • 2. Docker • Entwickler: Docker, Inc.
 (gegründet: unter dem Namen „dotCloud Inc.“ 2010) • Erscheinungsjahr: 2013 • Lizenz: Opensource (Apache 2.0) • Business Model: Free Software, Premium Support
  • 3. Was ist Docker? „Open-Source-Software zur Isolierung von Anwendungen mit Containervirtualisierung“ „docker“ → zu Deutsch: „Hafenarbeiter“ Dockarbeiter (»Dockers«) in Bristol im Jahr 1940 (Ministry of Information Photo Division Photographer)
  • 4. Was ist Docker? „Open-Source-Software zur Isolierung von Anwendungen mit Containervirtualisierung“
  • 5. Was ist Docker? „Open-Source-Software zur Isolierung von Anwendungen mit Containervirtualisierung“
  • 6. Was ist Docker? „Open-Source-Software zur Isolierung von Anwendungen mit Containervirtualisierung“ Container
  • 7. Was ist Docker? „Open-Source-Software zur Isolierung von Anwendungen mit Containervirtualisierung“
  • 8. Gründe für Isolation 1. Gleiche Umgebung, gleiches Verhalten 2. Erhöhung der Sicherheit und Zuverlässigkeit 3. Einfacher zu verwalten
  • 9. Docker vs VMs Hypervisor Host Betriebsystem Hardware Gast Betriebsystem Gast Betriebsystem Anwendung 1 Anwendung 2 Binaries / Bibliotheken Binaries / Bibliotheken VM 1 VM 2
  • 10. Docker vs VMs Host Betriebsystem Hardware Anwendung 1 Anwendung 2 Binaries / Bibliotheken Binaries / Bibliotheken Docker Engine Container 1 Container 2
  • 11. Docker vs VMs Hypervisor Host Betriebsystem Hardware Anwendung 1 Anwendung 2 Binaries / Bibliotheken Binaries / Bibliotheken Docker Engine Container 1 Container 2 VM 1 VM 2 Host Betriebsystem Hardware Gast Betriebsystem Gast Betriebsystem Anwendung 1 Anwendung 2 Binaries / Bibliotheken Binaries / Bibliotheken Vorteile Docker gegenüber VMs: • Einfach neue Projekte aufzusetzen (keine Installation eines BS.) • Einfaches Teilen von Daten zwischen Instanzen • Leichtgewichtigere Instanzen • Bessere Auslastung von Ressourcen • Gut zu vereinen mit: „Infrastructure as Code“ • Einfaches Testen während Endwicklung
  • 12. Docker vs VMs Hypervisor Host Betriebsystem Hardware Anwendung 1 Anwendung 2 Binaries / Bibliotheken Binaries / Bibliotheken Docker Engine Container 1 Container 2 VM 1 VM 2 Host Betriebsystem Hardware Gast Betriebsystem Gast Betriebsystem Anwendung 1 Anwendung 2 Binaries / Bibliotheken Binaries / Bibliotheken Docker immer besser ?
  • 13. Docker in VM Anw. 1 Anw. 2 Bin/ Bib. Bin/ Bib. Cloud-Server Gast Betriebsystem Docker Engine Hypervisor Host Betriebsystem Hardware Gast Betriebsystem Gast Betriebsystem Anwendung 3 Anwendung 4 Binaries / Bibliotheken Binaries / Bibliotheken
  • 14. Docker in VM Anw. 1 Anw. 2 Bin/ Bib. Bin/ Bib. Cloud-Server Gast Betriebsystem Docker Engine Hypervisor Host Betriebsystem Hardware Gast Betriebsystem Gast Betriebsystem Anwendung 3 Anwendung 4 Binaries / Bibliotheken Binaries / Bibliotheken
  • 15. Begriffe „Image“ = Speicherabbild eines Containers Bibliotheken Dateien Anwendungen „Container“ = aktive Instanz enthält # # NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh" # # PLEASE DO NOT EDIT IT DIRECTLY. # FROM debian:stretch-slim # prevent Debian's PHP packages from being installed # https://github.com/docker-library/php/pull/ 542 RUN set -eux;         {                 echo 'Package: php*';                 echo 'Pin: release *';                 echo 'Pin-Priority: -1';         } > /etc/apt/preferences.d/no-debian- php # persistent / runtime deps ENV PHPIZE_DEPS                 autoconf                 dpkg-dev                 file                 g++                 gcc                 libc-dev                 make                 pkg-config                 re2c RUN apt-get update && apt-get install -y                 $PHPIZE_DEPS                 ca-certificates                 curl Dockerfile beschreibt ausführen ( verpönt )
  • 16. Dockerfile # # NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh" # # PLEASE DO NOT EDIT IT DIRECTLY. # FROM debian:stretch-slim # prevent Debian's PHP packages from being installed # https://github.com/docker-library/php/pull/542 RUN set -eux;         {                 echo 'Package: php*';                 echo 'Pin: release *';                 echo 'Pin-Priority: -1';         } > /etc/apt/preferences.d/no-debian-php # persistent / runtime deps ENV PHPIZE_DEPS                 autoconf                 dpkg-dev                 file                 g++                 gcc                 libc-dev                 make                 pkg-config                 re2c RUN apt-get update && apt-get install -y                 $PHPIZE_DEPS                 ca-certificates                 curl                 xz-utils         --no-install-recommends && rm -r /var/lib/apt/lists/* ENV PHP_INI_DIR /usr/local/etc/php RUN mkdir -p $PHP_INI_DIR/conf.d ##<autogenerated>## RUN apt-get update         && apt-get install -y --no-install-recommends                 apache2         && rm -rf /var/lib/apt/lists/* ENV APACHE_CONFDIR /etc/apache2 ENV APACHE_ENVVARS $APACHE_CONFDIR/envvars RUN set -ex         # generically convert lines like #   export APACHE_RUN_USER=www-data # into #   : ${APACHE_RUN_USER:=www-data} #   export APACHE_RUN_USER # so that they can be overridden at runtime ("-e APACHE_RUN_USER=...")         && sed -ri 's/^export ([^=]+)=(.*)$/: ${1:=2}nexport 1/' "$APACHE_ENVVARS"         # setup directories and permissions         && . "$APACHE_ENVVARS"         && for dir in                 "$APACHE_LOCK_DIR" = Textdatei mit einer Reihe von Befehlen um Container zu erzeugen → System konfigurieren → Software installieren → Dateien in Verzeichnis kopieren
  • 17. Dockerfile Beispiel: Dockerfile ( Keine Endung, Dateiname ist immer „Dockerfile“) FROM phusion/baseimage:0.9.17 MAINTAINER Author Name <author@organisation.com> RUN echo "deb http://archive.ubuntu.com/ubuntu trusty main universe" > /etc/apt/sources.list RUN apt-get -y update RUN DEBIAN_FRONTEND=noninteractive apt-get install -y -q python-software-properties software-properties-common ENV JAVA_VER 8 ENV JAVA_HOME /usr/lib/jvm/java-8-oracle RUN echo 'deb http://ppa.launchpad.net/webupd8team/java/ubuntu trusty main' >> /etc/apt/sources.list && echo 'deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu trusty main' >> /etc/apt/sources.list && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys C2518248EEA14886 && apt-get update && echo oracle-java${JAVA_VER}-installer shared/accepted-oracle-license-v1-1 select true | sudo /usr/bin/debconf-set-selections && apt-get install -y --force-yes --no-install-recommends oracle-java${JAVA_VER}-installer oracle-java${JAVA_VER}-set-default && apt-get clean && rm -rf /var/cache/oracle-jdk${JAVA_VER}-installer RUN update-java-alternatives -s java-8-oracle RUN echo "export JAVA_HOME=/usr/lib/jvm/java-8-oracle" >> ~/.bashrc RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* CMD ["/sbin/my_init"] docker build -t demo/oracle-java:8 .Image bauen:
  • 18. Beispiel: run Main.java Main.java public class Main { public static void main(String[] args) { System.out.println("Hello, World"); } } docker run --rm -v $PWD:/app -w /app demo/oracle-java:8 javac Main.java Main.java kompilieren: docker run --rm -v $PWD:/app -w /app demo/oracle-java:8 java Main Main.class ausführen:
  • 19. Dateisystem Linux Kernel Änderungen (Benutzermodus)Änderungen (Basis Image) Änderungen Änderungen Änderungen Änderungen Änderungen Von Docker erzeugt Vorhandenes System ( Commits vermeiden, besser neue Dockerfiles anlegen )
  • 20. Windows, Mac? Mac / Windows Hardware Docker Engine Linux Anwendung 1 Linux Anwendung 2 Linux Binaries / Bibliotheken Linux Binaries / Bibliotheken Container 1 Container 2
  • 21. Windows, Mac? Mac / Windows Hardware Docker Engine Linux Anwendung 1 Linux Anwendung 2 Linux Binaries / Bibliotheken Linux Binaries / Bibliotheken Container 1 Container 2 Minimal Ubuntu VM Startet in <2 Sekunden
  • 22. Windows, Mac? Mac / Windows Hardware Docker Engine Linux Anwendung 1 Linux Anwendung 2 Linux Binaries / Bibliotheken Linux Binaries / Bibliotheken Container 1 Container 2 Minimal Ubuntu VM Startet in <2 Sekunden Windows-Container für Windows Server 2016Anmerkung
  • 23. Docker Registry • Verwalten Docker Images • Docker Images können veröffentlicht oder bezogen werden
 docker push docker pull • Registrys können selbst ausgeführt werden
 docker run -d -p 5000:5000 --name registry registry:2
  • 24. Docker Registry Firmennetzwerk Test Server Private RegistryPublic Registry Production Server docker pull docker push docker pull docker pull Entwickler docker pull
  • 25. Public Registry: Docker Hub Docker Store für kommerzielle ImagesAnmerkung
  • 26. Microservices • Brechen umfangreiche Dienste in kleinere Dienste herunter • Von aussen nur gesamter Dienst erkennbar • Kommunikation üblicherweise über HTTP(S)
  • 27. Microservices Vorteile: - Verringerte Komplexität der zu entwickelnden Einheiten - Kleinere Teams, einfachere Entwicklung - Services lassen sich auslagern - Skalierbarkeit - Einfacher Austausch von Microservice - Viele Microservices bereits frei verfügbar oder gegen Lizenz zu erwerben Servicepartner Baukasten:
  • 28. • Zusammenfügen mehrer Container zu einer Umgebung • Container bieten jeweils nur einen Microservice an • Kommunikation grösstenteils über HTTP, aber auch über geteilte Verzeichnisse möglich • Konfiguration über docker-compose.yml Docker Compose -p 5000:80 -v ~/dev:/code
  • 29. docker-compose.yml Docker Compose version: '3' services: database: image: redis frontend: build: . links: - database environment: - SPRING_REDIS_HOST=database load-balancer: image: dockercloud/haproxy links: - frontend volumes: - /var/run/docker.sock:/var/run/docker.sock ports: - 80:80
  • 30. AWS Elastic Beanstalk Elastic Beanstalk Elastic Container Service EC2 Instanzen Load Balancer Relational Database Service CloudWatch Simple Notification Service Benutzer Entwickler # # NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh" # # PLEASE DO NOT EDIT IT DIRECTLY. # FROM debian:stretch-slim # prevent Debian's PHP packages from
  • 31. AWS Elastic Beanstalk Elastic Beanstalk Elastic Container Service EC2 Instanzen Load Balancer Relational Database Service CloudWatch Simple Notification Service Benutzer Entwickler Amazon Elastic
 Container Registry Anmerkung
  • 32. Demo