docker-izing una classica webapp basata su db - contenitori singoli o multipli?

7

Ho una classica webapp Java. È composto da un database (PostgreSQL), un servlet container (Tomcat) e il mio codice (distribuito su Tomcat come un file * .war).

Voglio comprarlo / distribuirlo usando Docker (principalmente per i test per ora), ma non sono sicuro quale sarebbe il modo migliore per "mapparlo".

La mia idea iniziale era di avere un'app-in-a-box - definire un contenitore con Java, Postgres e Tomcat, esponendo solo la porta http.

Un'ulteriore lettura dei documenti Docker mostra che questo, sebbene possibile (installare ed eseguire supervisord come singolo processo in primo piano, farlo avviare sia Postgres che Tomcat) probabilmente non è l'uso previsto. Seguendo lo spirito delle esercitazioni, probabilmente dovrei creare un contenitore per Postgres, un altro per Tomcat e un contenitore di dati per contenere il codice dell'applicazione (i miei file * .war) e il database. Ciò significherebbe più di 3 contenitori (i file db e * .war condividono lo stesso contenitore di dati?)

Qual è la pratica comune qui?

Poiché non ho esperienza precedente con Docker, quali sono le insidie che posso aspettarmi da ciascun approccio?

C'è qualche altro approccio che mi manca?

    
posta radai 28.07.2014 - 16:49
fonte

2 risposte

7

I consigli che ho visto è di avere un contenitore all-in-one: idee sbagliate di Docker :

Misconception: You should have only one process per Docker container!

It's important to understand that it is far simpler to manage Docker if you view it as role-based virtual machine rather than as deployable single-purpose processes. For example, you'd build an 'app' container that is very similar to an 'app' VM you'd create along with the init, cron, ssh, etc processes within it. Don't try to capture every process in its own container with a separate container for ssh, cron, app, web server, etc.

Un modo per pensarci è chiedersi se avresti mai avuto bisogno di un pezzo senza gli altri. OK, forse vorrai che il DB funzioni senza il server delle app, ma con quale frequenza?

    
risposta data 06.08.2014 - 22:25
fonte
9

Docker o no, direi di non mettere sia webapp che server db nello stesso contenitore. Inizialmente, potrebbe funzionare, ma se l'applicazione / aumenta, è necessario ridimensionare il frontend e il database singolarmente. Avere contenitori diversi fin dall'inizio renderà più facile spostarli, duplicarli singolarmente, ecc.

    
risposta data 15.11.2014 - 14:18
fonte

Leggi altre domande sui tag