Docker - erste Schritte

mastercad
18.10.2015 19:22:20
Docker ist eine Technik um den Kernel des aktuellen Betriebsystems (zur Zeit nur Linux) für eine Art virtuelle Maschinen zu verwenden.

Anders als bei Vagrant und anderen VM Lösungen wird hier eine Technik angewandt, die auf Linux Containern basiert (LXC). Diese Technik hielt mit Version 2.6.24 Einzug in den Kernel und wurde seit dem größten Teils von Administratoren genutzt. Sie benutzt den Kernel und den Host als solches quasi als Basis und somit ist es nicht mehr notwendig, ständig neue, dicke, resourcenfressende Images zu erstellen. Man lädt ein Image aus den Repos von Docker und erstellt daraus beliebig viele Container in denen man gekapselt seine Modifikationen vornehmen kann.


Installiern kann man Docker auf 2 Arten:

1. Möglichkeit - über die Repos der jeweiligen Distribution:


BASH code

  1. sudo apt-get install docker.io


2. Möglichkeit - über die Repos von docker.com (hier beispielhaft für Ubuntu)


BASH code

  1. apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D


die Datei /etc/apt/sources.list.d/docker.list editieren oder anlegen und folgende Einträge einfügen:


BASH code

  1. # Ubuntu Precise
  2. deb https://apt.dockerproject.org/repo ubuntu-precise main
  3. # Ubuntu Trusty
  4. deb https://apt.dockerproject.org/repo ubuntu-trusty main
  5. # Ubuntu Vivid
  6. deb https://apt.dockerproject.org/repo ubuntu-vivid main
  7. # Ubuntu Wily
  8. deb https://apt.dockerproject.org/repo ubuntu-wily main


diese Änderungen speichern und dann folgendes ausführen:


BASH code

  1. sudo apt-get update
  2. sudo apt-get purge lxc-docker*
  3. sudo apt-cache policy docker-engine


nun installieren wir einen generischen Kernel:


BASH code

  1. sudo apt-get install linux-image-generic-lts-trusty


ist das abgeschlossen, rebooten wir

danach installieren wir docker:


BASH code

  1. sudo apt-get install docker-engine


testen kann man die Funktionalität jetzt per


BASH code

  1. sudo docker run hello-world


dadurch wird ein schmales Image herunter geladen aus den Docker Repose und auf der Konsole "Hello World!" ausgegeben.

um jetzt mit Docker zu arbeiten gibt es wiederum verschiedene Möglichkeinte, ich möchte hier auf 2 eingehen: die Interaktive und die arbeit mit einem Dockerfile

1. Möglichkeit - die Interaktive:

hierbei wird mit Docker ausschließlich über die Konsole gearbeitet, wofür es eine umfangreiche Palette an Befehlen gibt, auf die wichtigsten möchte ich hier eingehen:

als erstes laden wir uns ein Image von Docker auf den Rechner, um eine Liste aufzurufen, bzw. zu suchen, welche Images auf Docker angeboten werden, führt man folgenden Befehl aus (ich suche hier z.b. alle verfügbaren Ubuntu Versionen):

BASH code

  1. sudo docker search ubuntu



nun haben wir eine Liste ähnlich folgender:

BASH code

  1. NAME DESCRIPTION STARS OFFICIAL AUTOMATED
  2. ubuntu Ubuntu is a Debian-based Linux operating s... 2436 [OK]
  3. ubuntu-upstart Upstart is an event-based replacement for ... 39 [OK]
  4. torusware/speedus-ubuntu Always updated official Ubuntu docker imag... 25 [OK]
  5. sequenceiq/hadoop-ubuntu An easy way to try Hadoop on Ubuntu 23 [OK]
  6. tleyden5iwx/ubuntu-cuda Ubuntu 14.04 with CUDA drivers pre-installed 18 [OK]
  7. ubuntu-debootstrap debootstrap --variant=minbase --components... 17 [OK]
  8. guilhem/vagrant-ubuntu 11 [OK]
  9. rastasheep/ubuntu-sshd Dockerized SSH service, built on top of of... 11 [OK]
  10. n3ziniuka5/ubuntu-oracle-jdk Ubuntu with Oracle JDK. Check tags for ver... 4 [OK]
  11. sameersbn/ubuntu
  12. 4 [OK]
  13. fike/ubuntu-postgresql PostgreSQL 9.4 beta until 9.0 version runn... 4 [OK]
  14. nimmis/ubuntu This is a docker images different LTS vers... 3 [OK]
  15. nuagebec/ubuntu Simple always updated Ubuntu docker images... 3 [OK]
  16. maxexcloo/ubuntu Docker base image built on Ubuntu with Sup... 2 [OK]
  17. cpuguy83/ubuntu 1 [OK]
  18. seetheprogress/ubuntu Ubuntu image provided by seetheprogress us... 1 [OK]
  19. densuke/ubuntu-jp-remix Ubuntu Linuxの日本語remix風味です 1 [OK]
  20. isuper/base-ubuntu This is just a small and clean base Ubuntu... 1 [OK]
  21. sylvainlasnier/ubuntu Ubuntu 15.04 root docker images with commo... 1 [OK]
  22. zoni/ubuntu 0 [OK]
  23. rallias/ubuntu Ubuntu with the needful 0 [OK]
  24. vicamo/ubuntu-phablet-jiexi Dockerfile for developing Ubuntu JieXi PDK. 0 [OK]
  25. esycat/ubuntu Ubuntu LTS 0 [OK]
  26. densuke/ubuntu-supervisor densuke/ubuntu-jp-remix:trusty 上で supe... 0 [OK]
  27. tvaughan/ubuntu https://github.com/tvaughan/docker-ubuntu 0 [OK]


ich möchte das aktuelle Ubuntu herunterladen (mit diesem befehl kann man ebenso auch bereits heruntergeladene Images updaten) und gebe dazu folgendes ein:


BASH code

  1. sudo docker pull ubuntu:latest


mit folgendem Befehl können wir listen, welche Images sich aktuell alle auf unserer Platte befinden, bzw. für Docker registriert sind:

BASH code

  1. sudo docker images


dabei kommt folgende ergebnis:


BASH code

  1. ubuntu latest 0a17decee413 6 days ago 188.4 MB


ebenso wird oft ein


BASH code

  1. sudo docker run ubuntu:latest


verwendet. Mit diesem Befehl lädt man das angegebene Image herunter und erstellt gleichzeitig einen Container.

Womit wir beim nächsten Punkt wären, den Containern. Diese Container sind quasi nur Kapselungen von Installationen, nutzen aber alle ein gemeinsames Image. Führt man run aus, wird immer ein neuer Container erstellt.

Hat man run bereits ausgeführt, statt pull, wurde bereits ein Container erstellt und dieser Container ist einsatzbereit. Eine Liste aller auf dem System verfügbaren Container und ihres Status kann man per


BASH code

  1. sudo docker ps -a


erhalten. Dabei erhält man eine Liste ähnlich folgender:


BASH code

  1. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  2. 7c2d7495a097 ubuntu:latest "/bin/bash" 35 minutes ago Exited (0) 35 minutes ago naughty_einstein
  3. 2b6e59e6ed21 ubuntu "/bin/bash" 42 minutes ago Exited (0) 42 minutes ago elegant_hoover
  4. a231996fd887 ubuntu "/bin/bash" 23 hours ago Up 12 hours 0.0.0.0:666->80/tcp nginx
  5. 406fb47a89ba ubuntu "/bin/bash" 29 hours ago Exited (0) 29 hours ago dns
  6. 74ee3b750450 ubuntu:14.10 "/bin/bash" 37 hours ago Exited (0) 11 hours ago dhcp


ließe man hier das -a weg, bekäme man nur die Liste aller derzeit laufenden Container.

Einen Container starten können wir mit


BASH code

  1. sudo docker start 7c2d7495a097


praktischer Weise unterstüzt docker das tabben und daher muss man sich die IDs weder
merken noch abtippen, man kann die Container auch umbenennen, wozu wir gleich noch kommen.

um uns mit dem Contrainer zu verbinden geben wir


BASH code

  1. sudo docker attach 7c2d7495a097


ein. Damit kann man sich einloggen und auf und mit dem Container arbeiten, wie per SSH Connection zu einem Remote Server. Verlassen kann man ihn wieder mit Strg+D oder mit der Eingabe von exit. Man kann nun auf diesem Container nun installieren und konfigurieren, wie es einem gefällt.

Will man diesen Container als Basis für die anderen Installationen nehmen, kann man durch die Eingabe von


BASH code

  1. sudo docker commit 7c2d7495a097 ubuntu:latest


die aktuellen Änderungen in das Image übertragen. Man erhält dadurch eine neue Container ID.