Data uitwisseling tussen Host & Container

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.

Een volume koppelen

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:

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.

Toegang tot gegevens op 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.