GNU/Linux >> Linux Esercitazione >  >> Panels >> Docker

Come accedere ai file al di fuori di un contenitore Docker

Se i container sono isolati, come possono comunicare con la macchina host, magari per memorizzare i dati? Perché quando creiamo un contenitore da un'immagine, tutti i dati generati vengono persi quando il contenitore viene rimosso.

Quindi abbiamo bisogno di un modo per avere una memoria permanente.

Possiamo farlo usando Bind Mounts e Volumi .

Non c'è molta differenza tra i due, tranne che Bind Mounts può puntare a qualsiasi cartella sul computer host e non sono gestiti direttamente da Docker.

Cominciamo con loro. Un classico esempio sono i log. Supponiamo che la tua app crei un file di registro, all'interno del contenitore, in /usr/src/app/logs . Puoi mapparlo su una cartella sulla macchina host, usando il -v (come --volume ) flag quando esegui il contenitore con docker run , in questo modo:-v ~/logs:/usr/src/app/logs

Questo mapperà quella cartella alla sottocartella dei registri nella directory home dell'utente.

Nodo:il -m o --mount flag funziona in modo molto simile

Questo è il flag utilizzato con il examplenode immagine che abbiamo creato in precedenza:

docker run -d -p 80:3000 -v ~/logs:/usr/src/app/logs --name node-app examplenode

Quindi ora possiamo eseguire la nostra app Node e qualsiasi registro verrà archiviato nel computer host, anziché all'interno del contenitore Docker.

Nota che il examplenode l'app non genera alcun accesso in /usr/src/app/logs , è solo un esempio e dovresti prima impostare la registrazione.

I dettagli sul volume verranno elencati quando esegui docker inspect sul nome del contenitore, in "Supporti":

"Mounts": [
    {
        "Type": "bind",
        "Source": "/Users/flavio/logs",
        "Destination": "/usr/src/app/logs",
        "Mode": "",
        "RW": true,
        "Propagation": "rprivate"
    }
],

Riesci a vedere "Type": "bind" ? Ciò significa che abbiamo creato un bind mount .

Ora parliamo di Volumi .

La differenza tra Bind Mounts e Volumi è che creando volumi, Docker memorizzerà i dati in una cartella che gestisce, il che significa che si occuperà delle autorizzazioni e della proprietà dei file e ti fornirà gli strumenti per gestire quei volumi. Sebbene i mount bind siano basati sui percorsi del filesystem e Docker non può fornire gli strumenti che li circondano.

Ad esempio, Docker ti consente di rimuovere tutti i volumi inutilizzati eseguendo docker volume prune o docker system prune --volumes .

Per creare un volume, dobbiamo prima eseguire docker volume create :

docker volume create logs

Ora puoi usare docker volume ls e docker volume inspect per ottenere più dati sui volumi di sistema:

Ora esegui docker run con l'opzione -v logs:/usr/src/app/logs (comunica il nome del volume invece di una cartella)

docker run -d -p 80:3000 -v logs:/usr/src/app/logs --name node-app examplenode

Ora è in esecuzione docker inspect sull'immagine mostrerà il volume montato:

"Mounts": [
    {
        "Type": "volume",
        "Name": "logs",
        "Source": "/var/lib/docker/volumes/logs/_data",
        "Destination": "/usr/src/app/logs",
        "Driver": "local",
        "Mode": "z",
        "RW": true,
        "Propagation": ""
    }
],

Vedere? Ora i log verranno archiviati in /var/lib/docker/volumes/logs/_data cartella.

I volumi saranno essenziali quando, ad esempio, sarà il momento di distribuire un container su un servizio cloud.

È possibile rimuovere un volume che esegue docker volume rm <name> .


Docker
  1. Come installare WordPress utilizzando Docker

  2. Come eseguire un programma all'interno di un contenitore Docker?

  3. Come SSH in un contenitore Docker

  4. Come assegnare un IP statico a un contenitore Docker

  5. Come elencare i contenitori Docker

Come eseguire Grafana in un contenitore Docker

Come aggiungere un volume a un contenitore Docker esistente

Come copiare file con Docker cp nel tuo Docker Container

Come configurare un container Docker Apache

Come copiare file tra host e contenitore Docker

Come eseguire i contenitori Docker