Docker auf Debian Buster installieren + Portainer

Inhalte

Docker erleichtert nicht nur den Entwicklern die Arbeit. Sondern auch allen Systemadministratoren, die Container oder VMs regelmäßig deployen müssen. Docker ist eine containerbasierte Virtualisierungslösung und ersetzt bzw. verbessert die alte Linux Container Lösungen wie LXC. Docker ist dabei ressourcenschonender als herkömmliche Virtualisierungswege und ist dabei noch komplett Quelloffen. Docker ist auch gleichzeitig das größte GitHub Projekt und wird ständig weiterentwickelt. Grund genug, um jetzt ein Beitrag zu schreiben.

Was ist Docker und wofür verwendet man es?

Anders als bei einer herkömmliche Virtualisierung(VM), dass auf dem Hypervisor bzw. auf dem Host System verschiedene Gastsysteme installiert, benutzt Docker Container, die auf einen Docker Engine hören. Die Anwendungen werden als isolierte Prozesse auf dem Host-System ausgeführt und brauchen daher nur wenig Ressourcen. Anders als bei der herkömmlicher Virtualisierung (VMs), braucht ein Docker Container nicht das komplette Betriebssystem zu laden, sodass Docker schneller und portierbarer ist. Der Docker Container benutzt mithilfe der Docker Engine den Kernel des Hostsystems. D.h. Ein komplettes Betriebssystem wird für ein einzelnen Container nicht mehr gebraucht. Das Bild verdeutlicht es. Auch ist ein Docker Container, anders als eine VM, nicht gigantisch groß. Nur die Libarys und die entsprechende Anwendung ist in einem Container drinnen. Doch Docker hat noch mehr anzubieten. Docker besitzt ein großes vorgefertigtes Repository/Registry, um fertige Container zu laden. Das Docker Hub. Das Repository ist standardmäßig in Docker vorkonfiguriert und ermöglicht aus hunderten vorgefertigten Vorlagen, ein eigenen fest individuelles Image zu erstellen.

Docker vs. herkömliche VM

Docker kann noch vieles vieles mehr….Doch genug mit der Theroie. Wenn ihr mehr wissen wollt, dann schaut auch mal bei Wikipedia oder auf der Docker Webseite vorbei 🙂

Klassische Installation auf Debian Buster

Um Docker zu installieren müssen wir als erstes unser Betriebssystem aktualisieren und die standard Tools wie curl oder Stammzertifikate ggf. updaten oder nachinstallieren.

sudo apt update && apt upgrade -y
apt install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common

Nach der Installation der Tools kann es los gehen. Wir fügen nun das offizielle Repository von Docker auf dem Host-System hinzu.

curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian buster stable"
apt update

Sollte kein Fehler auftauchen, haben wir nun die Grundlagen geschaffen. Nun installieren wir die Docker Engine:

apt install -y docker-ce docker-ce-cli containerd.io

Fertig! Nun haben wir Docker in der Grundkonfiguration installiert. Mit docker version können wir überprüfen, ob die Engine auch wirklich erfolgreich installiert worden ist. Wird alles richtig angezeigt, können wir nun ein Docker Container erstellen. Dies machen wir jetzt auch. Mithilfe des Hallo-World Image, können wir feststellen, ob Docker auch richtig funktioniert. Wir erstellen nun ein HalloWorld-Container.

docker run hello-world

Der Befehl docker run <imagenamen> erzeugen wir nun ein Container. Er sucht lokal nach dem Image hello-world und wenn nichts gefunden worden ist, wird es das Image aus dem DockerHub heruntergeladen und gestartet. Die Ausgabe des Containers könnte so aussehen:

root@Docker:~# docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete
Digest: sha256:e7c70bb24b462baa86c102610182e3efcb12a04854e8c582838d92970a09f323
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

Sollten wir diese Ausgabe sehen, hat alles wunderbar funktioniert. Damit ist Docker erfolgreich auf dem System installiert.

Docker Composer

Nun haben wir Docker mit der Engine auf unserem Debian Buster installiert und können schon jetzt Container erstellen und starten. Mithilfe von Ports können wir vom Host aus in den Container reinhorchen. Doch Docker kann noch viel mehr. Wie wäre es, wenn wir eine Datei mit unseren Anforderungen des Container definieren und Docker angeben, dass es daraus ein Container erstellen soll? Genau das erledigt uns der Docker Composer. Der große Vorteil des Composer ist es jedoch auch, dass mehrere Anwendungen aus verschiedenen Containern zu einem Container verbunden werden können. Dies erleichert später komplexe Container Szenarien. Erst mit dem Docker Composer, macht es Docker zu einem sehr leicht konfigurierendes und mächtiges Virtualisierungs-Tool. Die Installation ist superleicht. Legen wir Los..Wir holen uns die letzte Version des Composer aus dem GitHub Projekts:

curl -s https://api.github.com/repos/docker/compose/releases/latest | grep browser_download_url | grep docker-compose-Linux-x86_64 | cut -d '"' -f 4 | wget -qi -

und verschieben die Binary in das bin Verzeichnis und machen es ausführbar.

mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

Fertig. Nun testen wir den Composer indem wir eine Datei Namens docker-compose.yml erstellen mit folgendem Inhalt.

version: '3'
services:
  web:
    image: nginx:latest
    ports:
     - "8080:80"
    links:
     - php
  php:
    image: php:7-fpm

Beschreibung der Datei:

  • version: Der Composer mit der Version 3 wird benutzt
  • image: Das Nginx(Webserver) wird als Grundimage benutzt. Falls nicht vorhanden, wird es aus dem Docker Hub gedownlaodet.
  • ports: Vom Hostsystem aus erreichen wir den Container mit dem Port 8080. Alle Anfragen werden in den Container weitergeletet intern im Container wird der Port 80 benutzt.
  • links: Verknüpfung zum anderem Container
  • php – Neuer Container mit dem php:7-fpm image

Nun starten wir den Composer mit dem Docker Composer Befehl.

docker-compose up -d

Nun liest der Composer die Datei ein und beginnt anhand der Konfiguration ein Container zu erstellen. Rufen wir die HostIP Adresse mit dem Port 8080 auf, so werden wir die Standardseite des Nginx Server sehen.

Mit docker ps können wir alle Docker Container anschauen. Bsp:

 docker ps
CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS              PORTS                                            NAMES
46aca9a07640        collabora/code:latest   "/bin/sh -c 'bash st…"   23 hours ago        Up 23 hours         0.0.0.0:9980->9980/tcp                           collabory_app_3
6945b9dc1053        ghost:latest            "docker-entrypoint.s…"   3 days ago          Up 25 hours         0.0.0.0:32768->2368/tcp                          Ghost
7e2ff07f69c5        portainer/portainer     "/portainer"             3 days ago          Up 25 hours         0.0.0.0:8000->8000/tcp, 0.0.0.0:9000->9000/tcp   portainer

Portainer installieren

Wunderbar! Bis zu diesem Schritt haben wir nun ein funktionierenden Docker Host + Composer installiert und können nun per CLI oder per File Container erstellen. Doch es geht noch einfacher! Wir installieren nun eine grafische Oberfläche für Docker. Mithilfe der Gui können wir dann später sehr leicht Container von einer Weboberfläche erstellen und managen. Auch können wir mehrere Host-Systeme zu einem Super Cluster verbinden. Da die Gui auch nur ein Docker Container ist, können wir dies sehr leicht erstellen.

docker volume create portainer_data
docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce

Wir erstellen mit docker volume ein Speicherplatzbereich auf dem Host System. Danach starten wir den Container mit den entsprechenden Parametern. Wichtig ist, dass der Paramenter -v /var/run/docker.sock auch wirklich zu der von Docker ausgeben socket hinzeigt. Auch das Volume, dass wir gerade erstellt haben, binden wir mit mit dem Paramenter -v ein. Nach kurzer zeit, können wir uns dann auf die Weboberfläche einloggen. Dazu loggen wir uns mit der Host IP und dem Port 9000 in Portainer ein und können dann als ersten Step ein Adminstrationspasswort vergeben. Im darauffolgenden Schritt wählen wir die local Maschine als Host/Endpoint aus und können dann alle Container sehen und bzw. verwalten.

Fertig! Damit hätten wir erst einmal alle Grundlagen von Docker durch. Viel Spaß beim ausprobieren und nachbauen.

Wie hilfreich war dieser Beitrag?

Klicke auf die Sterne um zu bewerten!

Durchschnittliche Bewertung 5 / 5. Anzahl Bewertungen: 7

Bisher keine Bewertungen! Sei der Erste, der diesen Beitrag bewertet.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert