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

Come e perché utilizzare un host Docker remoto

La dockerd Il programma CLI è indipendente dal demone Docker che esegue i tuoi container. Sebbene entrambi i componenti di solito vengano eseguiti sul tuo computer locale, puoi eseguire dockerd comandi contro un host Docker remoto.

L'utilizzo di un host remoto può essere utile in alcuni scenari. Potresti configurare un'installazione condivisa di Docker Engine per un piccolo team di sviluppo. Ogni sviluppatore può quindi connettersi ai container remoti con il proprio docker exec locale comando.

Gli host remoti sono più spesso preziosi quando hai un server potente che non viene utilizzato. Se il tuo laptop è lento o sta esaurendo lo spazio di archiviazione, l'utilizzo di un host Docker dedicato sulla tua rete può aumentare notevolmente le prestazioni. Hai ancora tutta la comodità della dockerd locale CLI nel tuo terminale.

Configurazione dell'host remoto

Assicurati di avere Docker installato sul sistema che sarà il tuo host remoto. Hai solo bisogno di docker-cli pacchetto sul tuo computer locale, poiché non eseguirai Docker Engine.

Una nuova installazione Docker fornisce un socket Unix per impostazione predefinita. L'accesso remoto richiede un socket TCP. Esegui dockerd (l'eseguibile del demone Docker) con -H flag per definire i socket a cui vuoi associare.

sudo dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375

Questo comando legherà Docker al socket Unix predefinito e alla porta 2375 sull'indirizzo di loopback della tua macchina. Puoi collegarti a socket e indirizzi IP aggiuntivi ripetendo -H bandiera.

I flag devono essere passati ogni volta che esegui dockerd . Se si desidera che persistano dopo il riavvio, creare un alias di shell o modificare la definizione del servizio Docker. Ecco come puoi ottenere quest'ultimo con systemd , che la maggior parte delle distribuzioni Linux utilizza per la gestione dei servizi.

Modifica /etc/systemd/system/docker.service.d/options.conf (o crealo se non esiste). Trova il [Service] sezione e modificare ExecStart riga:

[Service]
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375

Ricarica il tuo systemd configurazione per applicare le modifiche:

sudo systemctl daemon-reload

Se Docker è già in esecuzione, usa sudo systemctl restart docker per riavviare il servizio. Il demone Docker ora si collegherà alla porta TCP 2375 ogni volta che viene avviato. Assicurati che il traffico verso la porta sia consentito dalla configurazione del firewall. Se stai usando ufw, esegui ufw allow 2375 per aprire la porta.

Connessione all'host remoto

La Docker CLI utilizza il DOCKER_HOST variabile di ambiente per determinare l'host a cui connettersi. Il socket Unix del demone locale verrà utilizzato quando la variabile non è impostata.

Puoi utilizzare un host remoto per una singola dockerd comando anteponendo il DOCKER_HOST variabile:

DOCKER_HOST=tcp://192.168.0.1:2375 docker run httpd:latest -d

Verrà avviato un nuovo contenitore da httpd:latest immagine utilizzando il motore Docker in 192.168.0.1:2375 .

Se intendi eseguire più comandi in una sessione, esporta DOCKER_HOST variabile nella tua shell:

export DOCKER_HOST=tcp://192.168.0.1:2375

docker run httpd:latest -d --name httpd
docker ps
docker rm httpd --force

Puoi creare dockerd usa sempre un host remoto impostando DOCKER_HOST globalmente nel file di configurazione della tua shell. Ecco come lo faresti in Bash:

echo "export DOCKER_HOST=tcp://192.168.0.1:2375" >> ~/.bashrc

Ora il DOCKER_HOST la variabile di ambiente verrà impostata ogni volta che si avvia la shell.

Miglioramento della sicurezza

Il socket TCP di base non è protetto. Chiunque possa raggiungere la tua macchina tramite la rete può utilizzare la presa Docker per controllare i tuoi container.

Docker supporta SSH invece di TCP. Questa è solitamente un'opzione migliore se l'host ha un server SSH disponibile. Impedisce l'accesso agli utenti non autenticati. L'utilizzo di SSH non richiede alcuna configurazione aggiuntiva. DOCKER_HOST ti consente di passare una stringa di connessione SSH:

DOCKER_HOST=ssh://user@hostname docker run -d --name httpd

In alternativa, puoi utilizzare i collegamenti SSH per collegare direttamente il socket Docker Unix dell'host remoto al tuo computer locale:

ssh -L /var/run/docker.sock:/var/run/docker.sock

Ora non è necessario utilizzare DOCKER_HOST affatto. Il docker.sock remoto sarà vincolato alla sua controparte locale. Docker lo rileverà automaticamente come socket Unix standard.

L'utilizzo di una delle soluzioni basate su SSH è il modo migliore per avvicinarsi alla sicurezza del demone Docker. Docker supporta anche TLS se fornisci un'autorità di certificazione e chiavi server e client:

dockerd --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H=0.0.0.0:2375

Ora i client potranno connettersi sulla porta 2375 se presentano un certificato SSL valido considerato attendibile dall'autorità di certificazione ca.pem .

RELAZIONATO: Che cos'è un file PEM e come si usa?

Creazione di contesti

Docker ti consente di impostare diversi "contesti" per la connessione a host diversi. I contesti possono essere utilizzati al posto di DOCKER_HOST variabile d'ambiente. Semplificano il passaggio tra più host remoti.

docker context create --docker host=tcp://192.168.0.1:2375 --description remote
docker context create --docker host=unix:///var/run/docker.sock --description local

Questi comandi creano due contesti diversi:uno per il tuo docker.sock locale e uno per una connessione remota.

Puoi passare da un contesto all'altro usando docker context use comando:

docker context use remote

# Container is started on "remote"
docker run httpd:-latest -d

docker context use local

# Lists containers running on "local"
docker ps

I contesti sono utili quando si lavora con più host Docker. Sono meno complicati che reimpostare continuamente il DOCKER_HOST variabile mentre ti sposti tra host.

Svantaggi degli host remoti

Abbiamo notato in precedenza che un host remoto può migliorare le prestazioni di compilazione. Questa affermazione è vera solo se la macchina che esegue Docker Engine è più veloce dell'hardware locale. Il più grande svantaggio di un host remoto è il sovraccarico aggiuntivo dell'interazione sulla rete. Diventi anche dipendente dalla rete:se perdi la connettività, non sarai in grado di gestire i tuoi container.

Dovresti disporre di una connessione di rete affidabile ad alta velocità se intendi utilizzare un host remoto come server di build principale. La prima docker build stage invia il contenuto del contesto di compilazione della tua immagine (di solito la tua directory di lavoro) a Docker Engine. Questo è veloce quando Docker è in esecuzione localmente, ma potrebbe richiedere molto più tempo per il caricamento su una macchina remota.

L'esposizione di un'istanza del demone Docker sulla rete è un rischio per la sicurezza. È necessario assicurarsi che l'accesso sia limitato agli utenti e ai dispositivi autorizzati. L'esposizione involontaria di un socket daemon Docker potrebbe fornire agli aggressori un accesso illimitato all'host. Docker di solito viene eseguito come root quindi è fondamentale che solo persone fidate possano avviare i container.

Conclusione

La configurazione di un host Docker remoto consente di separare le istanze del container dalla macchina di sviluppo locale. Un server di build Docker dedicato può offrire prestazioni migliorate e maggiore spazio di archiviazione delle immagini.

Dovresti aver cura di controllare la sicurezza della tua implementazione. Un semplice socket TCP potrebbe essere sicuro su una rete privata ma non dovrebbe essere distribuito in nessun ambiente sensibile. L'uso di SSH aiuta a mitigare i rischi se pratichi una buona igiene della sicurezza SSH, come l'autenticazione obbligatoria basata su chiave.


Docker
  1. Come configurare e utilizzare il registro Docker privato

  2. Come installare e ospitare il server OpenVPN con Docker

  3. Come installare e utilizzare Docker in Ubuntu 20.04

  4. Quando e perché usare Docker

  5. Come installare e utilizzare Docker Compose su CentOS

Come installare e utilizzare Docker su Ubuntu 22.04

Che cos'è Docker Compose e come lo usi?

Come utilizzare Docker Cp per copiare file tra host e contenitori

Come copiare file tra host e contenitore Docker

Come installare e utilizzare Docker su Ubuntu 20.04

Come installare e utilizzare Docker su AlmaLinux 8