Container & Containerisierung: Ein Leitfaden für Anfänger

Container & Containerisierung: Ein Leitfaden für Anfänger

  • ITOps & DevOps
6 Minuten Lesezeit Aktualisiert Apr 19, 2021

Auf einen Blick: Container kapseln Anwendungen, ermöglichen eine einheitliche Leistung über Umgebungen hinweg und verbessern das Unternehmensmanagement, insbesondere für DevOps-Praktiken. Sie senken Infrastrukturkosten und steigern die Entwicklungseffizienz, unterstützen kontinuierliche Bereitstellung und Versionskontrolle.

  • Container bieten einen vielseitigen, ressourcenfreundlichen Ansatz für die Softwarebereitstellung.
  • Sie verbessern Sicherheit und Isolation im Vergleich zu herkömmlichen Virtualisierungsmethoden.

Das Erstellen von Containern ist notwendig, wenn Sie Kubernetes (K8s) oder ähnliche Optionen nutzen möchten. Die einzige Möglichkeit, Kubernetes zu nutzen, das die Orchestrierung von Containern auf Servern übernimmt, besteht darin, Code in einen Container zu legen.

Glücklicherweise gibt es viel Hilfe, Code in einen Container zu packen – das ist einfach so essenziell. Was genau ist also ein Container? Finden wir es heraus. In diesem Artikel werde ich die Containerisierung vorstellen, einschließlich:

Was ist ein Container?

Container sind Methoden, Code zu paketieren und ihn auf jeder Maschine ausführen zu lassen.

Code kann in verschiedenen Sprachen sein, auf andere Software angewiesen sein, Pakete aus einem Internet-Repository installieren und spezifische Systemanforderungen (wie Speichergröße) erfordern, um richtig zu laufen. In der Containerisierung enthalten Container alle symbolischen Details, die benötigt werden, um ein Programm auszuführen. Der Container befiehlt seiner eigenen Laufzeitumgebung, Dinge zu enthalten, die es ermöglichen, ein Programm ausführbar zu machen, wie zum Beispiel:

  • Akten
  • Bibliotheken
  • Umweltvariablen

Dies unterscheidet sich von traditionellen Ansätzen zur Virtualisierung, bei denen jede Anwendung ein Betriebssystem oder eine komplette virtuelle Maschine (VM) benötigt, um auf dem Server zu laufen. Container sind vielseitig, da sie auf folgenden Funktionen funktionieren können:

  • Bare-Metal-Server
  • Cloud-Server
  • Eine einzelne virtuelle Maschine auf einem Server.

Anstatt also in der Küche einer anderen Person zu kochen, ermöglichen Container Programmierern, ihre eigenen Küchen auf Servern überall zu erstellen, wo sie sich befinden. Server sind einfach Personal Computer, ohne all die Schnickschnack eines eleganten Designs und eines ausgefallenen Betriebssystems, das den Server benutzerfreundlich macht. In Bezug auf die Produktleistung sorgt Containerisierung dafür:

  • Zuverlässigkeit
  • Konsistenz

Wie Behälter funktionieren

Container installieren alle erforderlichen Dateien, um die vorhandene Software ausführen zu können.

Erinnern Sie sich, wie Sie Software in Kartons bei Fry's Electronics gekauft haben? (☹) Auf der Rückseite der Verpackung standen normalerweise Spezifikationen, die besagten, dass diese Software nur auf Mac- oder Windows-Geräten läuft. Dann gab es Spezifikationen, dass die Software mindestens 512 MB RAM und 2 GB verfügbaren Festplattenspeicher benötigt. Komplexere Apps benötigen möglicherweise eine Grafikkarte mit minimalem Arbeitsspeicher.

In gewisser Weise waren die Spezifikationen auf der Rückseite von Softwarepaketen der Weg für Softwareentwickler, das Risiko zu begrenzen, dass die Apps auf den Geräten des Nutzers ausfallen, insbesondere wenn diese ihre Anwendung breit auf vielen Computersystemen einsetzen. Heute können App-Entwickler:

  • Sei genauer
  • Verwenden Sie entfernte Computer
  • Geben Sie genau an, auf welchem System ihre Software laufen muss

Tatsächlich können die Entwickler mit Containerisierung selbst bauen, um sicherzustellen, dass die Software läuft und nicht versagt.

Bei der Containerisierung gibt es zwei Spezifikationsdateien, die definieren, welche Software auf einer Maschine benötigt wird und welche Hardware zum Betrieb der Maschine erforderlich ist. Diese sind:

  1. Dockerfile , das die Laufzeitumgebung und die Installation notwendiger Pakete kontrolliert, um ausreichend ausgeführt zu werden.
  2. Yaml-Datei , die die Hardware und die Netzwerksicherheitsanforderungen steuert

Neben dem Verständnis des Frameworks müssen Sie auch die Ergebnisse verstehen. Nachdem ein Container erstellt wurde, bildet er ein Image. Ein Image entsteht aus der vollständigen Menge der Laufzeitkomponenten in einem einzigen Container. Sobald der Code containerisiert und das Image erstellt wurde, kann es auf einem gewählten Host bereitgestellt werden. Diese können sein:

  • Laufen Sie lokal auf jedem Rechner.
  • Bereitgestellt auf Cloud-Rechnern.

Containerisierung vs. Servervirtualisierung

Wenn Menschen von Servervirtualisierung sprechen, meinen sie meist eine virtuelle Maschine. Eine VM schafft eine Hypervisorschicht zwischen Betriebssystem, Anwendungen und Diensten sowie Speicher, Speicher und Ähnlichem.

Diese Schicht fungiert als eigenständige VM und schafft eine eigenständige Umgebung, um eine einzelne Anwendung auszuführen. Jede virtualisierte Anwendung nutzt ihre eigene Version eines Betriebssystems. Um in einer virtuellen Umgebung zu entwickeln, müssten Sie:

  • Es gibt mehrere verfügbare Versionen von Betriebssystemen
  • Kaufe mehrere Lizenzen

Container hingegen ermöglichen es mehreren Anwendungen, auf einer einzigen VM auszuführen. Dies begrenzt die Anzahl der Softwarelizenzen, in die ein Unternehmen investieren muss, um in einer Containerumgebung zu entwickeln. Sie tun dies, indem sie Betriebssystemkernel teilen, anstatt eigene zu benötigen. Aus diesem Grund ist die Entwicklung in einem Container sowohl finanziell als auch rechnerisch ein ressourcenreicherer Ansatz zur Unternehmenssoftwareentwicklung.

(Verstehen Sie die Unterschiede zwischen Containern und VMs.)

Sicherheit

YAML-Datei

Unternehmensvorteile der Containerisierung

Container sind die Antwort auf viele Probleme, wenn Teams Code entwickeln:

  • Verschiedene Codebasen
  • Code-Austausch zwischen verschiedenen Systemen
  • Code-Teilen in verschiedenen Laufzeitumgebungen
  • Sicherheit
  • Versionierung

Schauen wir uns nun die wichtigsten Vorteile der Bereitstellung von Software auf einer Container-Engine an.

Multi-Cloud-Plattformtechnologie

Einer der wünschenswertesten Vorteile der Nutzung von Containerisierung als Virtualisierungsmethode ist, dass sie in der Cloud betrieben werden kann. Viele Engines unterstützen Multi-Cloud-Plattformen , sodass sie innerhalb von Plattformen wie folgenden betrieben werden können:

  • Amazon EC2-Instanzen
  • Google Compute Engine-Instanzen
  • Rackspace-Server
  • VirtualBox

Container verpacken den Code, der von jedem Versanddienstleister verschickt werden kann. Es spielt keine Rolle, wer es bearbeitet, was dem Kunden mehr Macht gibt, bei verschiedenen Anbietern zu wählen.

Testen & kontinuierliche Bereitstellung

Containerisierung gibt Unternehmen die Flexibilität, Images auf mehreren Servern zu bauen, zu testen und freizugeben.

Auch wenn die Konsistenz zwischen verschiedenen Umgebungen manchmal schwankt, insbesondere bei Entwicklungs- und Release-Zyklen, machen Container-Anbieter wie Docker es einfacher, unabhängig von der Umgebung, in der Sie Ihr Image bereitstellen, Konsistenz sicherzustellen. Deshalb ist Containerisierung eine so gute Option für Organisationen, die DevOps nutzen, um die Anwendungslieferung zu beschleunigen.

(Entdecken Sie die DevOps-Praktiken der kontinuierlichen Bereitstellung und kontinuierlichen Tests.)

Versionskontrolle

Um wettbewerbsfähig zu bleiben, müssen Containerplattformen eine Versionskontrolle sicherstellen.

Docker hat die Messlatte hoch gesetzt, indem es eine vereinfachte Versionskontrolle anbietet, die es einfach macht, auf ein vorheriges Image zurückzugehen, falls Ihre Umgebung kaputtgeht. Wettbewerber sind diesem Beispiel gefolgt, was diese Virtualisierungsmethode für Entwickler geeignet macht, die Versionskontrolle griffbereit benötigen.

Isolation

Ein zentraler Bestandteil der Virtualisierung ist die Isolation, also die Trennung von Ressourcen für jede Anwendung. Container-Engines schneiden besser ab als virtuelle Maschinen, wenn es um Isolation geht. Aber die Entscheidung, eine der beiden zu verwenden, erfordert eine Überlegung und hängt vom Anwendungsfall ab.

Im Allgemeinen haben Container im Vergleich zu VMs:

  • Schnellere Startzeiten
  • Weniger Redundanz
  • Bessere Ressourcenverteilung

Als Docker eingeführt wurde, war die Sicherheit gering. Im Laufe der Zeit hat Docker jedoch viele der Hauptprobleme behoben, wie zum Beispiel das Ausführen jedes Containers aus dem Root-Ordner.

Anbieter der Containerisierung bieten unterschiedliche Möglichkeiten, die Sicherheit zu gewährleisten, aber eines ist durchweg konsistent. Wenn einer deiner Container gehackt wird, sind Anwendungen, die auf anderen Containern laufen, nicht anfällig.

Dennoch sind einzelne Container anfällig für Angriffe, aber es gibt Möglichkeiten, sie durch Best Practices und Drittanbieter-Überwachungsdienste zu sichern.

(Befolgen Sie diese Sicherheitsbest-Practices für Docker.)

Vielseitig und ressourcenfreundlich

Die meisten Entwickler bevorzugen Container, weil sie ein vielseitiger, ressourcenfreundlicher Ansatz für die Softwareentwicklung sind. Unternehmen können sicherstellen, dass alle ihre Entwicklungs- und Bereitstellungsbedürfnisse erfüllt werden und gleichzeitig Serverplatz sparen – sei es physisch, virtuell oder cloudnisch.

Im Vergleich zu VMs sind Container:

  • Verbrauche weniger Speicherplatz, meist gemessen in MB statt GB
  • Kann begrenzt werden, um eine minimale Menge an Ressourcen zu verbrauchen

Portabilität

Da Container-Anwendungen auf Cloud-Servern laufen können, sind sie im Allgemeinen zugänglicher als andere Anwendungen. Programmieren in Containern bietet einen portablen Ansatz zur Softwareentwicklung.

Reproduzierbarkeit

DevOps liebt Containerisierung, besonders weil sie den Vorteil der Reproduzierbarkeit bietet. Die Komponenten jedes Containers bleiben statisch und unverändert vom Code bis zur Bereitstellung. Sie erzeugen ein einziges Bild, das in anderen Containern immer wieder reproduziert werden kann.

Container unterstützen die DevOps-Kultur

Für jede Entwicklungsumgebung, die Portabilität und Vielseitigkeit erfordert, bieten DevOps und Container eine fantastische Lösung. Diese zunehmend verbreitete Verbreitung wird durch zwei zentrale Trends angetrieben:

  • Unternehmen setzen weiterhin breit auf Cloud-Technologie, sodass Sie die Abläufe aus der Hand heraus führen können.
  • Das anhaltende Wachstum der Nutzung von As-a-Service-Anbietern, die Cloud-Dienste paketieren, um Geschäftsabläufe zu vereinfachen und Kosten zu senken.

Während immer mehr Unternehmen die schwierigen Wege meistern, sicherzustellen, dass ihre Cloud-Ressourcen individuell, integriert, automatisiert und wie vorgesehen funktionieren, ist der Bedarf an qualifizierten DevOps-Fachleuten explosionsartig gestiegen. Mit mehr DevOps-Profis kommt meist ein Kulturwandel, bei dem zwei Dinge passieren:

  • Anwendungen werden immer zugänglicher.
  • Unternehmen suchen nach innovativen Lösungen, um das rasante Wachstum abzumildern.

Schließlich erhöhen Remote-Teams und Mitarbeiter die Nachfrage nach Portabilität. Sie arbeiten von entfernten Orten mit Internetzugang, oft über Zeitzonen und festgelegte Arbeitszeiten hinweg, sodass ihre Beiträge jederzeit eingehen können.

Containerisierung bietet genau das, wonach sie suchen – ein Softwarepaket, das zusammen ausgeliefert wird. Beiträge können jederzeit geleistet werden. Container bieten konsistente Leistung über Zeitzonen und Geräte hinweg.

(Erfahren Sie mehr über das Management von Code und Containern).

Containersysteme

Eine Reihe von Diensten hilft dabei, Container zu orchestrieren, sei es in der Cloud in Kubernetes-Umgebungen oder in traditionelleren Einzelserver-Instanzen. Hier ein kurzer Überblick über einige beliebte Optionen.

Docker & Kubernetes

Die am weitesten verbreitete Plattform ist Docker, ein Open-Source-Containersystem, das auf runC basiert. Docker-Bilder funktionieren auf mehreren Service-Plattformen, was sie vielseitiger macht als einige ihrer Konkurrenten.

Die Grundfunktionalität von Docker sieht so aus:

Eine aufkommende Best Practice ist die gemeinsame Nutzung von Docker und Kubernetes. Trotz unterschiedlicher Technologien schafft die Integration von K8s und Docker einen Isolationsmechanismus, der es ermöglicht, Containerressourcen effizienter zu ergänzen.

CoreOS (rkt)

Der größte Konkurrent zu Docker, CoreOS'rkt (ausgesprochen CoreOS "rocket"), ist ein Low-Level-Framework, das Systeme nutzt, um grundlegende Anwendungen zu erstellen. Es ist als Container-Engine konzipiert, die Google Kubernetes antreibt.

Google Kubernetes (Cloud Run, GKE & GCE)

Google Kubernetes hat seine eigene Container-Engine, rkt, ist aber auch eine Community, in der Nutzer andere beliebte Engines betreiben können. Es ist eine Open-Source-Hostumgebung, um Bibliotheken von Anwendungen zum Teilen oder Entwickeln zu erstellen.

Kubernetes ist eine gute portable Option, da es einen vollständigen Cloud-Server bietet, auf den man überall zugreifen kann.

Amazon AWS

AWS bietet Backend as-a-Service (BaaS) an, das auch ein Containers-as-a-Service (CaaS)-Angebot für seine Kunden beinhaltet. Es ist zudem ein weit verbreiteter Host für diejenigen, die Docker-Images bereitstellen möchten. Wie Kubernetes bietet AWS die Portabilität von Cloud-Computing.

Cloud Foundry

Cloud Foundrys Garden ist eine Open-Source-Option, die Containerisierung als Teil seiner Platform-as-a-Service-Optionen (PaaS) anbietet. Garden ist die Container-Engine. Cloud Foundry ist der Host für die Entwicklung, das Testen und die Bereitstellung portabler Anwendungen auf einem Cloud-Server.

Einstieg mit Containern

Bereit, selbst Behälter auszuprobieren? Ich führe dich durch den Prozess.

Anforderungsdatei

Hier sind Befehle, wie man eine Liste aller installierten Pakete auf einem Gerät generiert. Vermutlich wurde der Code in einer Umgebung geschrieben und kompiliert problemlos.

  1. Holen Sie sich eine Liste aller installierten Pakete, auf die Ihre Software angewiesen ist – ihre Abhängigkeiten.
  2. Kopiere diese Datei auf einen anderen Rechner.
  3. Installiere die Pakete auf dem Rechner, damit er alles hat, was er zum Ausführen braucht.

Im Folgenden finden Sie Befehle, um sowohl die Liste der Pakete zu erhalten als auch die Liste auf einem anderen Rechner zu installieren. Wenn ein Container auf einem Server gestartet wird, muss er diese Befehle ausführen, um die Software auf dem Server zu installieren, auf dem er gerade gelandet ist.

Dies sind Beispiele für Ruby und Python. Diese Schritte können für jede Programmiersprache gefunden und wiederholt werden.

Für Ruby

Für Python

    Get all python packages in your environment:
pip freeze > requirements.txt

Install python requirements on a machine:
pip3 install -r requirements.txt

Für Ruby

    Put lists of gems in a file:
xargs gem unpack < $LISTNAME

Build gems without internet connection:
xargs -I gemname gem build gemname/gemname.gemspec < $LISTNAME

Build gems with internet connection:
xargs gem install < $LISTNAME

(Folgen Sie diesem ausgezeichneten Anleitungshinweis, wie man Ruby-Code in einen Docker-Container legt.)

Docker- und Dockerfile-Code

Für Docker ist das Dockerfile ein Muss, aber seine Art wurde auch für andere Container-Registrierungen wie Googles Container Registry wiederholt.

Wichtige Dinge, die ich durch die Nutzung von Docker gelernt habe:

  1. Verwenden Sie bestehende Docker-Images zum Start und ändern Sie sie dann.
  2. Schau dir die Größe des Docker-Bildes an.
  3. Es ist möglich, ein Docker-Image zu erstellen, das alle Pakete herunterlädt, und dieses dann in ein anderes Image zu kopieren, um Speicherplatz zu sparen. (Manchmal verdoppelt sich die Datenmenge beim Herunterladen und Installieren von Paketen, wenn sie als ZIP heruntergeladen und extrahiert werden.)

Die Dockerfile ist eine Reihe von Anweisungen, die dem Container sagen, was er beim Erstellen tun soll, was direkt vor der Bereitstellung geschieht.

Die Dockerfile verwendet eine Kombination aus FROM, RUN, WORKDIR, COPY, RUN, CMD-Befehlen und anschließend normale Kommandozeileneingaben. Im Folgenden ist eine einfache Dockerfile, die:

  1. Baut einen Container aus einem 12-Alpen-Bild.
  2. Führt einen Python-Befehl aus.
  3. Kopiert alles vom Verzeichnis in den Container unter dem /app-Verzeichnis.
  4. Installiert alle Anforderungen.
  5. Führt den Kommandoknoten aus, der für etwas in der Anwendung selbst relevant ist.
    ‘’’
 FROM node:12-alpine
 RUN apk add --no-cache python g++ make
 WORKDIR /app
 COPY . .
 RUN pip3 install -r requirements.txt
 CMD ["node", "src/index.js"]
‘’’

( Siehe Docker-Dokumente für weitere Details.)

Die YAML-Datei ist eine Konfigurationsdatei, die den Kubernetes-Servern genau mitteilt, welche Anforderungen der Container zum Ausführen ist. Wenn du mit K8s gearbeitet hast, bist du bereits mit YAML vertraut.

Die YAML-Datei gibt an, ob der Container Folgendes benötigt:

  • 256 MB oder 8 GB Speicher
  • Ein angehängtes Datenvolumen
  • Wie viele Prozesse es ausführen kann
  • Die Sicherheitsmaße
  • Und wirklich, noch so viel mehr

Kurz für entweder 'noch eine weitere Markup-Sprache' oder 'YAML ist keine Markup-Sprache', ist YAML eine Serialisierungssprache, die sehr gut lesbar ist. Es ist ein bisschen wie JSON, einfach Daten zu speichern. Obwohl es für viele Zwecke verwendet werden kann, wird es häufig für Konfigurationsdateien verwendet, wie zum Beispiel die Konfigurationsdatei beim Containerisieren von Code.

Nick Chase mit Marantis analysiert das YAML weiter. Hier habe ich nur kopiert, wie ein YAML am Ende aussieht.

    ‘’’
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: rss-site
  labels:
    app: web
spec:
  replicas: 2
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
        - name: front-end
          image: nginx
          ports:
            - containerPort: 80
        - name: rss-reader
          image: nickchase/rss-php-nginx:v1
          ports:
            - containerPort: 88
‘’’

Wann man Behälter verwenden sollte

Container sind ideal für jedes Unternehmen oder jede Organisation, die das digitale Unternehmensmanagement durch Lösungen verbessern möchte, die Zuverlässigkeit, Portabilität, Vielseitigkeit und Reproduzierbarkeit in einer virtuellen Umgebung bieten.

Unternehmen, die sich einer DevOps-Kultur nähern, sollten Container vorsichtig einführen. Die folgenden Schritte werden bei der Einführung von Containern empfohlen:

  1. Bewerten Sie die Geschäftsbedürfnisse. Üben Sie den Betrieb von Containern im kleinen Maßstab und sehen Sie, wie sie in das Geschäftsmodell und die Unternehmenskultur passen.
  2. Pilotiere Container mit deinem DevOps-Team.
  3. Gehe in die Produktionsphase und installiere Container in deiner Infrastruktur.

Um in die Kubernetes-Infrastruktur einzusteigen, sind zwei grundlegende Fähigkeiten erforderlich

  • Containerisierung deines Codes.
  • Kubernetes lernen (diesen kubectl muss ich lernen – zum Glück deckt dich unser K8s Guide ab)

Kubernetes orchestriert die Bereitstellung von Containern auf Servern – obwohl es auch andere Optionen gibt. Wenn es keine Container gibt, gibt es nichts zu deployen.

Der Grund, warum Cloud-Service-Unternehmen existieren, liegt einfach darin, dass das Servermanagement aus Managementsicht kostspielig und auch aus Ausrüstungssicht teuer ist. Obwohl sie die meisten Cloud-Probleme lösen, liegt es weiterhin an Ihnen, Ihre Container zu erstellen und auf ihren Dienst einzusetzen.

Verwandte Literatur

Diese Beiträge sind meine eigenen und spiegeln nicht unbedingt die Position, Strategien oder Meinung von BMC wider.

Mehr aus ITOps & DevOps

Interessieren Sie sich für mehr von BMC?

The Brief ist unsere monatliche E-Mail zum Mainframe und zur Enterprise-Orchestrierung: Recherchen, Kundenberichte, Produktnachrichten, Events.

Mit der Registrierung für dieses Angebot bestätigen Sie, dass Sie die Datenschutzrichtlinie von BMC gelesen und zugestimmt haben.

Sie haben The Brief abonniert

Das Briefing umfasst die Mainframe- und Enterprise-Orchestrierung – BMC AMI und Control-M – sowie die Analystenforschung, Kundeneinsätze und Events in beiden Bereichen.