Docker-Container bieten isolierte Umgebungen für die Ausführung von Anwendungen und gewährleisten so Konsistenz und Portabilität. Wenn du mit Docker-Containern arbeitest, ist es wichtig, dass du ihre Shells einsehen und dich mit ihnen verbinden kannst. Auf diese Weise kannst du Befehle ausführen, Probleme beheben und das Verhalten der Container in Echtzeit überwachen.
In diesem Artikel erfährst du, wie du auf lokale und entfernte Docker-Container zugreifen kannst, um sie zu warten und zu aktualisieren.
Warum du auf deine Container zugreifen musst
Der Zugriff auf Container ist für eine effektive Verwaltung und Fehlerbehebung in containerisierten Umgebungen unerlässlich. So kannst du die Logs und Laufzeitinformationen des Containers analysieren und Fehler leicht identifizieren und beheben.
Der Zugriff auf Container ermöglicht es dir außerdem, Befehle für schnelle Konfigurationsaktualisierungen, Paketinstallationen und andere administrative Aufgaben auszuführen. Ohne Zugriff müsstest du das gesamte Container-Image mit der aktualisierten Konfiguration neu erstellen, was zeitaufwändig und ineffizient sein kann.
In einem verteilten Anwendungsökosystem müssen Container auch miteinander kommunizieren können. Du brauchst also Zugang zu den Containern, um Befehle zu diagnostizieren und sicherzustellen, dass die Verbindung zwischen den Containern einwandfrei funktioniert.
Es ist zwar möglich, über ein herkömmliches Secure Shell (SSH)-Protokoll auf Container zuzugreifen, aber Docker bietet mehrere integrierte Methoden, mit denen du Zeit sparen und die Effizienz steigern kannst. Dazu gehören:
docker exec
docker run
docker attach
docker compose exec
docker compose run
Jede Methode hat ihre eigenen Anwendungsfälle und Vorteile. Wenn du den richtigen Befehl für deinen Anwendungsfall kennst, kannst du deinen Ansatz optimieren.
Wie und warum du docker exec verwenden solltest
docker exec
ermöglicht es dir, auf die Shell-Sitzung eines laufenden Containers zuzugreifen und Befehle auszuführen, ohne eine neue Instanz starten zu müssen. Beachte, dass dieser Befehl nicht persistent ist, d.h. er wird nicht erneut ausgeführt, wenn der Container heruntergefahren oder neu gestartet wird.
Um auf einen laufenden Container zuzugreifen, brauchst du seinen Namen oder seine ID (du kannst sie mit docker ps -a
herausfinden). Dann gibst du sie in den folgenden Befehl ein:
docker exec -it /bin/bash
Wie und warum du docker run verwenden solltest
Mit dem Befehl docker run
kannst du einen neuen Container starten und sofort auf seine Shell zugreifen. Dieser Container ist nicht standardmäßig mit deiner aktuellen Shell-Sitzung verbunden, aber du kannst ihn mit der Option -it
verbinden.
Mit dem folgenden Befehl kannst du einen neuen Container starten, ihn an deine aktuelle Shell-Sitzung anhängen und eine Bash-Shell starten:
docker run -it /bin/bash
Wie und warum man docker attach verwendet
Der Befehl docker attach
ist nützlich für die Überwachung und Fehlersuche bei Containeroperationen. Er ermöglicht es dir, dich mit einem laufenden Container zu verbinden und seine Standardeingabe-, Ausgabe- und Fehlerströme in Echtzeit einzusehen.
Um ihn zu verwenden, starte deinen Container mit docker run
. Dann trennst du dich von ihm, indem du Strg+P und Strg+Q drückst. Du kannst stattdessen auch das -d
Flag für diesen Container angeben.
Sobald dein Container im Hintergrund läuft, kannst du ihn mit dem folgenden Befehl aufrufen:
docker attach
Wie und warum du Docker Compose verwenden solltest
Mit Docker Compose kannst du Docker-Anwendungen mit mehreren Containern erstellen und ausführen. Du kannst damit die Dienste, aus denen deine Anwendung besteht, in einer YAML-Datei definieren und diese Datei dann verwenden, um alle Container gemeinsam zu starten und zu verwalten. Es eignet sich für Entwicklungs- und Testumgebungen, in denen du schnell komplexe Umgebungen aufsetzen musst.
Um auf einen bestimmten, bereits laufenden Container zuzugreifen, führst du den folgenden Befehl docker compose
aus, gefolgt vom Namen des Dienstes und dem gewünschten Befehl:
docker compose exec app /bin/bash
Dieser Befehl startet einen neuen Prozess innerhalb des Containers, der den angegebenen Befehl ausführt. Du kannst damit jeden Befehl innerhalb des Containers ausführen, auch interaktive Shells wie die Bash.
Wenn du einen neuen Container mit Docker Compose starten und sofort auf ihn zugreifen willst, führst du den folgenden Befehl aus:
docker compose run app /bin/bash
Beachte, dass docker compose
zwei verschiedene Syntaxen hat: docker-compose
(Version 1) und code>docker compose (Version 2). Die Syntax der Version 2 ist flexibler und leistungsfähiger, daher wird empfohlen, sie zu verwenden, wann immer es möglich ist.
So fügst du einen SSH-Server zu deinem Docker-Container hinzu
Wenn du einen SSH-Server zu deinem Docker-Container hinzufügst, kannst du deine containerisierten Anwendungen besser verwalten und Fehler beheben. Mit einem SSH-Server kannst du von überall aus auf Container zugreifen und sie verwalten, Befehle ausführen und Protokolle einsehen.
Du kannst einen SSH-Server hinzufügen, indem du ihn in dein Dockerfile aufnimmst, bevor du den Container baust, und ihn dann mit einem SSH-Client verbindest. Alternativ kannst du auch einen temporären SSH-Zugang einrichten, indem du eine Shell in einem laufenden Container startest und darin einen SSH-Server installierst.
Einbindung eines SSH-Servers beim Bau deines Docker-Containers
Wenn du einen Docker-Container baust, kann es nützlich sein, einen SSH-Server in den Container einzubinden, wenn du dauerhaft per SSH auf den Container zugreifen willst. Er ermöglicht den Fernzugriff und das Debugging des Containers während der Entwicklung oder der Fehlersuche. Mit einem SSH-Server innerhalb des Containers kannst du auch Dateien sicher in und aus dem Container übertragen.
Um einen SSH-Server während des Builds einzubinden, musst du ein paar Änderungen an der Dockerdatei des Containers vornehmen. Hier ist ein Beispiel für ein Dockerfile, das einen SSH-Server enthält:
FROM debian:latest
RUN apt-get update && apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:root123' | chpasswd
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
Dieser Code erstellt einen Container mit dem neuesten Debian-Image und installiert den SSH-Server. Außerdem erstellt er ein neues Verzeichnis für den SSH-Server, setzt das Root-Passwort und aktiviert den Root-Login über die SSH-Konfiguration.
Schließlich gibt er Port 22 frei, den Standardport von SSH.
Um diese Dockerdatei zu verwenden, musst du den Container mit dem Befehl docker build
erstellen und ihn dann mit docker run
ausführen. Hier ist ein Beispiel:
docker build . -t ssh-container
docker run -d -p 2222:22 ssh-container
Dieser Befehl erstellt einen Container mit der Dockerdatei und versieht ihn mit dem Namen ssh-container. Verwende -d, um den Container im abgetrennten Modus zu starten. Als Nächstes ordnest du Port 22 innerhalb des Containers mit -p auf Port 2222 auf dem Host-Rechner zu.
Sobald der Container läuft, kannst du dich mit dem Befehl ssh
per SSH in den Container einloggen:
ssh root@localhost-p 2222
Wenn du nach dem Passwort gefragt wirst, gibst du das Passwort ein, das du in der YAML-Datei festgelegt hast. In diesem Fall ist es „root123“ Du bist jetzt mit dem SSH-Server verbunden, der im Container läuft. Das bedeutet, dass du aus der Ferne debuggen oder Dateien in und aus dem Container übertragen kannst.
Vorübergehend einen SSH-Server zu einem laufenden Docker-Container hinzufügen
Du kannst auch einen SSH-Server zu einem laufenden Container hinzufügen, indem du den Befehl docker exec
verwendest:
docker exec <container_name_or_id> /bin/bash
Sobald du Zugriff auf den Container hast, installierst du den OpenSSH-Server und startest den SSH-Daemon:
apt update && apt install openssh-server && /usr/sbin/openssh -D
Dadurch wird eine neue Instanz des SSH-Servers innerhalb des Containers geöffnet. Jetzt kannst du dich mit einem SSH-Client auf deinem lokalen Rechner mit dem Server verbinden.
Beachte, dass du dich nur dann per SSH mit dem Container verbinden kannst, wenn du oder dein Team den SSH-Port während der Ausführungs- oder Bauphase freigegeben haben.
Verbinde dich mit dem SSH-Server deines Containers
Beginne damit, die IP-Adresse oder den Hostnamen des Containers über deine Containerverwaltungsplattform oder deinen Dienst zu ermitteln.
Um dich mit der IP-Adresse zu verbinden, verwende den Befehl ssh
:
ssh [username]@[container-ip-address]
Sobald du dazu aufgefordert wirst, gibst du das Passwort für den angegebenen Benutzernamen ein. Einige SSH-Server verwenden anstelle eines Passworts eine schlüsselbasierte Sicherheit.
Du solltest jetzt eine Remote-Terminal-Sitzung haben, die mit dem Container verbunden ist.
Zusammenfassung
Da Docker immer beliebter wird, ist es wichtig, dass du die Container, die in deiner Umgebung laufen, überprüfen kannst. Diese Funktion ermöglicht es dir, Probleme während der Entwicklung zu diagnostizieren und zu beheben.
Docker bietet außerdem eine vielseitige Reihe von integrierten Befehlen für verschiedene Entwicklungsaufgaben. Mit diesen Befehlen kannst du deine Arbeitsabläufe optimieren, ohne dich auf die traditionellen SSH-Methoden verlassen zu müssen.
Schau dir Kinsta an, um deine Anwendungen, WordPress-Websites oder Datenbanken zu hosten. Mit Kinsta hast du einen schnellen und sicheren Hoster, der deine Projekte auf einer Infrastruktur bereitstellt, die auf dem Premium Tier Network und den C2-Maschinen von Google Cloud Platform basiert. Wähle zwischen 37 Rechenzentren und einem HTTP/3-fähigen CDN mit 260+ PoPs. Mit isolierter Containertechnologie, zwei starken Firewalls und fortschrittlichem DDoS-Schutz auf Basis von Cloudflare bist du sicher. Und mit der Kinsta-API kannst du Anwendungen integrieren oder Workflows automatisieren.
Schreibe einen Kommentar