2014-09-29 10 views
7

Dopo aver letto il introduction of the phusion/baseimage mi sembra di creare contenitori dall'immagine di Ubuntu o qualsiasi altra immagine di distribuzione ufficiale e l'esecuzione di un singolo processo di applicazione all'interno del contenitore è errata.È errato eseguire un singolo processo nella finestra mobile senza fornire i servizi di sistema di base?

Le ragioni principali in breve:

  • No corretto processo init (che gestisce zombie e processi orfani)
  • Nessun servizio syslog

Sulla base di questi fatti, la maggior parte della finestra mobile ufficiale le immagini disponibili sul docker sembrano fare cose sbagliate. Ad esempio, l'immagine MySQL viene eseguita come mysqld come unico processo e non fornisce alcuna funzionalità di registrazione oltre ai messaggi scritti da mysqld a STDOUT e STDERR, accessibile tramite docker logs.

Ora sorge la domanda che è il modo appropriato per eseguire un servizio all'interno del contenitore finestra mobile. È errato eseguire solo una singola procedura di applicazione all'interno di un contenitore di finestra mobile e non fornire servizi di sistema Linux di base come syslog? Dipende dal tipo di servizio in esecuzione all'interno del contenitore?

risposta

1

Dipende dal tipo di servizio in esecuzione.

Docker consente di "creare, spedire ed eseguire qualsiasi app, ovunque" (dal sito Web). Questo mi dice che se una "app" consiste in/richiede più servizi/processi, allora quelli dovrebbero essere eseguiti in un singolo contenitore Docker. Sarebbe un problema per un utente dover scaricare, quindi eseguire più immagini Docker solo per eseguire un'applicazione.

Come nota a margine, suddividere l'applicazione in più immagini è soggetta a derive di configurazione.

Vedo perché si desidera limitare un contenitore di finestra mobile a un processo. Una ragione per cui è tempo di attività. Quando si crea un sistema di provisioning Docker, è essenziale mantenere il tempo di attività di un contenitore al minimo, in modo tale che il ridimensionamento laterale sia veloce. Ciò significa che se riesco a farla franca con l'esecuzione di un singolo processo per contenitore Docker, allora dovrei farlo. Ma non è sempre possibile.

Per rispondere direttamente alla tua domanda. No, non è sbagliato eseguire un singolo processo nella finestra mobile.

HTH

+1

Non sto chiedendo se è corretto eseguire un singolo processo o no, sto chiedendo se è corretto eseguire un processo di applicazione in un contenitore mobile ** senza ** fornendo i servizi di sistema comuni di un Sistema Linux. Ho cercato di migliorare la mia domanda. Grazie per i tuoi sforzi. – CodeZombie

7

Scegli questa discussion per una buona lettura su questo tema. Fondamentalmente, la linea ufficiale del party di Solomon Hykes e docker è che i container docker dovrebbero essere il più vicino possibile ai micro server dei singoli processi. Ci possono essere molti di questi server su un singolo server "reale". Se un processo fallisce, dovresti semplicemente avviare un nuovo container docker piuttosto che provare a configurare l'inizializzazione ecc. All'interno dei container. Quindi, se stai cercando le migliori pratiche canoniche la risposta è sì no servizi linux di base. Ha senso anche quando si pensa in termini di molti container docker in esecuzione su un singolo nodo, si vuole davvero che tutti eseguano le proprie versioni di questi servizi?

Detto questo, lo stato di registrazione nel servizio finestra mobile è famously broken. Anche Solomon Hykes il creatore di docker ammette che è un lavoro in corso. Inoltre, in genere, è necessario un po 'più di flessibilità per una distribuzione nel mondo reale.Di solito, i miei registri vengono montati sul sistema host usando i volumi e ho un daemon di rotazione dei log che gira nel vm dell'host. Allo stesso modo installo sshd o lascia aperta una shell interattiva nel contenitore in modo da poter emettere comandi minori senza riavvio, almeno fino a quando non sono davvero sicuro che i miei contenitori siano a tenuta stagna e non sarà più necessario eseguire il debug.

Modifica: Con la finestra mobile 1.3 e il comando exec non è più necessario "lasciare una shell interattiva aperta".

Problemi correlati