Over het algemeen zijn Docker-containers kortstondig en worden ze net zo lang uitgevoerd als nodig is tot de opdracht die in de container is uitgevoert, te voltooien. Alle gegevens die in de container zijn gemaakt, zijn standaard alleen beschikbaar vanuit de container en alleen terwijl de container actief is.
Docker-volumes kunnen worden gebruikt om bestanden te delen tussen een hostsysteem en de Docker-container. Laten we bijvoorbeeld zeggen dat je de officiƫle Docker Nginx-image wilde gebruiken en een permanente kopie van de logbestanden van Nginx wilde bewaren om later te analyseren. Standaard nginxlogt in op de Docker-image in de /var/log/nginxmap in de Docker Nginx-container. Normaal gesproken is het niet bereikbaar vanaf het hostbestandssysteem.
In deze les onderzoeken we hoe je gegevens vanuit de container toegankelijk kunt maken op de hostcomputer.
Met de volgende opdracht wordt een map gemaakt met de naam nginxlogsin de homedirectory van uw huidige gebruiker en wordt deze gekoppeld aan /var/log/nginxde container:
docker run --name=nginx -d -v ~/nginxlogs:/var/log/nginx -p 5000:80 nginx
Laten we even de tijd nemen om deze opdracht in detail te bekijken:
--name=nginx geeft de container een naam, zodat we er gemakkelijker naar kunnen verwijzen.-dmaakt het proces los en voert het op de achtergrond uit. Anders zouden we alleen een lege Nginx-prompt bekijken en deze terminal niet kunnen gebruiken totdat we Nginx hebben gestopt.-v ~/nginxlogs:/var/log/nginxzet een mount-volume op dat de /var/log/nginxdirectory vanuit de Nginx-container koppelt aan de ~/nginxlogsdirectory op de hostcomputer. Docker gebruikt een :om het hostpad te splitsen van het containerpad, en het hostpad komt altijd op de eerste plaats.-p 5000:80stelt een poort in. De Nginx-container luistert 80standaard op poort . Deze optie wijst de poort 80van de container toe aan de poort 5000op het hostsysteem.nginxspecificeert dat de container moet worden gebouwd op basis van de Nginx-afbeelding, die de opdracht geeft nginx -g "daemon off"om Nginx te starten.Let op: De -voptie is erg flexibel. Het kan een volume binden of een naam geven met slechts een kleine aanpassing in de syntaxis. Als het eerste argument begint met een /of ~/, maakt je een mount. Verwijder dat, en je geeft het volume een naam.
-v /path:/path/in/containerkoppelt de host-directory /pathaan de/path/in/container-v path:/path/in/containermaakt een volume met de naam pathzonder relatie met de host.We hebben nu een kopie van Nginx die in een Docker-container op onze computer draait, en de poort van onze hostcomputer 5000verwijst rechtstreeks naar die kopie van de poort van Nginx 80.
Laad het adres in een webbrowser, met behulp van het IP-adres of de hostnaam van je server en het poortnummer : . Je zou Nginx moeten zien op:http://your_server_ip:5000
Interessanter is dat als we in de ~/nginxlogsdirectory op de host kijken, we zien dataccess.logis gemaakt door de container nginxdie ons verzoek zal tonen:
cat ~/nginxlogs/access.log
Dit zou iets moeten weergeven als:
Output
192.168.182.130 - - [11/Feb/2021:16:08:46 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.68.0" "-"
192.168.182.128 - - [11/Feb/2021:16:10:54 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:85.0) Gecko/20100101 Firefox/85.0" "-"
192.168.182.128 - - [11/Feb/2021:16:10:54 +0000] "GET /favicon.ico HTTP/1.1" 404 153 "http://192.168.182.130/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:85.0) Gecko/20100101 Firefox/85.0" "-"
192.168.182.128 - - [11/Feb/2021:16:11:04 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:85.0) Gecko/20100101 Firefox/85.0" "-"
192.168.182.128 - - [11/Feb/2021:16:11:04 +0000] "GET /favicon.ico HTTP/1.1" 404 153 "http://192.168.182.130:5000/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:85.0) Gecko/20100101 Firefox/85.0" "-"
Als je wijzigingen in de ~/nginxlogsmap aanbrengt, kun je deze ook in realtime vanuit de Docker-container bekijken.