Come montare una directory host in un contenitore Docker

0
190

Docker fornisce strumenti per collegare i filesystem dei container e il sistema operativo host in esecuzione il contenitore, come supporti e volumi di rilegatura. Questi possono essere molto utili sia in ambienti di sviluppo che di produzione.

Perché montare dall'host?

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

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

È anche utile in produzione, se si dispone di servizi host che dipendono da file nei contenitori. Ad esempio, potresti avere un servizio di acquisizione e aggregazione dei log che preferirebbe se i file di log del contenitore si trovassero in una directory accessibile dall'host. Sebbene ci siano probabilmente alcune soluzioni pure in-Docker ai tuoi problemi, a volte è più semplice montare solo 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 extra e i montaggi al di fuori di alcune directory host potrebbero non riuscire con “mount negati” in fase di esecuzione. Ciò include /Utenti, che copre la maggior parte delle operazioni, ma se necessario puoi risolvere questo 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 di bind è piuttosto semplice. Aggiungilo con il flag –mount type=bind all'avvio, specificando una directory di origine e di destinazione in cui eseguire il montaggio.

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

I montaggi di associazione sono i più semplici, ma Docker fornisce l'API Volume per gestire un po' meglio questo tipo di montaggi. I dati archiviati verranno 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 usare Docker Compose per definire i volumi:

versione: servizi “3.0” : web: immagine: nginx:latest porte: – volumi “80:80”: – nginx-config:/etc/nginx/volumi: nginx-config:

Questi sono memorizzati 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 fai Li usi?

Montaggio di singoli file

Il montaggio di intere directory funziona bene quando vuoi modificare molte configurazioni /code file archiviati nell'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 Advertisement

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.