Esempio di applicazione multi-container con Docker Compose

Esempio di applicazione multi-container con Docker Compose

Creare un'applicazione moderna che include un server web, un'applicazione backend, e un database, richiede di coordinare diversi componenti software in modo efficace. Docker Compose è uno strumento che semplifica il processo di definizione e gestione di applicazioni multi-container Docker. In questo articolo, esploreremo come configurare un'applicazione che utilizza Nginx come reverse proxy per un'applicazione Node.js, con MySQL come database backend.

Panoramica dell'Architettura

La nostra applicazione sarà composta da tre servizi principali:

  1. MySQL: il database che memorizza i dati dell'applicazione.
  2. Node.js: l'applicazione backend che interagisce con il database.
  3. Nginx: il server web che funge da reverse proxy per l'applicazione Node.js, migliorando la sicurezza e le prestazioni.

Passo 1: Preparazione del Progetto

Crea una nuova directory per il progetto e al suo interno crea le seguenti sotto-directory e file:

  • db: una directory per eventuali script di inizializzazione di MySQL.
  • app: una directory per il codice sorgente dell'applicazione Node.js.
  • nginx: una directory per la configurazione di Nginx.
  • docker-compose.yml: il file di configurazione Docker Compose.

Passo 2: Configurazione di Docker Compose

Il file docker-compose.yml definisce i servizi, le reti e i volumi che compongono l'applicazione. Ecco un esempio di come potrebbe essere configurato:


version: '3.8'
services:
  db:
    image: mysql:5.7
    volumes:
      - db-data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: mydatabase
    networks:
      - app-network

  app:
    build: ./app
    depends_on:
      - db
    environment:
      DB_HOST: db
      DB_USER: root
      DB_PASSWORD: example
      DB_NAME: mydatabase
    networks:
      - app-network

  nginx:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./nginx:/etc/nginx/conf.d
    depends_on:
      - app
    networks:
      - app-network

volumes:
  db-data:

networks:
  app-network:
    driver: bridge

Passo 3: Configurazione dell'App Node.js

Nella directory app, crea un semplice server Node.js che si connette a MySQL e risponde alle richieste HTTP. Usa il modulo express per il server e mysql per connetterti a MySQL.

Passo 4: Configurazione di Nginx

Nella directory nginx, crea un file di configurazione per Nginx, default.conf, che configura Nginx come reverse proxy per l'applicazione Node.js. Il file dovrà indirizzare le richieste al servizio app.

Passo 5: Costruzione e Avvio dell'Applicazione

Dopo aver configurato tutti i componenti, puoi costruire e avviare l'applicazione con Docker Compose eseguendo:


docker-compose up --build

Questo comando costruirà l'immagine dell'applicazione Node.js, scaricherà le immagini di MySQL e Nginx se non sono già presenti, e avvierà i container. I servizi saranno ora accessibili: Nginx ascolterà sulla porta 80 del tuo host, facendo da reverse proxy all'applicazione Node.js, che a sua volta interagisce con il database MySQL.

Conclusione

Hai creato con successo un'applicazione multi-container con Docker Compose, che include un server Node.js, un database MySQL e Nginx come reverse proxy. Questa configurazione offre un solido punto di partenza per sviluppare applicazioni robuste e scalabili.

Torna su