saverioriotto.it

Come montare una directory host in un contentainer Docker

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

Come montare una directory host in un contentainer Docker

Perché montare dall'host?

In genere, con Docker, si desidera 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, il montaggio dei 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 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 "montaggi negati" in fase di esecuzione . Ciò include /Users, che copre la maggior parte delle operazioni, ma se necessario è possibile risolvere questo problema nelle impostazioni di Docker in Preferenze > Risorse > Condivisione file aggiungendo la directory di destinazione all'elenco.

Montare una directory host

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

docker run -d \
-esso \
--name contenitore \
--mount type=bind,source=/nginxconfig,target=/etc/nginx \
nginx: più recente

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.

volume docker creare nginx-config

docker run -d \
--name devtest \
--mount source=nginx-config,target=/etc/nginx \
nginx: più recente

Puoi anche utilizzare Docker Compose per definire i volumi:

versione: "3.0"
Servizi:
  ragnatela:
    immagine: nginx:latest
    porti:
      - "80:80"
    volumi:
      - nginx-config:/etc/nginx/
volumi:
  nginx-config:

Questi sono memorizzati in un formato standard accessibile a Linux:

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

Montaggio di file singoli

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 singoli file se specifichi il percorso:

docker esegui -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.




Commenti
* Obbligatorio