Post

Learning Docker - Deploy a Docker Stack

Nel post precedente abbiamo visto come creare un Docker stack. In questo post vedremo come fare il deployment un Docker stack su un server remoto.

Selezionare il corretto docker context

Per fare il deployment di un Docker stack su un server remoto, la nostra VPS, è necessario selezionare il corretto docker context. Un docker context è un insieme di parametri di configurazione che definiscono la connessione a un’istanza di Docker Engine. Per selezionare il docker context corretto, è possibile utilizzare il comando docker context use.

1
docker context use remote-server

Per verificare che il docker context sia stato selezionato correttamente, è possibile utilizzare il comando docker context ls.

1
docker context ls

Attivare lo swarm mode in Docker

Affinché il nostro server remoto possa eseguire un Docker stack, è necessario attivare lo swarm mode in Docker. Lo swarm mode è una funzionalità di Docker che consente di creare un cluster di server Docker e distribuire i container su di essi. Per il nostro scopo, è necessario attivare lo swarm mode sul nostro server remoto, che sarà un nodo sia manager che worker, e non è necessario creare un cluster di server Docker.

Per attivare lo swarm mode, è possibile utilizzare il comando docker swarm init.

1
docker swarm init

Creare un Docker registry

Un registro è un servizio che memorizza e distribuisce immagini Docker. Per fare il deployment di un Docker stack su un server remoto, è necessario creare un registro Docker per memorizzare le immagini dei nostri servizi. E’ possibile utilizzare un registro pubblico come Docker Hub o creare un registro privato.

Attiviamo il servizio di registry Docker sul nostro server remoto.

1
docker service create --name registry --publish published=5000,target=5000 registry:2

e verifichiamo che il servizio sia attivo.

1
docker service ls

o anche

1
2
curl http://localhost:5000/v2/
{}
1
2
curl http://localhost:5000/v2/_catalog
{"repositories":[]}

NOTA IMPORTANTE: il firewall ufw di Ubuntu è bypassato da Docker e quindi il servizio è accessibile da qualsiasi IP. Questo succede perché Docker e ufw utilizzano iptables in modi che li rendono incompatibili tra loro. Maggiori informazioni

Questo post è sotto licenza CC BY-NC-SA 4.0 a nome dell'autore.