Docker
Se stai usando Docker per realizzare un servizio al GOLEM, allora dovresti considerare di scambiare quattro chiacchiere col sistemista e di entrare a far parte del gruppo del sistema automatico argilla su git.
Flusso di lavoro
Ho un programma e voglio farne un container docker per usarlo nell'infrastruttura GOLEM. Che fare?
Sono il programmatore:
- Scrivere il Dockerfile per il proprio programma
- Creare l'immagine per il proprio programma
Sono il sistemista:
- Scrivere il docker-compose.yml per il servizio
- Avviare il servizio
Segue un esempio di flusso di lavoro per thttpd.
Dockerfile
Dockerfile FROM alpine:latest RUN apk add thttpd ENTRYPOINT ["thttpd", "-D", "-d", "/html"]
Creare l'immagine e taggarla
docker build --tag hub.docker.golem.linux.it/thttpd:latest .
Creare il servizio
Il servizio si chiamerà webserver.
docker-compose.yml version: "3.3" services: webserver: image: hub.docker.golem.linux.it/thttpd:latest restart: unless-stopped ports: - "8000:80" volumes: - /srv/webserver:/html
dove:
- webserver è il nome del servizio, usato da docker-compose per nominare i container automaticamente
- image immagine docker, con tanto di dominio del repository
- ports sono espresse nella forma host:container
- volumes: usare sempre una cartella nella forma /srv/$nome_servizio, per coerenza
Avvio
docker-compose up
(eventualmente usare anche -d per mandarlo in background)
Sul repository privato:
docker push hub.docker.golem.linux.it/thttpd:latest
Ma se non l'hai mai fatto, la prima volta il repository richiede l'autenticazione:
docker login hub.docker.golem.linux.it
Dove mette i volumi Docker?
Se non si impostano i volumi del conatiner Docker li crea automaticamente in un "suo" percorso. Per sapere dove il container mette i nostri dati si possono utilizzare questi comandi:
Mostrare l'elenco dei container in esecuzione. Da questo elenco si prende l'ID del container che ci interessa.
docker ps
Mostrare l'elenco dei volumi del container. Il risultato sarà in formato JSON. Il parametro ID è quello che abbiamo preso dal docker ps
docker inspect -f 'Template:.Mounts' <ID>
E' possibile usare il comando
docker inspect <ID>
per ottenere l'elenco completo (sempre in formato JSON) delle informazioni di configurazione del container. Tra queste, la lista dei volumi e dei relativi mount point identificate da "Mounts":
Al posto del parametro ID e' sepre possibile utilizzare il nome assegnato al container, nome che è anch'esso reperibile dall'elenco ottenuto con docker ps
.