2014-06-16 40 views
5

io costruisco il mio progetto con la seguente Dockerfile:Docker - Contenitori di essere rimosso dopo la costruzione

FROM ubuntu:14.04 

#"updating package repos.." 
RUN apt-get update 

#"installing required packages.." 
RUN apt-get -y install python2.7-dev build-essential python-pip 
run apt-get -y install libjpeg-dev libpng3 libpng12-dev 
run apt-get -y install nodejs npm nodejs-legacy 
run npm install -g peer 
run apt-get -y install supervisor 

#"creating sites folder under /opt" 
run mkdir /opt/sites 

#"copying project into /opt/sites" 
add project-latest /opt/sites/project-latest 

#"copying supervisor conf into /etc/supervisor/conf.d" 
add etc/project.conf /etc/supervisor/conf.d/ 

#"installing virtualenv" 
run pip install virtualenv 

#"change working dir to /opt/sites/project-latest" 
workdir /opt/sites/project-latest 

#"create vritualenv folder named 'env' " 
run virtualenv env 

#"activating environment" 
run . env/bin/activate 

#"installing packages into env from requirements.txt" 
run pip install -r requirements.txt 

#"syncing DB" 
run python manage.py syncdb 

#"migrating DB" 
run python manage.py migrate 

#"update and restart supervisorctl" 
run service supervisor start 
cmd supervisorctl reread 
cmd supervisorctl update 
cmd supervisorctl restart all 

#"expose 8000 and 9000 ports" 
expose 8000 
expose 9000 

e questo è il risultato finale del processo di compilazione:

Successfully built 29dbd8e8bb0a 
Removing intermediate container 8a20545921e0 
Removing intermediate container 0da63841f6ad 
Removing intermediate container fab164fe93c2 
Removing intermediate container 77b61eceef36 
Removing intermediate container 87a24b079f47 
Removing intermediate container cb2520749e30 
Removing intermediate container 9e9c54376433 
Removing intermediate container 130f6eaeed6a 
Removing intermediate container 56f9d93a1e75 
Removing intermediate container 599b10008caa 
Removing intermediate container eab7598a5e95 
Removing intermediate container c31b58fcc405 
Removing intermediate container 8b4a55fbb345 
Removing intermediate container 13b35d86044e 
Removing intermediate container 0ab10eef8f5e 
Removing intermediate container ebf42d9493f1 
Removing intermediate container 70c772c4aa73 
Removing intermediate container fe5039bfbe15 
Removing intermediate container 8f9a93cd5438 
Removing intermediate container 2d673cf029f8 
Removing intermediate container ab8485d09ee7 
Removing intermediate container 0fdfa200ac27 
Removing intermediate container d2d02358e25d 

Se creo un contenitore per l'esecuzione bash all'interno della mia immagine costruita, vedo alcuni dei passi di costruzione dimenticati. Ad esempio, non esiste un ambiente virtuale con il mio file requirements.txt.

E non ho idea di come aprire il mio funzionamento django application dal mio computer host. Non ci sono né porte né informazioni IP.

risposta

8

La rimozione delle immagini intermedie è normale. Se vuoi mantenerli dovrai aggiungere --rm=false al comando di build.

Ci sono un paio di problemi con il Dockerfile. Per i principianti avrà effetto solo l'ultimo CMD (qui sono the docs).

Inoltre, questa linea sembra sospetto:

run . env/bin/activate 

Credo che sia pensata per set-up alcune variabili d'ambiente, ma io non credo che sia il modo in cui funziona docker. Credo che o si deve utilizzare il comando ENV o dovrete eseguire questo ed i seguenti comandi insieme:

run . env/bin/activate; pip install -r requirements.txt; python manage.py syncdb; python manage.py migrate 

Per quanto riguarda le porte, non si esegue l'immagine con -p o -P opzioni?

+0

OK. lo proverò se funziona, lo accetterò. – alix

+1

Sei sicuro? Penso che dopo aver letto la sintassi '--rm = true' le cancelleremo e non le manterremo. Verranno comunque visualizzate quelle immagini intermedie su' immagini docker -a' anche se sono state cancellate? MODIFICA: http://docs.docker.com/reference/commandline/cli/#build Quelli sembrano essere passaggi memorizzabili nella cache: http://docs.docker.com/reference/commandline/cli/#images – clst

+2

Sì, errore stupido, dovrebbe essere '--rm = false'. Inoltre non ricordo quale versione della finestra mobile fosse pertinente in quel momento, ma penso che fosse precedente alla 1.0, quindi alcune delle opzioni e dei valori predefiniti potrebbero essere cambiati nel frattempo. – ivant

Problemi correlati