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)
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:
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
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
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