2014-10-28 34 views
37

Ho creato un paio di directory diverse sulla mia macchina host mentre cerco di conoscere Docker solo per mantenere organizzati i miei dockerfile. Il mio Dockerfile che ho appena eseguito è il seguente:build contesto per immagine docker molto grande

FROM crystal/centos 
MAINTAINER crystal 

ADD ./rpms/test.rpm ./rpms/ 
RUN yum -y --nogpgcheck localinstall /rpms/test.rpm 

Il mio numero di giri effettivo è solo 1 GB. Ma quando provo a fare sudo docker build -t="crystal/test" ., ricevo l'invio del contesto di build al daemon Docker da 3,5 GB. C'è qualcos'altro di cui non sono a conoscenza mentre continui a creare immagini Docker? La mia memoria si accumula mentre costruisco più immagini nelle mie altre directory sulla mia macchina host?

risposta

91

Il client Docker invia l'intero "build context" al daemon Docker. Quel contesto di costruzione (di default) è l'intera directory in cui si trova lo Dockerfile (quindi l'intero albero rpms).

È possibile impostare un file .dockerignore per far sì che Docker ignori alcuni file. Potresti voler sperimentarlo.

In alternativa, è possibile spostare la cartella rpms una directory sopra il proprio Dockerfile e solo il collegamento simbolico test.rpm nella directory Dockerfile.

+2

Purtroppo sembra che link simbolici non è possibile in questo caso, poiché il 'ADD 'Il comando non segue i collegamenti simbolici durante una compilazione. Vedi: https://github.com/docker/docker/issues/1676 – JimmidyJoo

+2

'.dockerignore' funziona alla grande per me! 10x – ItayB

+0

salvagente! Sviluppatori di Rails: assicurati di aggiungere 'tmp'' log' a '.dockerignore' + + quelli personalizzati – equivalent8

8

L'ho risolto spostando il mio Dockerfile e il docker-compose.yml in una sottocartella e ha funzionato benissimo. Apparentemente la finestra mobile invia la cartella corrente al demone e la mia cartella era di 9 concerti.

1

Nel mio caso, che è stato quando eseguo con sbagliate -f argomenti - senza il percorso di directory in cui si trova Dockerfile

docker build --no-cache -t nginx5 -f /home/DF/Dockerfile /home/DF/ - destra

docker build --no-cache -t nginx5 -f /home/DF/Dockerfile - sbagliato

0

Ho avuto lo stesso problema come FreeStyler. Comunque stavo costruendo da una directory uno dal mio contesto. Quindi gli argomenti -f erano corretti, il contesto non era corretto.

project 
| 
-------docker-dir 

edificio dalla finestra mobile-dir la seguente andava bene

docker build -t br_base:0.1 . 

costruzione dal molo-dir contesto la build è cambiato. Quindi avevo bisogno di cambiare il contesto nel comando. Il contesto è dato dal '.' nel comando sopra.

Il nuovo comando dalla directory del progetto dovrebbe essere

docker build -t br_base:0.1 ./base 

contesto qui è dato dal './base'