Stolpersteine bei Containern

Wie bei jedem Tool gibt es ein paar Stolpersteine. Häufig sind es nur Kleinigkeiten, die einen beinahe in den Wahnsinn treiben und überlegen lassen, ob nicht doch die Suche nach dem Steckdosenverteiler die bessere Lösung gewesen wäre.

Stellenmarkt
  1. Software Engineer DevOps (m/w/d)
    ASM Assembly Systems GmbH & Co. KG, München
  2. Gruppenleiter für Embedded Softwareentwicklung (m/w/d)
    Endress+Hauser Conducta GmbH+Co. KG, Gerlingen (bei Stuttgart)
Detailsuche

Container werden standardmäßig nicht automatisch ausgeführt. Wenn der Host neu gestartet wird, werden die Container nicht gestartet. Es sei denn, es wird explizit angegeben. Dazu muss eine Restart Policy definiert werden. Diese gibt an, wann der Container neu gestartet werden soll (zum Beispiel bei einem Fehler). Meistens wird hier der Wert always verwendet. Das bedeutet, der Container wird immer dann neu gestartet, wenn er nicht läuft - also auch nach einem Neustart des Hosts.

Der Container blockiert die Bash

Wenn ein Container gestartet wird, wird er standardmäßig im Vordergrund ausgeführt. Das bedeutet, dass die Konsole, in der man sich gerade befindet, an den Prozess angehängt wird. Erst wenn der Container beendet wird, wird die Konsole wieder freigegeben. Meistens möchte man sein Betriebssystem aber weiterverwenden und die Ausführung soll im Hintergrund laufen. Mit dem Parameter -d wird Docker das mitgeteilt.

Ein neues Image verwenden

Beim Erstellen eines neuen Containers mit dem Kommando docker run wird nur geprüft, ob das angegebene Image bereits lokal vorhanden ist. Ist es nicht vorhanden, wird es von der Registry (sofern nicht anders angegeben, ist das Docker Hub) heruntergeladen. Ist aber bereits ein Image vorhanden, wird das auch verwendet. Speziell beim Erstellen eigener Images kann das Frust verursachen, weil immer nur die alte Version ausgeführt wird. Mit docker pull kann das neue Image heruntergeladen werden.

Docker pull - Daten weg?

Golem Karrierewelt
  1. Linux-Systemadministration Grundlagen: virtueller Fünf-Tage-Workshop
    14.-18.11.2022, Virtuell
  2. Entwicklung mit Unity auf der Microsoft HoloLens 2 Plattform: virtueller Zwei-Tage-Workshop
    07./08.06.2022, Virtuell
Weitere IT-Trainings

Wie erwähnt, handelt es sich um Images, die als Container ausgeführt werden. Diese Images beinhalten alles, was für den Betrieb notwendig ist. Das betrifft auch eventuelle Files, die angelegt werden, wie bei einem Datenbank-Server. Wenn nicht anders angegeben, werden die Dateien im Container selbst abgelegt. Wird von einem Dienst ein aktuelleres Image verwendet (durch docker pull), wird dieses neu heruntergeladen.

Die Datenbank-Files sind darin nicht enthalten und alle Daten sind weg. Über den Parameter -v kann ein Volume oder ein Verzeichnis des Host-Computers mit dem Container verbunden werden. Die Files können dann dort abgelegt werden und bleiben bestehen bzw. können von dort gesichert werden.

Zugriff auf den Dienst von außen

Die meisten Container bieten eine Schnittstelle nach außen. Über diese kann der Dienst konsumiert werden. Bei einem Webserver wäre das beispielsweise der Port 80, bei MySQL der Port 3306. Wird ein Mapping für den Host-Computer nicht explizit angegeben, versucht Docker selbst einen Port zu finden. Wenn der Containerport am Host noch verfügbar ist, wird dieser auch verwendet.

Das bedeutet, auf die MySQL-Instanz im Container kann zugegriffen werden, indem man sich mit dem Port 3306 des Host-Computers verbindet. Die Ports werden weitergeleitet. Wenn der Port allerdings nicht mehr frei ist, wird Docker einen anderen verwenden. Mit dem Parameter -p kann ein zu verwendender Port definiert werden.

Skalierbare Container-Infrastrukturen: Das Handbuch für Admins & DevOps-Teams, inkl. Docker und Container-Orchestrierung mit Kubernetes und OpenShift

Dockerfile

Images lassen sich auch ohne Weiteres selbst erstellen. Dafür notwendig ist ein File mit dem Namen Dockerfile. Die Befehle in diesem File werden zum Erstellen der Reihe nach abgearbeitet. Ein kleines Beispiel: ein Dockerfile, das verwendet werden kann, um eine .NET-5.0-Webapplikation in einem Linux-Container laufen zu lassen.

Meist wird man mit einem Base Image beginnen - also einem nackten Image, welches nur ein minimales Betriebssystem zur Verfügung stellt. Hier soll beispielsweise eine .NET-5-Webapplikation in einem Linux-Container bereitgestellt werden.

  1. FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base

Um nicht immer den gesamten Pfad angeben zu müssen, kann während des Erstellungsvorgangs der Ordner im Container gewechselt werden.

  1. WORKDIR /app

Sollen im Container Dienste laufen, die von außerhalb konsumiert werden können, müssen die Ports angegeben werden, die bereitgestellt werden sollen (zum Beispiel 80 für einen Webserver).

  1. EXPOSE 80

Danach folgen die Befehle, um alle benötigten Dienste und Applikationen zu installieren. Ist das Ziel ein Image, welches unter Linux läuft, können im Dockerfile einfach Linux-Befehle mit dem Kommando RUN ausgeführt werden. Aus Sicherheitsgründen wird empfohlen, das Baseimage immer upzudaten:

  1. RUN apt-get && apt-get upgrade -y

Mit dem Befehl COPY können Files vom lokalen Datenträger in das Containerimage kopiert werden. Hier wird als Beispiel eine kompilierte .NET-5-Applikation in den Ordner /app im Containerimage kopiert:

  1. COPY bin/Release/net5.0/publish /app
Damit die Applikationen und Dienste im Container auch ausgeführt werden, müssen die Kommandos dafür noch definiert werden. In unserem Fall handelt es sich eben um die .NET-5-Webapplikation.

  1. ENTRYPONT ["dotnet", "MyApp.dll"]

Anstatt eines leeren Base Images kann ein bestehendes verwendet werden. So kann beispielsweise ein Container erstellt werden, der einen MySQL-Server und andere Komponenten enthält. Man muss sich nicht um ein zusätzliches System kümmern, um sicherzustellen, dass dieser auch läuft.

Bitte aktivieren Sie Javascript.
Oder nutzen Sie das Golem-pur-Angebot
und lesen Golem.de
  • ohne Werbung
  • mit ausgeschaltetem Javascript
  • mit RSS-Volltext-Feed
 Docker und Co.: Ab in den ContainerDie wichtigsten Images für Docker 
  1.  
  2. 1
  3. 2
  4. 3
  5.  


mgutt 09. Feb 2022

Deswegen nutze ich unRAID. Da gibt es eine Community, die massig Container...

Schattenwerk 08. Feb 2022

Und auf welchen Fakten basiert deine Annahme?

GwhE 08. Feb 2022

Erst mal allgemein finde ich es toll das über das Thema gesprochen wird. Ist wirklich...

Cerdo 08. Feb 2022

Fast: Images bauen kann Podman nicht, das übernimmt Buildah. In den meisten Fällen...



Aktuell auf der Startseite von Golem.de
Liberty Lifter
US-Militär lässt ein eigenes Ekranoplan entwickeln

In den 1960er Jahren schockten die Sowjets den Westen mit dem Kaspischen Seemonster. Die Darpa will ein eigenes, besseres Bodeneffektfahrzeug bauen.

Liberty Lifter: US-Militär lässt ein eigenes Ekranoplan entwickeln
Artikel
  1. Abo: Spielebranche streitet über Game Pass
    Abo
    Spielebranche streitet über Game Pass

    Nach Kritik von Sony gibt es mehr Stimmen aus der Spielebranche, die Game Pass problematisch finden - aber auch klares Lob für das Abo.

  2. Microsoft: Der Android-App-Store für Windows 11 kommt nach Deutschland
    Microsoft
    Der Android-App-Store für Windows 11 kommt nach Deutschland

    Build 2022 Der Microsoft Store soll noch attraktiver werden. So können Kunden ihre Apps künftig ohne lange Wartezeiten direkt veröffentlichen.

  3. Macht mich einfach wahnsinnig: Kelber beklagt digitale Inkompetenz von VW
    "Macht mich einfach wahnsinnig"
    Kelber beklagt digitale Inkompetenz von VW

    Der Bundesdatenschutzbeauftragte Ulrich Kelber hat vor einem Jahr ein Elektroauto bei VW bestellt. Und seitdem nichts mehr davon gehört.

Du willst dich mit Golem.de beruflich verändern oder weiterbilden?
Zum Stellenmarkt
Zur Akademie
Zum Coaching
  • Schnäppchen, Rabatte und Top-Angebote
    Die besten Deals des Tages
    Daily Deals • PS5-Controller (alle Farben) günstig wie nie: 49,99€ • Samsung SSD 1TB 79€ • LG OLED TV 77" 56% günstiger: 1.099€ • Alternate (u. a. Cooler Master Curved Gaming-Monitor 34" UWQHD 144 Hz 459€) • Sony-Fernseher bis zu 47% günstiger • Samsung schenkt 19% MwSt.[Werbung]
    •  /