Scrittura di un file dockerfile per esportre file nel database in esecuzione del command

Stavo solo provando un tutorial su docker per creare un'image custome, il tutorial è QUESTO .

Quindi fondamentalmente quello che ho fatto è stato appena eseguito il seguente command:

$ docker pull training/sinatra 

Ci sono due modi per build il tuo Dockerfile, scegliendo di usare un Dockerfile personalizzato, quindi, ho creato una nuova directory e ho navigato dentro di esso e ho creato un file di text, come lo è.

 $ mkdir sinatra $ cd sinatra $ touch Dockerfile 

Ho modificato il file docker come segue:

 # This is a comment FROM ubuntu:14.04 MAINTAINER Kate Smith <[email protected]> RUN apt-get update && apt-get install -y ruby ruby-dev RUN gem install sinatra 

Ora ho eseguito il command build,

 $ docker build -t ouruser/sinatra:v2 . 

Ora, se correrei,

 $ docker images 

Farò la mia image personalizzata nei risultati. Beh, ora ho una nuova sfida, ho bisogno di creare un'image di un post postgresql e ho un file chiamato map.osm, ho bisogno di fare quanto segue ora:

Aggiungere un parametro all'image (nel Dockerfile), quindi quando un utente esegue l'image con "run docker … map.osm" la mappa viene importta nel database PostGIS all'interno dell'image.

Sono veramente confuso, come faccio a codificare un file docker in modo tale che quando viene eseguito un command verrà importto un determinato file nel database?

In primo luogo, questo non è il modo giusto per utilizzare il docker. Docker ha l'intenzione di eseguire un'applicazione in modo da avere più controllo su quali applicazioni vengono aggiornate e una migliore gestione del software utilizzato (ad esempio, questo codice utilizza python 3, questo utilizza python 2 ect).

Con quello detto se volete realizzare questo, dovrai capire come funziona Docker.

Ogni volta che inizializza un contenitore da un'image, crea una nuova versione di esso. A causa di questo inizierà il DB o il programma senza impostazioni o dati applicati.

Se vuoi che il tuo database cominci, hai i dati di login e import, allora vuoi creare un file dockerentrypoint.sh e lo script tutto quello.

Quando i contenitori docker iniziano, eseguono il process in primo piano e non lo background. Quindi, una volta che il database viene avviato, verrà eseguito in primo piano del tuo contenitore e non sarai in grado di eseguire ulteriori attività a less che non lo invii allo background. Se si esegue questa operazione, è necessario assicurarsi di ritirare l'attività in primo piano quando si esegue l'esecuzione di eventuali sottotassi. questo perché, una volta completato il process, il contenitore si spegne. Se si desidera che il contenitore rimanga democratizzato, è necessario distriggersre il process del db in primo piano prima di uscire dal tuo script.

Soluzione: Creare uno script di bash personalizzato per init il db e importre il db. Impostare questo script come ENTRYPOINT nel file Dockerfile.