Docker containers bieden geïsoleerde omgevingen voor het draaien van applicaties en zorgen voor consistentie en overdraagbaarheid. Als je met Docker containers werkt, is het cruciaal om hun shells te kunnen inspecteren en er verbinding mee te maken. Hierdoor kun je commando’s uitvoeren, problemen oplossen en het gedrag van de containers in realtime controleren.
Dit artikel laat zien hoe je toegang kunt krijgen tot lokale en remote Docker containers voor onderhoud en updates.
Waarom je bij je containers moet kunnen
Toegang tot containers is essentieel voor effectief beheer en probleemoplossing in gecontaineriseerde omgevingen. Het stelt je in staat om de logs en runtime informatie van de container te analyseren en eenvoudig fouten te identificeren en op te lossen.
Toegang tot containers stelt je ook in staat om commando’s uit te voeren voor snelle configuratie-updates, pakketinstallaties en andere administratieve taken. Zonder toegang zou je het hele container image opnieuw moeten bouwen met de bijgewerkte configuratie, wat tijdrovend en inefficiënt kan zijn.
Containers moeten ook met elkaar kunnen communiceren in een gedistribueerd applicatie-ecosysteem. Je hebt dus toegang tot de container nodig om diagnostische commando’s uit te voeren en ervoor te zorgen dat de connectiviteit tussen de containers gezond is.
Hoewel het mogelijk is om toegang te krijgen tot containers via een traditioneel Secure Shell (SSH) protocol, biedt Docker verschillende ingebouwde methoden om je te helpen tijd te besparen en de efficiëntie te verhogen. Deze omvatten:
docker exec
docker run
docker attach
docker compose exec
docker compose run
Elke methode heeft zijn specifieke gebruikssituaties en voordelen. Als je weet wat het juiste commando is voor jouw use case, kun je je aanpak optimaliseren.
Hoe en waarom docker exec gebruiken
docker exec
staat je toe om toegang te krijgen tot de shell sessie van een draaiende container en commando’s uit te voeren zonder dat je een nieuwe instance hoeft te starten. Let op dat dit commando niet persistent is, wat betekent dat het niet opnieuw wordt uitgevoerd als je de container afsluit of herstart.
Om toegang te krijgen tot een draaiende container, heb je zijn naam of ID nodig (die kun je krijgen door docker ps -a
te draaien). Voer die dan in het volgende commando in:
docker exec -it /bin/bash
Hoe en waarom docker run gebruiken
Met het commando docker run
kun je een nieuwe container starten en direct toegang krijgen tot zijn shell. Deze container is standaard niet gekoppeld aan je huidige shellsessie, maar je kunt hem wel koppelen met de optie -it
.
Met het volgende commando kun je een nieuwe container starten, deze aan je huidige shellsessie koppelen en een bash-shell spawnen:
docker run -it /bin/bash
Hoe en waarom docker attach gebruiken
Het commando docker attach
is handig voor het monitoren en debuggen van containeroperaties. Hiermee kun je verbinding maken met een draaiende container en de standaard invoer-, uitvoer- en foutstromen in realtime bekijken.
Om het te gebruiken, start je de container met docker run
. Ontkoppel vervolgens door op Ctrl+P en Ctrl+Q te drukken. Je kunt in plaats daarvan ook de vlag -d
voor die container opgeven.
Zodra je container op de achtergrond draait, kun je deze openen met het volgende commando:
docker attach
Hoe en waarom Docker Compose gebruiken
Docker Compose stelt je in staat om Docker applicaties met meerdere containers te maken en uit te voeren. Je kunt het gebruiken om de services waaruit je applicatie bestaat te definiëren in een YAML bestand en vervolgens dat bestand gebruiken om alle containers samen op te starten en te beheren. Het is geschikt voor ontwikkel- en testomgevingen waar je snel complexe omgevingen moet opstarten.
Om toegang te krijgen tot een specifieke container die al draait, voer je het volgende commando docker compose
uit, gevolgd door de naam van de service en het commando dat je wilt draaien:
docker compose exec app /bin/bash
Dit commando start een nieuw proces binnen de container die het opgegeven commando uitvoert. Je kunt het gebruiken om elk commando in de container uit te voeren, inclusief interactieve shells zoals bash.
In het verlengde hiervan: als je een nieuwe container wilt opstarten met Docker Compose en er direct toegang tot wilt krijgen, voer dan het volgende commando uit:
docker compose run app /bin/bash
Merk op dat docker compose
twee verschillende syntaxis heeft: docker-compose
(versie 1) en code>docker compose (versie 2). De versie 2 syntaxis is flexibeler en krachtiger, dus het is aan te raden om deze waar mogelijk te gebruiken.
Een SSH server toevoegen aan je Docker container
Een SSH server toevoegen aan je Docker container helpt je bij het beheren en oplossen van problemen met je gecontaineriseerde applicaties. Met een SSH server kun je op afstand toegang krijgen tot containers en ze beheren, commando’s uitvoeren en logs inspecteren vanaf elke locatie.
Je kunt een SSH server toevoegen door hem op te nemen in je Dockerfile voordat je de container bouwt en hem dan te verbinden met een SSH client. Je kunt ook tijdelijke SSH toegang toevoegen door een shell te spawnen in een draaiende container en daarin een SSH server te installeren.
Een SSH server opnemen bij het bouwen van je Docker container
Wanneer je een Docker container bouwt, kan het handig zijn om een SSH server in de container op te nemen als je vaak gebruik wil maken van SSH voor toegang. Dit maakt toegang op afstand en debuggen van de container mogelijk tijdens ontwikkeling of probleemoplossing. Met een SSH server in de container kun je ook veilig bestanden overzetten van en naar de container.
Om een SSH server op te nemen tijdens het bouwen, breng je een paar wijzigingen aan in de Dockerfile van de container. Hier is een voorbeeld van een Dockerfile met een SSH server:
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"]
Deze code bouwt een container met het nieuwste Debian image en installeert de SSH server. Het maakt ook een nieuwe directory aan voor de SSH server en stelt het root-wachtwoord in en schakelt het aanmelden van de root in via de SSH configuratie.
Tot slot wordt poort 22, de standaardpoort van SSH, vrijgegeven.
Om dit Dockerfile te gebruiken, bouw je de container met het commando docker build
en voer je de container uit met docker run
. Hier is een voorbeeld:
docker build . -t ssh-container
docker run -d -p 2222:22 ssh-container
Dit commando bouwt een container met behulp van het Dockerfile en labelt het met de naam ssh-container. Gebruik -d om de container in detached modus te draaien. Map vervolgens poort 22 in de container naar poort 2222 op de hostmachine met -p.
Zodra de container draait, kun je ernaar SSH en met het commando ssh
:
ssh root@localhost-p 2222
Als om het wachtwoord wordt gevraagd, typ dan het wachtwoord in dat je in het YAML bestand hebt ingesteld. In dit geval is dat “root123” Je bent nu verbonden met de SSH server die in de container draait. Dit betekent dat je op afstand kunt debuggen of bestanden kunt overbrengen van en naar de container.
Tijdelijk een SSH server toevoegen aan een draaiende Docker container
Je kunt ook een SSH server toevoegen aan een draaiende container met het commando docker exec
:
docker exec <container_name_or_id> /bin/bash
Zodra je toegang hebt gekregen tot de container, installeer je de OpenSSH server en start je de SSH daemon:
apt update && apt install openssh-server && /usr/sbin/openssh -D
Dit opent een nieuwe instance van de SSH server in de container. Je bent nu klaar om er verbinding mee te maken met een SSH client op je lokale machine.
Merk op dat je alleen verbinding kunt maken met de container via SSH als jij of je team de SSH poort heeft vrijgegeven tijdens de uitvoerings- of buildfase.
Verbinden met de SSH server van je container
Begin met het identificeren van het IP adres of de hostnaam van de container via je container management platform of service.
Gebruik het commando ssh
om verbinding te maken met het IP adres:
ssh [username]@[container-ip-address]
Voer het wachtwoord in voor de opgegeven gebruikersnaam als daarom wordt gevraagd. In plaats van een wachtwoord kunnen sommige SSH servers sleutelgebaseerde beveiliging gebruiken.
Je zou nu een remote terminal sessie verbonden moeten hebben met de container.
Samenvatting
Nu Docker steeds populairder wordt, is het belangrijk om de containers die in je omgeving draaien te kunnen inspecteren. Deze functionaliteit stelt je in staat om problemen tijdens de ontwikkeling te diagnosticeren en op te lossen.
Docker biedt ook een veelzijdige set ingebouwde commando’s voor verschillende ontwikkelingstaken. Je kunt deze commando’s gebruiken om je workflow te stroomlijnen zonder te hoeven vertrouwen op traditionele SSH methoden.
Kijk eens naar Kinsta om je applicaties, WordPress websites of databases te hosten. Met Kinsta heb je een snelle en veilige host, waarbij je projecten worden ingezet op een infrastructuur die is gebouwd op het Premium Tier Network en C2 Machines van Google Cloud Platform. Kies tussen 37 datacenters en een HTTP/3-enabled CDN met 260+ PoPs. Wees veilig dankzij geïsoleerde containertechnologie, twee sterke firewalls en geavanceerde DDoS bescherming van Cloudflare. En je kunt apps integreren of workflows automatiseren met de Kinsta API.
Laat een reactie achter