Come modificare la configurazione dei contenitori Docker in esecuzione

0
680

I container Docker vengono generalmente trattati come immutabili una volta avviata l'esecuzione . Tuttavia, puoi aggiornare alcuni parametri di configurazione in modo dinamico, come il nome del contenitore e i suoi limiti di risorse hardware.

In questa guida, ti mostreremo come utilizzare i comandi Docker integrati per modificare i parametri selezionati dei contenitori in esecuzione. Esamineremo anche cosa non dovresti modificare e una soluzione alternativa che puoi utilizzare se ritieni di doverlo fare.

Rinominare un contenitore

La modifica più semplice è rinominare un contenitore creato. I nomi vengono assegnati tramite il flag –name per l'esecuzione della finestra mobile. Quando non viene fornito alcun nome, il demone Docker ne assegna uno casuale. È possibile utilizzare i nomi per fare riferimento ai contenitori nei comandi Docker CLI; la scelta di un appropriato memorabile evita di eseguire docker ps per trovare il nome o l'ID assegnato automaticamente a un container.

Il comando docker rename viene utilizzato per modificare i nomi dei container dopo la creazione. Sono necessari due argomenti, l'ID del contenitore di destinazione o il nome corrente e il nuovo nome da assegnare:

# docker rename <ID o nome di destinazione> <nuovo nome> docker rinomina old_name new_name

Modifica della politica di riavvio

Le politiche di riavvio determinano se i contenitori devono avviarsi automaticamente dopo il riavvio dell'host o l'avvio del daemon Docker. I quattro criteri disponibili ti consentono di forzare l'avvio, l'arresto o l'avvio condizionale del contenitore in base al codice di uscita precedente del contenitore o allo stato di esecuzione.

Pubblicità

Docker supporta la modifica al volo dei criteri di riavvio. Ciò è utile se stai pianificando di riavviare il tuo host o il daemon Docker e desideri che un determinato contenitore rimanga fermo – o avvia automaticamente – dopo l'evento specifico.

aggiornamento della finestra mobile –restart a meno che non venga interrotto demo_container

L'esempio sopra cambia la politica di riavvio di demo_container a meno che non venga interrotto. Questa politica fa sì che il contenitore inizi con il demone a meno che non sia stato interrotto manualmente prima dell'ultima uscita del demone.

Modifica dei limiti delle risorse hardware

Il comando docker update può essere utilizzato anche per modificare i limiti delle risorse applicati ai contenitori. Devi passare uno o più ID o nomi di contenitori, insieme a un elenco di flag che definiscono i limiti da impostare su tali contenitori.

I flag sono disponibili per tutti i limiti di risorse supportati da docker run. Ecco un elenco sintetico delle opzioni che puoi utilizzare:

  • –blkio-weight – Modifica il peso relativo del blocco IO del contenitore.
  • –cpus – Imposta il numero di CPU disponibili per il container.
  • –cpu-shares– Imposta il peso relativo della quota CPU.
  • –memory – Modifica il limite di memoria del contenitore (ad es. 1024 M).
  • –memory-swap – Configura la quantità di memoria che il contenitore può scambiare su disco; utilizza una dimensione come 1024M per impostare un limite specifico o -1 per uno scambio illimitato.
  • –kernel-memory – Modifica il limite di memoria del kernel del contenitore. I contenitori privi di memoria del kernel possono avere un impatto negativo su altri carichi di lavoro sulla macchina host.
  • –pids-limit – Configura il numero massimo di ID processo consentiti all'interno del contenitore, limitando il numero di processi che possono essere avviati.

Ecco un esempio di utilizzo dell'aggiornamento Docker per modificare il limite di memoria e Conteggio CPU per due dei tuoi contenitori:

aggiornamento finestra mobile –cpus 4 –memory 1024M first_container second_container

Tutti i flag disponibili tranne –kernel-memory possono essere usati con contenitori Linux in esecuzione. Per modificare il limite di memoria del kernel, devi prima arrestare il contenitore con Docker Stop.

Pubblicità

Attenzione al fatto che nessuno di questi flag è attualmente supportato per i contenitori basati su Windows. Tuttavia funzioneranno con container Linux in esecuzione su una macchina host Windows.

Quando non utilizzare questi comandi?

I comandi di aggiornamento della finestra mobile e di ridenominazione della finestra mobile devono essere utilizzati con i contenitori che hai creato manualmente tramite l'esecuzione della finestra mobile. Fai attenzione a non usarli con contenitori che provengono da altri strumenti come docker-compose.

La modifica del nome di un contenitore potrebbe renderlo non rilevabile dallo strumento di origine, danneggiando potenzialmente altri componenti dello stack. Inoltre, se stai definendo in modo dichiarativo i limiti delle risorse in un file docker-compose.yml, eseguendo nuovamente il comando docker-compose up riapplica quei limiti originali al tuo contenitore.

Pertanto, dovresti attenerti alla tua soluzione di gestione dei container esistente se ne stai utilizzando una. Per Compose, ciò significa modificare i nomi dei contenitori e i limiti delle risorse nel file docker-compose.yml, quindi eseguire docker-compose up -d per applicare automaticamente la modifica. Ciò ti assicura di non aver vinto container orfani involontariamente o di causare effetti collaterali non intenzionali.

Che dire di altre proprietà (immagine/porte/Volumi)?

I limiti hardware, le politiche delle risorse e i nomi dei contenitori sono gli unici parametri di configurazione che la Docker CLI consente di modificare. Non puoi modificare l'immagine di un container in esecuzione; né puoi modificare facilmente altre opzioni come i collegamenti e i volumi delle porte.

Dovresti creare un altro contenitore se questi valori diventano obsoleti. Distruggi la tua istanza corrente e utilizza Docker Run per avviare una sostituzione con la tua nuova immagine e le impostazioni corrette.

Pubblicità

Poiché i contenitori sono pensati per essere apolidi ed effimeri, dovresti essere in grado di sostituirli in qualsiasi momento. Utilizzare i volumi per archiviare i dati del contenitore persistenti; questo meccanismo ti consente di ricollegare i file con stato al nuovo contenitore ripetendo i flag -v passati al comando docker run originale:

docker run -v config-volume:/usr/lib/config –name demo esempio-immagine :v1 docker rm demo # Dati esistenti in /usr/lib/config mantenuto docker run -v config-volume:/usr/lib/config –name demo2 esempio-immagine:v2

Zona di pericolo: modifica di altre proprietà del container

Sebbene tu debba mirare a sostituire i contenitori ove possibile, è possibile modificare le proprietà di quelli esistenti modificando direttamente i file di configurazione di Docker. Fai attenzione quando usi questo metodo: è del tutto non supportato e una modifica fuori luogo potrebbe danneggiare il tuo contenitore.

Sebbene questa opzione fornisca un modo per modificare arbitrariamente i contenitori esistenti, non funzionerà finché stanno correndo. Utilizza il comando docker stop my-container per interrompere il contenitore che desideri modificare, quindi continua ad apportare le modifiche.

I file di configurazione del contenitore hanno il seguente percorso sul tuo host:

/var/lib/docker/containers/<id contenitore>/config.v2.json

Devi conoscere l'ID completo del contenitore , non la versione troncata mostrata da docker ps. Puoi utilizzare il comando docker inspect per ottenere questo:

docker inspect <breve id o nome> | qq | grep Id

Una volta che sei arrivato a config.v2.json di un contenitore, puoi aprirlo in un editor di testo per apportare le modifiche necessarie. Il JSON archivia la configurazione del contenitore creata durante l'esecuzione della finestra mobile. Puoi modificare il contenuto per alterare proprietà come binding di porta, variabili di ambiente, volumi e punto di ingresso e comando del contenitore.

Pubblicità

Per aggiungere un binding di porta, trova la chiave PortBindings nel file, quindi inserisci un nuovo elemento nell'oggetto:

{ “PortBindings”: { “80/tcp”: { “HostIp”: “”, “HostPort”: “8080” } } }

Qui la porta 80 nel container è vincolata alla porta 8080 sull'host. È altrettanto semplice aggiungere variabili di ambiente – trova la chiave Env, quindi inserisci i nuovi elementi nell'array:

{ “Env”: [ “FOO=bar”, “CUSTOM_VARIABLE=example” ] }

Una volta terminate le modifiche, riavvia il Servizio Docker e il tuo container:

sudo service docker restart docker start my-container

Il container verrà ora eseguito con la sua configurazione aggiornata.

Conclusione

< p>I container Docker sono pensati come unità temporanee che si sostituiscono quando la loro configurazione diventa obsoleta. Nonostante questa intenzione, ci sono scenari in cui è necessario modificare un container esistente. Docker gestisce i casi d'uso più comuni – modifiche al nome e modifiche al limite delle risorse in tempo reale – tramite i comandi CLI integrati come l'aggiornamento della finestra mobile.

Quando desideri modificare un'altra proprietà, prova sempre a sostituire il contenitore come prima linea di condotta. Ciò riduce al minimo il rischio di rottura delle cose ed è in linea con il modello di immutabilità di Docker. Se ti trovi in ​​una situazione in cui un container esistente deve essere modificato, puoi modificare manualmente i file di configurazione interni di Docker come descritto sopra.

Infine, ricorda che i container gestiti da altri strumenti dell'ecosistema come Docker Compose dovrebbe essere modificato usando quei meccanismi. Altrimenti potresti scoprire che i contenitori sono inaspettatamente orfani o sovrascritti se lo strumento non è a conoscenza delle modifiche che hai apportato.