Un semplice caso d’uso
In questo esempio definiamo tre semplici servizi per una generica applicazione: web-ui per il front-end, web-api per il back-end e mongo per l’istanza di MongoDB, il database.
Ogni servizio della nostra applicazione avrà bisogno di un Dockerfile che verrà buildato per creare l’immagine specifica. Il file si chiama docker-compose.yml o (.yaml, è indifferente), scritto utilizzando il linguaggio YAML [2].
version: '3' services: web-ui: build: context: web-ui ports: - 5000:5000 web-api: build: context: web-api volumes: - ./web-api/data:/data mongo: image: mongo restart: always ports: - 27017:27017 environment: MONGO_ROOT_USERNAME: root MONGO_ROOT_PASSWORD: example volumes: - mongo-data-volume:/data/db volumes: mongo-data-volume:
Il servizio web-ui utilizza un’immagine buildata dal Dockerfile presente nella cartella /web-ui quindi lega il container e l’host della macchina alla porta esposta, la 5000.
Il servizio web-api utilizza un’immagine buildata dal Dockerfile presente nella cartella /web-api. Utilizzando la chiave volumes il sistema monta la cartella ./web-api/data sulla macchina host nella cartella /data all’interno del container, permettendo di modificare i dati al volo senza dover ricostruire l’immagine.
Il servizio mongo utilizza un’immagine di MongoDB per far partire un database. Anche in questo caso viene montato un volume con i dati del database ma Docker utilizzerà un volume condiviso usato appunto per gestire dati in condivisione tra più container.
Per ulteriori approfondimenti sul file Compose vi consiglio la documentazione ufficiale [3].