Permalink
Branch: master
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
316 lines (239 sloc) 9.32 KB

DOCKER - Eine Einführung

…​aus Sicht eines Softwareentwicklers

Oliver Nautsch

Oliver Nautsch

  • selbständig - Nautsch GmbH, Zürich

Software Craftsman

  • Engineer, Coach, Architect, Trainer, Consultant, Gardener, …​

  • Microservices, Open Source, TDD, DDD, CD, Virtualisierung, …​

  • Java, ( JVM Sprachen ), …​


email: oliver.nautsch@nautsch.com
twitter: @ollispieps
github: @ollin
google+: OliverNautsch


Familie, 2 Kinder
jug.ch Board Member seit 2014 / Präsident seit 2015
OSS an Schulen (ch/open), ( Hackergarten Zürich ), ( Coders Only Zürich ), …​
. . . running . . .

Was ist Docker

docker
  • Open Source Software

  • Applikationen in Software Containern

  • OS-Level Virtualisierung auf Linux

Unterschied zu virtuellen Maschinen

Unterschied zu VM’s
  • Beispiel: virtualbox via Vagrant vs docker

Anwendungsfälle

  • Entwicklungs- und Buildumgebungen

  • Continous Integration / Continuous Delivery

  • Produktionsumgebungen

  • Mandantenfähigkeit

  • Server Konsolidierung

  • Applikationsisolierung

  • einfachere Konfiguration (immutable infrastructure)

  • . . .

Docker Elemente

usability over functionality
  • Docker Hub ist eine Registry für Images

  • Docker Engine

  • Image

    • Layers (wie git commits or changesets für ein Dateisystem)

    • ein Parent

    • r

  • Container

    • rw via Union File System

Docker Techniken

Layers
  • cgroups - control groups - Linux Kernel Funktion zum begrenzen, messen und isolieren von Ressourcen (CPU, Speicher, disc I/O etc.)

  • kernel namespaces - trennen der Sichtbarkeit von Ressourcen in anderen Gruppen (Prozesse, Netzwerk, user IDs, Dateisysteme, etc.)

  • Overlay-Dateisystem (AuFS oder Btrfs)

Running a Container

docker run --rm -i -t ubuntu:14.04.3 bash
root@35d2e9236656:/# exit
docker ps -a
  • docker - das CLI

  • run - erzeugt einen Container und startet ihn

  • --rm - entfernt den Container wieder, wenn er beendet wird

  • -i - interactive / STDIN bleibt offen

  • -t - Terminal

  • ubuntu:14.04.3 - [<location>/][<user>/]<name>[:<tag>]

    • Beispiele:

      • myrepo.nautsch.ch:12345/nautsch/myimage:1.0

      • ubuntu

  • bash - der auszuführende Befehl

Erzeugen eines Images - via commit

docker run -t -i  ubuntu:14.04.3 bash
root@dcde95ca3e5c:/# touch huschihops.txt
root@dcde95ca3e5c:/# exit
docker ps -a
docker commit -m="added huschihops.txt" -a="Oliver Nautsch" dcde95ca3e5c ollin/huschihops:1.0

. . . - via Dockerfile

FROM ubuntu:14.04.3
MAINTAINER Oliver Nautsch <oliver.nautsch@gmail.com>

RUN touch huschihops.txt
docker build -t ollin/huschihops:1.0 .
Sending build context to Docker daemon  2.56 kB
Sending build context to Docker daemon
Step 0 : FROM ubuntu:14.04.3
 ---> c4ff7513909d
Step 1 : MAINTAINER Oliver Nautsch <oliver.nautsch@gmail.com>
 ---> Using cache
 ---> 98658a58fa03
Step 2 : RUN touch huschihops.txt
 ---> Running in 2d4d554cbf2a
 ---> 01ee073272ec
Removing intermediate container 2d4d554cbf2a
Successfully built 01ee073272ec

docker images
REPOSITORY                       TAG                   IMAGE ID            CREATED             VIRTUAL SIZE
ollin/huschihops                 1.0                   01ee073272ec        31 seconds ago      225.4 MB
. . .

Image - Container

docker inspect jenkins
. . . (Metainformationen ueber Image als JSON, u.a. ExposedPorts)

docker create -t -p 8080:8080 --name myjenkins1 jenkins  # erzeuge job 'aaaa'
docker ps
docker start myjenkins1
docker ps
docker inspect myjenkins1
docker run -d -t -p 8081:8080 --name myjenkins2 jenkins  # erzeuge job 'bbbb'
docker ps

docker rm -f myjenkins2 myjenkins1
  • erzeugen vs. starten

  • Ports von Container an Host herausgeben

  • docker rm und die Daten sind weg!

Data Volumes

  • spezielle Verzeichnisse in einen oder mehreren Containern

  • geht am Union File System vorbei

  • Änderungen werden nicht berücksichtigt, wenn neues Image erzeugt wird

  • persistent bis kein Container sie mehr benutzt

Verzeichnis von Host mounten

docker run -d -t --name myjenkins3 -p 8083:8080 -v /home/ollin/docker_data/myjenkins3-home:/var/jenkins_home jenkins:latest

ls -al /home/ollin/docker_data/myjenkins3-home

docker stop myjenkins3 && docker rm myjenkins3

docker run -d -t --name myjenkins4 -p 8084:8080 -v /home/ollin/docker_data/myjenkins3-home:/var/jenkins_home jenkins:weekly
data-volumes.png

Data Container

docker run --name myjenkins_data -v /var/jenkins_home tianon/true
docker run -d -t --name myjenkins5 -p 8085:8080 -u root --volumes-from="myjenkins_data" jenkins:latest

docker rm -f myjenkins5

docker run -d -t --name myjenkins6 -p 8086:8080 -u root --volumes-from="myjenkins_data" jenkins:weekly
data-container.png
  • Container, der nur ein oder mehrere Volumes definiert

  • Umgebungsvariablen

  • /etc/hosts

docker run -d -t -p 5000:5000 --name myregistry registry:0.9.1
curl http://localhost:5000

docker run -d -t -P --name myregistrygui --link myregistry:myregistry -e REG1=http://myregistry:5000/v1/ atcol/docker-registry-ui
link
docker exec -i -t myregistrygui bash
root@5baad6521a33:/tomcat7# env | sort
...
root@5baad6521a33:/tomcat7# cat /etc/hosts
...

docker-compose

docker-compose

"…​define a multi-container application in a single file…​"

  • Entwicklungsumgebungen (z.B. Tools)

  • Produktion

  • oder auch für Präsentationen :)

cd docker-handson
less docker-compose.yml
docker-compose up -d
...
docker-compose stop
...
docker-compose start

Veröffentlichung eines Images

issumy/gradlew uploadArchives

docker run --rm -i -t -p 9090:8080 myregistry:5000/ollin/issumy
curl http://localhost:9090/issues
push image

Geschichte

  • internes Projekt bei dotCloud

  • September 2013 redhat Ankündigung ( OpenShift v3 )

  • Oktober 2013 dotCloud Inc. → Docker Inc.

  • Juni 2014 dockercon

    • keynodes from IBM, google, rackspace

  • Juli 2014 Windows Azure + Docker

  • Mid 2015 Docker Container Support for Windows Server

  • aktuell Version 1.8.1

    • 2015-08-12 - 1.8 - Docker content trust, Docker toolbox, …​

    • 2015-06-22 - 1.7 - plugin system for engine, …​ (Orchestration updates, Swarm, Machine, Compose)

    • 2015-04-16 - 1.6 - labels, windows client preview, logging drivers

    • 2015-02-03 - 1.5 - read only file system, IPv6 zwischen Containern

    • 2014-12-11 - 1.4 - stability

    • 2014-10-16 - 1.3 - exec, create, signing

    • . . .

    • 2014-06-09 - 1.0 - first stable version

    • . . .

    • 2013-03-20 - first public version

  • 14'000+ dockerisierte Applikationen (Stand Feb. 2015)

  • 3200 forks Feb. 2015 / 6,300 forks Sept. 2015

Docker - weitere Themen

Diskussion

  • Docker - Java?

  • Ein Prozess und viele Anwendungen (JEE Modell) vs. viele Prozesse?

Vielen Dank für die Teilnahme!

Creative Commons License

FAQ

  1. Gibt es die Möglichkeit Applikationen mit graphischen Oberflächen mit Docker zu starten? Im Vortrag sind nur headless Applikationen gezeigt worden.

    Ja, diese Möglichkeit gibt es tatsächlich. Hier ein Beispiel für Firefox und Netbeans: Running GUI apps with Docker by Fábio Rehm.