SlideShare ist ein Scribd-Unternehmen logo
1 von 32
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Was ist angesagt?

Introduction to Containers and Docker
Introduction to Containers and DockerIntroduction to Containers and Docker
Introduction to Containers and DockerFayçal Bziou
 
Docker 101: Introduction to Docker
Docker 101: Introduction to DockerDocker 101: Introduction to Docker
Docker 101: Introduction to DockerDocker, Inc.
 
What Is A Docker Container? | Docker Container Tutorial For Beginners| Docker...
What Is A Docker Container? | Docker Container Tutorial For Beginners| Docker...What Is A Docker Container? | Docker Container Tutorial For Beginners| Docker...
What Is A Docker Container? | Docker Container Tutorial For Beginners| Docker...Simplilearn
 
What is Docker | Docker Tutorial for Beginners | Docker Container | DevOps To...
What is Docker | Docker Tutorial for Beginners | Docker Container | DevOps To...What is Docker | Docker Tutorial for Beginners | Docker Container | DevOps To...
What is Docker | Docker Tutorial for Beginners | Docker Container | DevOps To...Edureka!
 
Dockers and containers basics
Dockers and containers basicsDockers and containers basics
Dockers and containers basicsSourabh Saxena
 
Docker intro
Docker introDocker intro
Docker introOleg Z
 
Introduction to docker
Introduction to dockerIntroduction to docker
Introduction to dockerInstruqt
 
Introduction to docker
Introduction to dockerIntroduction to docker
Introduction to dockerWalid Ashraf
 
Docker: From Zero to Hero
Docker: From Zero to HeroDocker: From Zero to Hero
Docker: From Zero to Herofazalraja
 
Container orchestration overview
Container orchestration overviewContainer orchestration overview
Container orchestration overviewWyn B. Van Devanter
 
Docker introduction for the beginners
Docker introduction for the beginnersDocker introduction for the beginners
Docker introduction for the beginnersJuneyoung Oh
 
Docker Basic to Advance
Docker Basic to AdvanceDocker Basic to Advance
Docker Basic to AdvanceParas Jain
 
Containerized Applications Overview
Containerized Applications OverviewContainerized Applications Overview
Containerized Applications OverviewApoorv Anand
 
Docker Compose | Docker Compose Tutorial | Docker Tutorial For Beginners | De...
Docker Compose | Docker Compose Tutorial | Docker Tutorial For Beginners | De...Docker Compose | Docker Compose Tutorial | Docker Tutorial For Beginners | De...
Docker Compose | Docker Compose Tutorial | Docker Tutorial For Beginners | De...Simplilearn
 
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
 
 Introduction google cloud platform
 Introduction google cloud platform Introduction google cloud platform
 Introduction google cloud platformmarwa Ayad Mohamed
 
Docker vs VM | | Containerization or Virtualization - The Differences | DevOp...
Docker vs VM | | Containerization or Virtualization - The Differences | DevOp...Docker vs VM | | Containerization or Virtualization - The Differences | DevOp...
Docker vs VM | | Containerization or Virtualization - The Differences | DevOp...Edureka!
 
Docker 101 - Getting started
Docker 101 - Getting startedDocker 101 - Getting started
Docker 101 - Getting startedMatheus Marabesi
 

Was ist angesagt? (20)

Introduction to Containers and Docker
Introduction to Containers and DockerIntroduction to Containers and Docker
Introduction to Containers and Docker
 
Docker 101: Introduction to Docker
Docker 101: Introduction to DockerDocker 101: Introduction to Docker
Docker 101: Introduction to Docker
 
What Is A Docker Container? | Docker Container Tutorial For Beginners| Docker...
What Is A Docker Container? | Docker Container Tutorial For Beginners| Docker...What Is A Docker Container? | Docker Container Tutorial For Beginners| Docker...
What Is A Docker Container? | Docker Container Tutorial For Beginners| Docker...
 
What is Docker | Docker Tutorial for Beginners | Docker Container | DevOps To...
What is Docker | Docker Tutorial for Beginners | Docker Container | DevOps To...What is Docker | Docker Tutorial for Beginners | Docker Container | DevOps To...
What is Docker | Docker Tutorial for Beginners | Docker Container | DevOps To...
 
Dockers and containers basics
Dockers and containers basicsDockers and containers basics
Dockers and containers basics
 
Docker intro
Docker introDocker intro
Docker intro
 
Introduction to docker
Introduction to dockerIntroduction to docker
Introduction to docker
 
Introduction to docker
Introduction to dockerIntroduction to docker
Introduction to docker
 
Docker: From Zero to Hero
Docker: From Zero to HeroDocker: From Zero to Hero
Docker: From Zero to Hero
 
Container orchestration overview
Container orchestration overviewContainer orchestration overview
Container orchestration overview
 
Docker introduction for the beginners
Docker introduction for the beginnersDocker introduction for the beginners
Docker introduction for the beginners
 
Docker Basic to Advance
Docker Basic to AdvanceDocker Basic to Advance
Docker Basic to Advance
 
Cloud database
Cloud databaseCloud database
Cloud database
 
Containerized Applications Overview
Containerized Applications OverviewContainerized Applications Overview
Containerized Applications Overview
 
Docker Compose | Docker Compose Tutorial | Docker Tutorial For Beginners | De...
Docker Compose | Docker Compose Tutorial | Docker Tutorial For Beginners | De...Docker Compose | Docker Compose Tutorial | Docker Tutorial For Beginners | De...
Docker Compose | Docker Compose Tutorial | Docker Tutorial For Beginners | De...
 
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...
 
Virtual Machine
Virtual MachineVirtual Machine
Virtual Machine
 
 Introduction google cloud platform
 Introduction google cloud platform Introduction google cloud platform
 Introduction google cloud platform
 
Docker vs VM | | Containerization or Virtualization - The Differences | DevOp...
Docker vs VM | | Containerization or Virtualization - The Differences | DevOp...Docker vs VM | | Containerization or Virtualization - The Differences | DevOp...
Docker vs VM | | Containerization or Virtualization - The Differences | DevOp...
 
Docker 101 - Getting started
Docker 101 - Getting startedDocker 101 - Getting started
Docker 101 - Getting started
 

Ähnlich wie 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-PatternsJosef Adersberger
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsQAware GmbH
 
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
 

Ähnlich wie 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