Sonntag, 20. September 2015

Docker: Get started with images


Get started with images (https://docs.docker.com/userguide/dockerimages/)
  • docker images: Auflistung aller verfügbaren Images auf dem Host-Rechner
  • docker pull [Image]: Download eines neuen Images. Im Guide steht, dass würde schneller gehen, als über den run Befehl, dass kann ich aber nicht bestätigen. Es ist wohl eher so, dass der pull Befehl in dem run Befehl enthalten ist, wenn der entsprechende Container noch nicht vorhanden ist.
  • Um ein passendes Image zu finden, gibt es zwei Möglichkeiten:
    • Über die Docker Hub Website: https://hub.docker.com/
      Hier gibt man die Bezeichnung des gesuchten Images ein und gibt im Terminal dann entsprechend den „Docker pull command“ ein
    • Es kann aber auch direkt über das Terminal gesucht werden mit der Eingabe docker search [Suchbegriff]. Allerdings ist auffällig, dass die beiden Suchen nicht das gleiche Ergebnis ergeben. Die Suche nach „sinatra“ im Docker Hub ergab 1400 Ergebnisse, bei der Suche im Terminal kam ich gerade mal auf 20 Ergebnisse. Und das Image „Training/sinatra“ war nicht dabei. Auffällig war auch, dass nur „Automated Build“ Images angezeigt wurden. Vielleicht finde ich ja später noch irgendwelche Informationen dazu..
  • Es gibt unterschiedliche Arten von Images: Die Basics, die von Docker.Inc bereitgestellt werden. Zu erkennen sind diese an den Bezeichnern „base“ oder „root“. Dann gibt es die noch die User-kreierten Images, die immer den Usernamen mit einem Slash voran gestellt im Bezeichner haben. Die User sind alle Mitglieder im Docker Hub und verantwortlich für die Erzeugung und Wartung des Images
Creating your own image
Es gibt zwei Möglichkeiten ein Image selbst zu erzeugen: Man erweitert ein bestehendes, oder man erzeugt ein neues unter zu Hilfename von „Dockerfile“
  • Erweiterung eines bestehendes Images: Zuerst wird das zu erweiternde Image in einem Container geöffnet. Dann wird es entsprechend angepasst (Installation neuer Software, etc). Danach wird der Container verlassen. Mit dem Befehl docker commit -m [„Kommentar zur Erläuterung“] -a [„Author“] \ [ID des veränderten Containers] [Name des neuen Images] („docker commit -m „Addes json gem“ -a „Kate Smith“ \ 0b26162vkwfhoij ouruser/sinatra:v2“) wird ein neues Images lokal auf dem Hostrechner erzeugt.
  • Neues Image erstellen: Um ein neues Image zu erstellen wird ein Dockerfile benötigt. Dafür kann es sinnvoll sein, erst einmal einen Ordner für das neue Image anzulegen (mkdir [Ordner]). Dann wird ein Dockerfile angelegt (in der Anleitung wurde dafür der „touch“ Befehl verwendet: touch Dokerfile). Danach diese Textdatei öffnen und die benötigten Schritte zur Erzeugung des Images eintragen. Im Beispiel wurde ein Image auf Grundlage von Ubunut14.04 erzeugt, in das anschließend ruby und sinatra installiert wird. Die Datei speichern und schließen. Mein Beispiel-Image wurde nach folgendem Skript erzeugt: # This is a comment
    FROM ubuntu:14.04
    MAINTAINER Papermouse <papermouse1973@gmail.com>
    RUN apt-get update && apt-get install -y ruby ruby-dev
    RUN gem install sinatra

    Abschließend wird das Image mit folgender Kommandozeile erzeugt: docker build -t ouruser/sinatra:v2 . Ganz Wichtig ist der Punkt, der definiert, dass das Dockerfile aus dem aktuellen Pfad genommen werden soll. Es kann aber auch ein konkreter Pfad angegeben werden. Die Erzeugung des Images nimmt einiges an Zeit in Anspruch und es kommt auch zu Fehlermeldungen, die aber offensichtlich nicht wichtig sind. Nun können wir das Image, welches wiederum lokal auf dem Hostrechner liegt, starten.
  • In der Beschreibung wird noch erläutert, dass man Tags setzen kann: docker tag. Das habe ich erst mal nur zur Kenntnis genommen. Außerdem werden digest erwähnt. Die Thematik habe ich GARNICHT verstanden. Weder die Bedeutung, noch alles weitere. Bei Gelegenheit mal rechieren.
  • Dann habe ich das Image zum Hub geschickt. Dabei musste ich feststellen, dass ich hier wieder das sudo davor setzen muss. Sonst wird mir der Zugriff verweigert. In diesem Zusammenhang habe ich aus dem Dokerfile noch ein Image erzeugt, welches den Namen papermouse/sinatra bekam. Dieses Mal ging das Erstellen ganz schnell. sudo docker push papermouse/sinatra
  • Entfernen eines Image vom Host: docker rmi [Name des Image] („docker rmi ouruser/sinatra“). Bei meinen Versuchen auf meinem Rechner Images zu löschen, bekam ich bei JEDEM Image die Meldung, dass dieses noch von einem anderen Container verwendet wird. Löschen mit dem Flag -f (force) geht. Aber woher kommen die Meldungen? Selbst das Hello-World Image kann nicht einfach gelöscht werden und das habe ich ja  nicht weiter verwendet.

Keine Kommentare:

Kommentar veröffentlichen