## 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 `nginx`logt in op de Docker-image in de `/var/log/nginx`map 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 `nginxlogs`in de homedirectory van uw huidige gebruiker en wordt deze gekoppeld aan `/var/log/nginx`de 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.
- `-d`maakt 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/nginx`zet een mount-volume op dat de `/var/log/nginx`directory vanuit de Nginx-container koppelt aan de `~/nginxlogs`directory 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:80`stelt een poort in. De Nginx-container luistert `80`standaard op poort . Deze optie wijst de poort `80`van de container toe aan de poort `5000`op het hostsysteem.
- `nginx`specificeert 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 `-v`optie 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/container`koppelt de host-directory `/path`aan de`/path/in/container`
- `-v path:/path/in/container`maakt een volume met de naam `path`zonder relatie met de host.

## 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 `5000`verwijst 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 `~/nginxlogs`directory op de host kijken, we zien dat`access.log`is gemaakt door de container `nginx`die 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 `~/nginxlogs`map aanbrengt, kun je deze ook in realtime vanuit de Docker-container bekijken.