Vorrei creare una finestra mobile che costruisca un'immagine di Cassandra con uno spazio delle chiavi e uno schema già lì all'avvio dell'immagine.Come creare un Dockerfile per cassandra (o qualsiasi database) che include uno schema?
In generale, come si crea un Dockerfile che costruisce un'immagine che include alcuni passaggi che non possono essere eseguiti fino a quando il contenitore è in esecuzione, almeno la prima volta?
In questo momento, ho due fasi: costruire l'immagine cassandra da una cassandra esistente Dockerfile che associa un volume con i file di schema CQL in una directory temporanea, e quindi eseguire finestra mobile exec con cqlsh per importare lo schema dopo l'immagine ha stato avviato come contenitore.
Ma ciò non crea un'immagine con lo schema: solo un contenitore. Quel contenitore potrebbe essere salvato come immagine, ma è ingombrante.
docker run --name $CASSANDRA_NAME -d \
-h $CASSANDRA_NAME \
-v $CASSANDRA_DATA_DIR:/data \
-v $CASSANDRA_DIR/target:/tmp/schema \
tobert/cassandra:2.1.7
poi
docker exec $CASSANDRA_NAME cqlsh -f /tmp/schema/create_keyspace.cql
docker exec $CASSANDRA_NAME cqlsh -f /tmp/schema/schema01.cql
# etc
questo funziona, ma rende impossibile l'utilizzo con strumenti come Docker comporre in quanto contenitori/servizi legati inizieranno troppo e si aspettano lo schema di essere a posto.
Ho visto un tentativo in cui il processo di cassandra come tentato di essere avviato in background nel Dockerfile durante la compilazione, quindi eseguire cqlsh, ma non penso che abbia funzionato troppo bene.
Qual è il problema nel fare ciò che si fa, il 'docker run', il 2' docker exec' e poi un 'docker commit' e si ha l'immagine che si desidera? Non un processo in un'unica fase? – user2915097
@ user2915097 Mi piacerebbe usare la finestra mobile comporre per creare un cluster di dire un'app e un database. Docker compose crea solo le immagini e le avvia. L'app genererebbe errori in quanto prevedrebbe che il database abbia uno schema. Suppongo che potrei lasciargli generare errori ed eseguire exec docker al termine della composizione, ma non è molto pulito. –
qual è il problema nel fare nel tuo Dockerfile il tuo 'cqlsh -f/tmp/schema/create_keyspace.cql' e l'altro comando? – user2915097