docker.io
Secure And Portable
Containers Made Easy
Jürgen Brunk
München, 30.04.2014
docker.io 2
1.Was ist Docker ?
2.Was sind Container ?
3.Warum Docker ?
4.Architektur
5.Praxis
6.Docker unter Ubuntu installieren
7.Ein einfaches „Hello World“ Beispiel
8.Grundlegende Docker Befehle
9.Dockerfile
10.Container & Images transferieren
Agenda
Was ist Docker ?
docker.io 4
Was ist Docker ?
Das Docker*
Framework erlaubt
es (Web-)
Applikationen in
schlanke, autarke
und portable
Umgebungen, sog.
Container, zu
verpacken
*) engl. Hafenarbeiter
Was sind
Container ?
docker.io 6
Was sind Container ?
Operating system–level virtualization:
z.B. jails, openvz, lxc, ...
Abgeschottete Teilmenge des Hostsystems
(getrennter Process-, Netzwerk-, I/O-Raum)
Quasi „chroot on Steroids“
docker.io 7
Container vs. VMs
Warum Docker ?
docker.io 9
Warum Docker? (The Matrix from Hell)
docker.io 10
Vorteile für DEV
Einmal gebaut – läuft überall !
Saubere, sichere, portable Laufzeitumgebung
für die Application
Kein Problem mit Dependencies, Paketen
etc. während des Deployments
Jede Application ist ein isolierter Container
mit ggf. unterschiedlichen SW-Versionen
docker.io 11
Vorteile für OPS
Einmal konfiguriert – läuft überall !
Keine Inkonsistenzen mehr zwischen Dev-,
QA-, Stage-, Prod-Umgebung
Schnelleres Deployment (continuous
deployment / continuous integration)
Schlanke Container – bessere Performance
als VM's
docker.io 12
Warum es funktioniert (Trennung der Zuständigkeiten)
Entwickler:
Kümmert sich um das was
innerhalb des Containers
ist:
●
sein Code / Daten
●
seine Libs / Frameworks
●
sein Package Manager
Alle Linux Server sehen
gleich aus
Admin:
Kümmert sich um das was
ausserhalb des Containers
ist:
●
Logging / Backup
●
Remote Access
●
Network Config
Alle Container starten und
stoppen gleich
ArchitekturArchitektur
docker.io 14
Architektur
docker.io 15
schlank
Docker* basiert auf Linux Containern LXC*
Minimaler Overhead (cpu/io/network)
Verwendet layered Filesystem
*) Due to a bug in LXC,
Docker works best on
the 3.8 kernel
docker.io 16
portabel
Läuft auf jedem System das LXC unterstützt
Ubuntu, Debian*, RHEL, Gentoo, Google
Cloud, Rackspace Cloud, Amazon EC2, IBM
Softlayer, Arch Linux, FrugalWare, Fedora,
openSUSE, CRUX Linux
Microsoft Windows*, Apple OSX*,
Raspberry PI*
docker.io 17
autark
Ein Docker Container enthält alles nötige:
● Minimal Base OS (kein Kernel)
● Libraries / Frameworks
● Application Code + Data
Ein Container kann überall da laufen wo auch
Docker installiert werden kann
docker.io 18
Docker Basics
Fragen soweit ?
Praxis
docker.io 21
Praxis
Wir
bauen
uns
Docker
Container
Docker unter
Ubuntu installieren
docker.io 23
Docker unter Ubuntu installieren
# Docker unter Ubuntu 13.xx / 14.04 LTS installieren
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 
--recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
$ sudo sh -c "echo deb http://get.docker.io/ubuntu docker main 
> /etc/apt/sources.list.d/docker.list"
$ sudo apt-get update
$ sudo apt-get install -y lxc-docker
# Docker Installation prüfen
$ sudo docker info
$ sudo docker version
# Docker Verzeichnis – hier liegt alles
$ sudo ls -l /var/lib/docker/
# Docker Usage anzeigen lassen
$ sudo docker
Ein einfaches „Hello
World“ Beispiel
docker.io 25
Ein einfaches „Hello World“ Beispiel
# ein fertiges Image aus dem Docker Index ziehen
$ sudo docker pull ubuntu
# alle lokalen Images auflisten
$ sudo docker images
# einen Container erzeugen, Applikation
# „/bin/echo“ laufen lassen und am Ende den
# Container wieder entfernen
$ sudo docker run --rm ubuntu 
/bin/echo „Hello World“
Grundlegende
Docker Befehle
docker.io 27
Grundlegende Docker Befehle
docker search <TERM>
docker start | stop | kill | restart <CID>
docker ps [-a]
docker images
docker pull <IMAGE>[:TAG]
docker run [-i] <IMAGE> [<CMD>]
docker build <PATH> | <URL> | -
docker rm <CID>
docker rmi <IMAGE>
docker save <IMAGE>
docker load
Dockerfile
docker.io 29
Dockerfile
# sshd
#
# VERSION 0.0.1
FROM ubuntu
MAINTAINER Thatcher R. Peskens "thatcher@dotcloud.com"
# make sure the package repository is up to date
RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe"
> /etc/apt/sources.list
RUN apt-get update
RUN apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:screencast' |chpasswd
EXPOSE 22
CMD /usr/sbin/sshd -D
docker.io 30
Container aus dem Dockerfile bauen
# Dockerfile erzeugen (Inhalt siehe letzte Folie)
$ vi Dockerfile
# Docker Image bauen, temporäre Zwischenbuilds am Ende verwerfen
$ sudo docker build --rm -t img_sshd .
# lokale Docker Images auflisten
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED
VIRTUAL SIZE
img_sshd latest 9b8cbe62ff21 2 minutes ago
313.6 MB
# neuen Container aus Image erzeugen und als Daemon starten
$ sudo docker run -d -P --name ct_sshd img_sshd
d25a3b457f1164abc0ab29c30581be3ac7b5594290ceece772bf0f4309c2
28f8
docker.io 31
SSH Connect in den Container
# Container auflisten
$ sudo docker ps --no-trunc=true
CONTAINER ID IMAGE
COMMAND CREATED STATUS PORTS
NAMES
d25a3b457f1164abc0ab29c30581be3ac7b5594290ceece772bf0f4309c2
28f8 img_sshd:latest /bin/sh -c '/usr/sbin/sshd -D' 4 minutes ago
Up 3 minutes 0.0.0.0:49153->22/tcp ct_sshd
# Container → Host Port Mapping finden
$ sudo docker port ct_sshd 22
0.0.0.0:49153
# SSH Connect via local Port forwarding (passwd = „screencast“)
$ ssh -lroot -p49153 localhost
# SSH Connect via Container IP
$ sudo docker inspect ct_sshd | grep IPAddress
Container & Images
transferieren
docker.io 33
Container & Images transferieren
Docker Images:
$ sudo docker save img_sshd > save.tar
$ scp save.tar Dockerfile newhost:
newhost:$ sudo docker load < save.tar
newhost:$ sudo docker run -d -P --name ct_sshd img_sshd
Docker Containers:
$ sudo docker export ct_sshd > export.tar
$ scp export.tar Dockerfile newhost:
newhost:$ cat export.tar | sudo docker import - 
img_newsshd
newhost:$ sudo docker run -d -P --name ct_newsshd 
img_newsshd
Noch Fragen ?
Quellennachweise
und Links
docker.io 36
Quellennachweise
Quellennachweise:
www.docker.io
Images:
www.docker.io
www.jundiai.com.br
ruhrnachrichten.de
gist.github.com/simota/9043141
slides.com/stevenborrelli/docker
docker.io 37
Links
Links:
Docker Website:
http://www.docker.io/
Docker Dokumentation:
http://docs.docker.io/
Docker Command Line Reference:
http://docs.docker.io/reference/commandline/cli/
Lightweight Linux for Docker:
http://boot2docker.io/
38
Vielen Dank für Ihre Aufmerksamkeit
Kontakt
Jürgen Brunk
Systems Engineer
inovex GmbH
Office München
Valentin-Linhof Str. 2
D-81829 München
Mobil: 0173 3181 003
Mail: juergen.brunk@inovex.de

docker.io - Secure And Portable Containers Made Easy

  • 1.
    docker.io Secure And Portable ContainersMade Easy Jürgen Brunk München, 30.04.2014
  • 2.
    docker.io 2 1.Was istDocker ? 2.Was sind Container ? 3.Warum Docker ? 4.Architektur 5.Praxis 6.Docker unter Ubuntu installieren 7.Ein einfaches „Hello World“ Beispiel 8.Grundlegende Docker Befehle 9.Dockerfile 10.Container & Images transferieren Agenda
  • 3.
  • 4.
    docker.io 4 Was istDocker ? Das Docker* Framework erlaubt es (Web-) Applikationen in schlanke, autarke und portable Umgebungen, sog. Container, zu verpacken *) engl. Hafenarbeiter
  • 5.
  • 6.
    docker.io 6 Was sindContainer ? Operating system–level virtualization: z.B. jails, openvz, lxc, ... Abgeschottete Teilmenge des Hostsystems (getrennter Process-, Netzwerk-, I/O-Raum) Quasi „chroot on Steroids“
  • 7.
  • 8.
  • 9.
    docker.io 9 Warum Docker?(The Matrix from Hell)
  • 10.
    docker.io 10 Vorteile fürDEV Einmal gebaut – läuft überall ! Saubere, sichere, portable Laufzeitumgebung für die Application Kein Problem mit Dependencies, Paketen etc. während des Deployments Jede Application ist ein isolierter Container mit ggf. unterschiedlichen SW-Versionen
  • 11.
    docker.io 11 Vorteile fürOPS Einmal konfiguriert – läuft überall ! Keine Inkonsistenzen mehr zwischen Dev-, QA-, Stage-, Prod-Umgebung Schnelleres Deployment (continuous deployment / continuous integration) Schlanke Container – bessere Performance als VM's
  • 12.
    docker.io 12 Warum esfunktioniert (Trennung der Zuständigkeiten) Entwickler: Kümmert sich um das was innerhalb des Containers ist: ● sein Code / Daten ● seine Libs / Frameworks ● sein Package Manager Alle Linux Server sehen gleich aus Admin: Kümmert sich um das was ausserhalb des Containers ist: ● Logging / Backup ● Remote Access ● Network Config Alle Container starten und stoppen gleich
  • 13.
  • 14.
  • 15.
    docker.io 15 schlank Docker* basiertauf Linux Containern LXC* Minimaler Overhead (cpu/io/network) Verwendet layered Filesystem *) Due to a bug in LXC, Docker works best on the 3.8 kernel
  • 16.
    docker.io 16 portabel Läuft aufjedem System das LXC unterstützt Ubuntu, Debian*, RHEL, Gentoo, Google Cloud, Rackspace Cloud, Amazon EC2, IBM Softlayer, Arch Linux, FrugalWare, Fedora, openSUSE, CRUX Linux Microsoft Windows*, Apple OSX*, Raspberry PI*
  • 17.
    docker.io 17 autark Ein DockerContainer enthält alles nötige: ● Minimal Base OS (kein Kernel) ● Libraries / Frameworks ● Application Code + Data Ein Container kann überall da laufen wo auch Docker installiert werden kann
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
    docker.io 23 Docker unterUbuntu installieren # Docker unter Ubuntu 13.xx / 14.04 LTS installieren $ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9 $ sudo sh -c "echo deb http://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list" $ sudo apt-get update $ sudo apt-get install -y lxc-docker # Docker Installation prüfen $ sudo docker info $ sudo docker version # Docker Verzeichnis – hier liegt alles $ sudo ls -l /var/lib/docker/ # Docker Usage anzeigen lassen $ sudo docker
  • 24.
  • 25.
    docker.io 25 Ein einfaches„Hello World“ Beispiel # ein fertiges Image aus dem Docker Index ziehen $ sudo docker pull ubuntu # alle lokalen Images auflisten $ sudo docker images # einen Container erzeugen, Applikation # „/bin/echo“ laufen lassen und am Ende den # Container wieder entfernen $ sudo docker run --rm ubuntu /bin/echo „Hello World“
  • 26.
  • 27.
    docker.io 27 Grundlegende DockerBefehle docker search <TERM> docker start | stop | kill | restart <CID> docker ps [-a] docker images docker pull <IMAGE>[:TAG] docker run [-i] <IMAGE> [<CMD>] docker build <PATH> | <URL> | - docker rm <CID> docker rmi <IMAGE> docker save <IMAGE> docker load
  • 28.
  • 29.
    docker.io 29 Dockerfile # sshd # #VERSION 0.0.1 FROM ubuntu MAINTAINER Thatcher R. Peskens "thatcher@dotcloud.com" # make sure the package repository is up to date RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list RUN apt-get update RUN apt-get install -y openssh-server RUN mkdir /var/run/sshd RUN echo 'root:screencast' |chpasswd EXPOSE 22 CMD /usr/sbin/sshd -D
  • 30.
    docker.io 30 Container ausdem Dockerfile bauen # Dockerfile erzeugen (Inhalt siehe letzte Folie) $ vi Dockerfile # Docker Image bauen, temporäre Zwischenbuilds am Ende verwerfen $ sudo docker build --rm -t img_sshd . # lokale Docker Images auflisten $ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE img_sshd latest 9b8cbe62ff21 2 minutes ago 313.6 MB # neuen Container aus Image erzeugen und als Daemon starten $ sudo docker run -d -P --name ct_sshd img_sshd d25a3b457f1164abc0ab29c30581be3ac7b5594290ceece772bf0f4309c2 28f8
  • 31.
    docker.io 31 SSH Connectin den Container # Container auflisten $ sudo docker ps --no-trunc=true CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d25a3b457f1164abc0ab29c30581be3ac7b5594290ceece772bf0f4309c2 28f8 img_sshd:latest /bin/sh -c '/usr/sbin/sshd -D' 4 minutes ago Up 3 minutes 0.0.0.0:49153->22/tcp ct_sshd # Container → Host Port Mapping finden $ sudo docker port ct_sshd 22 0.0.0.0:49153 # SSH Connect via local Port forwarding (passwd = „screencast“) $ ssh -lroot -p49153 localhost # SSH Connect via Container IP $ sudo docker inspect ct_sshd | grep IPAddress
  • 32.
  • 33.
    docker.io 33 Container &Images transferieren Docker Images: $ sudo docker save img_sshd > save.tar $ scp save.tar Dockerfile newhost: newhost:$ sudo docker load < save.tar newhost:$ sudo docker run -d -P --name ct_sshd img_sshd Docker Containers: $ sudo docker export ct_sshd > export.tar $ scp export.tar Dockerfile newhost: newhost:$ cat export.tar | sudo docker import - img_newsshd newhost:$ sudo docker run -d -P --name ct_newsshd img_newsshd
  • 34.
  • 35.
  • 36.
  • 37.
    docker.io 37 Links Links: Docker Website: http://www.docker.io/ DockerDokumentation: http://docs.docker.io/ Docker Command Line Reference: http://docs.docker.io/reference/commandline/cli/ Lightweight Linux for Docker: http://boot2docker.io/
  • 38.
    38 Vielen Dank fürIhre Aufmerksamkeit Kontakt Jürgen Brunk Systems Engineer inovex GmbH Office München Valentin-Linhof Str. 2 D-81829 München Mobil: 0173 3181 003 Mail: juergen.brunk@inovex.de