SlideShare uma empresa Scribd logo
1 de 32
Baixar para ler offline
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

Mais conteúdo relacionado

Mais procurados

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
 
Why Docker
Why DockerWhy Docker
Why Docker
dotCloud
 

Mais procurados (20)

Introduction To Containers - Builders Day Israel
Introduction To Containers - Builders Day IsraelIntroduction To Containers - Builders Day Israel
Introduction To Containers - Builders Day Israel
 
Docker Networking Deep Dive
Docker Networking Deep DiveDocker Networking Deep Dive
Docker Networking Deep Dive
 
Introduction to container based virtualization with docker
Introduction to container based virtualization with dockerIntroduction to container based virtualization with docker
Introduction to container based virtualization with docker
 
Docker introduction (1)
Docker introduction (1)Docker introduction (1)
Docker introduction (1)
 
Virtualization, Containers, Docker and scalable container management services
Virtualization, Containers, Docker and scalable container management servicesVirtualization, Containers, Docker and scalable container management services
Virtualization, Containers, Docker and scalable container management services
 
Getting started with Docker
Getting started with DockerGetting started with Docker
Getting started with Docker
 
Docker Swarm for Beginner
Docker Swarm for BeginnerDocker Swarm for Beginner
Docker Swarm for Beginner
 
Podman, Buildah, and Quarkus - The Latest in Linux Containers Technologies
Podman, Buildah, and Quarkus - The Latest in Linux Containers Technologies Podman, Buildah, and Quarkus - The Latest in Linux Containers Technologies
Podman, Buildah, and Quarkus - The Latest in Linux Containers Technologies
 
Docker 101 - Nov 2016
Docker 101 - Nov 2016Docker 101 - Nov 2016
Docker 101 - Nov 2016
 
Docker introduction
Docker introductionDocker introduction
Docker introduction
 
Docker Introduction.pdf
Docker Introduction.pdfDocker Introduction.pdf
Docker Introduction.pdf
 
Docker Networking Overview
Docker Networking OverviewDocker Networking Overview
Docker Networking Overview
 
Docker Basic to Advance
Docker Basic to AdvanceDocker Basic to Advance
Docker Basic to Advance
 
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
 
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...
 
Introduction to Docker
Introduction to DockerIntroduction to Docker
Introduction to Docker
 
Why Docker
Why DockerWhy Docker
Why Docker
 
Docker introduction
Docker introductionDocker introduction
Docker introduction
 
Introduction to Docker
Introduction to DockerIntroduction to Docker
Introduction to Docker
 
VNF Integration and Support in CloudStack - Wei Zhou - ShapeBlue
VNF Integration and Support in CloudStack - Wei Zhou - ShapeBlueVNF Integration and Support in CloudStack - Wei Zhou - ShapeBlue
VNF Integration and Support in CloudStack - Wei Zhou - ShapeBlue
 

Semelhante a Einführung in Docker

DDEV - Eine lokale Entwicklungsumgebung
DDEV - Eine lokale EntwicklungsumgebungDDEV - Eine lokale Entwicklungsumgebung
DDEV - Eine lokale Entwicklungsumgebung
Frank Schmittlein
 
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
Syahri Ramadhan
 

Semelhante a 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