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

Come montare una directory host in un contenitore Docker

Docker fornisce strumenti per collegare i filesystem dei contenitori e il sistema operativo host che esegue il contenitore, come i montaggi di collegamento e i volumi. Questi possono essere molto utili sia negli ambienti di sviluppo che di produzione.

Perché Mount From The Host?

In genere, con Docker, vorresti che le immagini venissero eseguite indipendentemente dal sistema host. Ad esempio, se desideri aggiornare il codice di un'app o i file di configurazione, probabilmente vorrai creare una nuova versione del contenitore e ridistribuirla. Ciò ti consente di ridimensionare e spostare rapidamente le immagini senza preoccuparti dell'hardware su cui funzionano.

Tuttavia, in un ambiente di sviluppo, essere in grado di montare direttamente una directory per abilitare il ricaricamento a caldo della configurazione o del codice può essere molto utile. Ad esempio, potresti lavorare su un file JS o su un plug-in PHP che puoi semplicemente trascinare e rilasciare nel contenitore. Oppure potresti voler montare un'intera directory di configurazione NGINX per funzionare sul tuo sito web. Qualunque sia il tuo caso d'uso, montare i file non è una cattiva soluzione.

È utile anche in produzione, se disponi di servizi host che dipendono dai file nei contenitori. Ad esempio, potresti disporre di un servizio di acquisizione e aggregazione dei registri che preferirebbe se i file di registro del contenitore si trovassero in una directory accessibile dall'host. Sebbene ci siano probabilmente alcune soluzioni integrate in Docker ai tuoi problemi, a volte è più semplice montare un volume.

Compatibilità con macOS

Nota:poiché i montaggi vengono gestiti tramite l'API Docker, funzioneranno indipendentemente dal sistema operativo host. Tuttavia, macOS ha protezioni aggiuntive e i montaggi al di fuori di alcune directory host potrebbero non riuscire con "montaggi negati" in fase di esecuzione. Ciò include /Users , che copre la maggior parte delle operazioni, ma se necessario puoi risolvere il problema nelle impostazioni Docker in Preferenze> Risorse> Condivisione file aggiungendo la directory di destinazione all'elenco.

Montaggio di una directory host

La creazione di un montaggio vincolante è piuttosto semplice. Aggiungilo con il --mount type=bind flag all'avvio, specificando una directory di origine e di destinazione su cui eseguire il montaggio.

docker run -d 
-it 
--name container 
--mount type=bind,source=/nginxconfig,target=/etc/nginx 
nginx:latest

I montaggi vincolati sono i più semplici, ma Docker fornisce l'API del volume per gestire un po' meglio questo tipo di montaggi. I dati archiviati saranno gestiti da Docker e la directory del volume verrà creata automaticamente nella directory di Docker. Questo potrebbe non essere quello che vuoi se hai in mente una directory esistente, ma questo metodo è migliore poiché non dipende dalla struttura dei file del sistema operativo host.

docker volume create nginx-config

docker run -d 
--name devtest 
--mount source=nginx-config,target=/etc/nginx 
nginx:latest

Puoi anche utilizzare Docker Compose per definire i volumi:

version: "3.0"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - nginx-config:/etc/nginx/
volumes:
  nginx-config:

Questi sono archiviati in un formato standard accessibile a Linux:

/var/lib/docker/volumes/volumeID/_data

Tuttavia, su macOS, dovrai connetterti alla macchina virtuale Docker per poter visualizzare i volumi.

RELAZIONATO: Cosa sono i volumi Docker e come li usi?

Montaggio di singoli file

Il montaggio di intere directory funziona bene quando si desidera modificare molti file di configurazione/codice archiviati sull'host. Tuttavia, a volte potresti voler montare un singolo file da modificare, senza toccare gli altri file.

Per fare ciò, puoi eseguire il contenitore con un montaggio bind, che supporta i singoli file se specifichi il percorso:

docker run -it 
--mount type=bind,source=/path/file.cfg,target=/etc/example/file.cfg 
nginx sh

Se hai molti file da montare in questo modo, puoi inserirli tutti nella stessa directory host e montare quella directory in una posizione diversa nel contenitore. È quindi possibile utilizzare i collegamenti simbolici all'interno del contenitore per collegare i file nella directory montata alla posizione corretta.


Docker
  1. Come eseguire MySQL in un contenitore Docker

  2. Come SSH in un contenitore Docker

  3. Come montare o collegare simbolicamente un singolo file in un contenitore Docker

  4. Come assegnare un IP statico a un contenitore Docker

  5. Come installare Vim in un contenitore Docker

Come eseguire Grafana in un contenitore Docker

Come eseguire SSH nei contenitori Docker [Passo dopo passo]

Come configurare un container Docker Apache

Come copiare file tra host e contenitore Docker

Come eseguire i contenitori Docker

Come SSH in un Docker Container