I contesti nella Docker CLI forniscono un meccanismo semplificato per interagire con più endpoint Docker. Puoi impostare contesti per ciascuno dei tuoi host e passare da uno all'altro al volo.
Quando un contesto è attivo, Docker indirizzerà tutti i tuoi comandi a quell'host. Se utilizzi principalmente un'installazione Docker locale ma a volte devi avviare i container in produzione, i contesti Docker sono un'opzione a tua disposizione.
Qualsiasi endpoint Docker valido può essere trasformato in un contesto. Puoi collegare le normali installazioni di Docker Engine, i cluster Docker Swarm e i cluster Kubernetes nel cloud. Ciascun contesto memorizzato contiene tutte le informazioni di connessione per l'host di riferimento.
Creazione di un contesto
I contesti sono gestiti con il docker context
comando. Crei nuovi contesti usando docker context create
. Devi fornire un nome per il tuo contesto e la relativa configurazione dell'endpoint.
Ecco come creare un contesto che si connetta a un socket Docker esposto su TCP su un host remoto:
docker context create remote-host --docker host=tcp:///my-remote-host:2735
I contesti usano Docker Swarm come orchestratore di contenitori predefinito. Puoi impostarlo esplicitamente usando un flag:
docker context create remote-host
--default-stack-orchestrator=swarm
--docker host=tcp:///my-remote-host:2735
Per creare una connessione a Kubernetes, cambia il tipo dell'agente di orchestrazione. Devi anche aggiungere il --kubernetes
contrassegnare e specificare il percorso di un file di configurazione Kubernetes:
docker context create kubernetes-host
--default-stack-orchestrator=kubernetes
--kubernetes config-file=/home/username/.kube/config
--docker host=unix:///var/run/docker.sock
Selezione dei contesti
Il contesto attivo viene cambiato utilizzando docker context use
. Passa il nome del contesto che vuoi attivare.
docker context use remote-host
Tutti i successivi comandi CLI verranno eseguiti utilizzando l'endpoint fornito dal nuovo contesto. Il contesto attivo persisterà automaticamente finché non lo modificherai. Per passare a un contesto diverso, esegui docker context use
ancora. Puoi ripristinare il contesto predefinito con il tuo socket Docker locale passando default
come nome del contesto.
Puoi sempre sovrascrivere il contesto selezionato aggiungendo il --context
segnala a qualsiasi comando Docker:
docker run ubuntu:latest --context remote-host
Il DOCKER_CONTEXT
La variabile di ambiente funziona anche come alternativa al --context
bandiera. Entrambi i meccanismi facilitano il passaggio temporaneo a un contesto diverso senza dover eseguire e ripristinare un docker context use
comando.
Usando il DOCKER_HOST
La variabile di ambiente sovrascriverà anche il contesto attivo. Questa variabile obbliga Docker a utilizzare un particolare endpoint del demone invece di quello fornito dal contesto.
Puoi controllare il contesto attivo eseguendo docker context ls
. Questo comando elenca tutti i contesti disponibili nella configurazione della CLI. Il contesto attivo è evidenziato con un asterisco. Per eliminare un contesto, esegui docker context rm
, fornendo il nome del contesto. Non è possibile eliminare il default
contesto.
Sincronizzazione di contesti tra macchine
I file di contesto sono archiviati nella directory di configurazione della Docker CLI. Di solito è $HOME/.docker
su Linux. Troverai i tuoi contesti nei contexts
sottodirectory. Ogni contesto ottiene la propria cartella denominata con un hash univoco. All'interno troverai un meta.json
file che descrive il contesto. Solo i contesti creati hanno file archiviati su disco. Il default
il contesto eredita le impostazioni dalla configurazione del tuo demone Docker.
Se desideri sincronizzare la configurazione del contesto, puoi eseguire il backup dei contexts
cartella per spostarlo su un'altra macchina. Puoi utilizzare un trasferimento Rsync o un repository Git per semplificare gli aggiornamenti regolari. Anche il collegamento simbolico della cartella a una condivisione di rete potrebbe essere un'opzione a seconda delle tue esigenze.
Docker ti consente anche di esportare e importare contesti tramite la CLI:
docker context export my-context
Questo creerà un my-context.dockercontext
file nella tua directory di lavoro. Il file include meta.json
contenuti e alcune informazioni extra, come il nome del contesto. Trasferisci questo file su un'altra macchina ed esegui docker context import my-context.dockercontext
per caricare la configurazione del contesto.
In alternativa, puoi esportare un file di configurazione Kubernetes autonomo per i contesti Kubernetes:
docker context export kubernetes-context --kubeconfig
Questo produrrà un normale file "kubeconfig" compatibile con gli strumenti dell'ecosistema Kubernetes come kubectl
. La possibilità di acquisire un file kubeconfig da un contesto Docker migliora l'interoperabilità della toolchain. Niente all'interno del file sarà specifico per Docker CLI.
Se devi modificare un contesto, utilizza l'docker context update
comando. Questo accetta gli stessi flag di docker context create
. Se stai effettuando aggiornamenti in blocco, puoi modificare il meta.json
file per manipolare direttamente i tuoi contesti. Puoi esaminare il meta.json
di un contesto file dalla CLI con docker context inspect my-context
.
Conclusione
I contesti Docker sono utili quando è necessario distribuire contenitori in più ambienti indipendenti. Puoi configurare i contesti per il tuo socket Docker locale, un server di gestione temporanea del team condiviso e il tuo server Kubernetes di produzione.
Docker ha il supporto integrato per i cloud container Microsoft Azure e Amazon ECS, che possono essere aggiunti anche come contesti. Non c'è limite al numero di contesti che puoi creare, quindi hai una buona versatilità mentre ti muovi tra i tuoi host.
Probabilmente il più grande problema funzionale con i contesti è la possibilità di eseguire accidentalmente un comando nel contesto sbagliato. Se hai dimenticato che sei nella tua production
contesto, eseguendo docker rm database-container
potrebbe avere conseguenze devastanti. In caso di dubbio, esegui docker context ls
prima di controllare ciò che hai selezionato.