2015-06-25 33 views
5

Voglio testare la mia app con Docker. Così, ho questo in Dockerfile:Grande dimensione dell'immagine python nella finestra mobile

FROM python:3-onbuild 
CMD [ "python", "./test.py" ] 

test.py:

print(123) 

Poi corro:

docker build -t my_test_app . 

Quindi, ho una grande immagine. docker images ritorno:

REPOSITORY   TAG     IMAGE ID  CREATED VIRTUAL SIZE 
python    3-onbuild   b258eb0a5195 8 days ago 757 MB 

Perché le dimensioni del file sono così grandi?

La dimensione del file è normale?

risposta

2

Ho appena controllato sulla mia macchina l'ubuntu standard: l'immagine fidata è 188 MB e l'immagine con tutte le cose di Python è 480MB. Vedo spesso 800MB di immagini, di solito quelle che contengono un'applicazione significativa.

Tuttavia, queste immagini sono basate sulle nostre immagini private l'immagine della libreria Docker ufficiale sembra molto più grande per qualche motivo. Sono consapevoli di questo fatto e stanno cercando di ridurlo. Guarda la discussione sull'argomento here

Se hai bisogno di un'immagine un po 'più piccola prova questo' rouge8/pythons 'è di circa 100 MB più piccolo.

rouge8/pythons latest … 680.3 MB 

Ricordare che le immagini docker sono disposte come una struttura gerarchica di livelli. Quindi, se riutilizzi la stessa immagine di base sottostante per molti contenitori, la dimensione che ogni singolo contenitore aggiunge è piuttosto piccola. Sarà solo la differenza tra la base più ciò che hai aggiunto nel contenitore specifico.

+0

ricevo immagine da qui - https://registry.hub.docker.com/_/python/ – tim

0

Sì, è normale. L'immagine contiene un'immagine del sistema operativo e vari pacchetti ed è per questo che la dimensione.

1

Aggiungono vari pacchetti di sistema per cose come client di database, manipolazione di file di immagini e librerie di analisi XML. Questo è quindi non c'è lavoro extra che un utente debba fare se vuole installare pacchetti Python per psycopg2, MySQLdb, Pillow o lxml. Aggiungere quei pacchetti extra significa però che l'immagine sarà più grassa, e se non avessi bisogno di quei pacchetti sarebbe uno spreco di spazio.

Inoltre, non tentano di eliminare l'installazione di Python che non è realmente necessaria, come tutte le directory di codici di test della libreria standard. Anche i file .pyc possono essere ritagliati per risparmiare spazio senza alcun impatto reale in quanto un'applicazione web viene caricata generalmente una volta per tutta la vita del contenitore, quindi avere file .pyc non ti avvantaggia molto.

Come confronto, date un'occhiata alle varianti "pythonX.Y-slim" e alla loro dimensione. Non c'è però una variante di onbuild per le immagini snelle.

Si potrebbe anche guardare le mie immagini Docker per Python con supporto Apache/mod_wsgi in bundle. Questi vengono rifilati e si basano su pacchetti aggiuntivi che vengono installati dall'utente come build hook solo se necessario. Per quelli, la dimensione di Python 3.4 immagine onbuild specificamente per un'applicazione WSGI è:

grahamdumpleton/mod-wsgi-docker python-3.4-onbuild ... 409.9 MB 

Le dimensioni dato comprende anche Apache e mod_wsgi, dando un server WSGI grado produzione propria con funzionalità per gestire il contenuto dei file statici e molto altro ancora.

Se non si esegue un'applicazione WSGI, iniziare con l'immagine di base.

Si possono trovare le immagini mod_wsgi docker a:

vari post del blog su come utilizzare queste immagini per le applicazioni WSGI e costruire immagini Docker per Python e le applicazioni WSGI possono essere trovati collegato dalla descrizione dell'immagine sull'hub Docker. Inoltre, tieni d'occhio il mio blog in generale, mentre pubblicherò ulteriori informazioni su Docker e Python con il passare del tempo.

3

Alpine Linux è una distribuzione molto snella disponibile per Docker. Senza Python, è di circa 5 MB. Con Python sto ottenendo immagini tra 60 e 120 MB. Il seguente Dockerfile produce un'immagine di 110 MB.

FROM alpine:3.4 

RUN apk --update add \ 
     build-base python-dev \ 
     ca-certificates python \ 
     ttf-droid \ 
     py-pip \ 
     py-jinja2 \ 
     py-twisted \ 
     py-dateutil \ 
     py-tz \ 
     py-requests \ 
     py-pillow \ 
     py-rrd && \ 
    pip install --upgrade arrow \ 
          pymongo \ 
          websocket-client \ 
          XlsxWriter && \ 
    apk del build-base python-dev && \ 
    rm -rf /var/cache/apk/* && \ 
    adduser -D -u 1001 noroot 

USER noroot 

CMD ["/bin/sh"] 

Inoltre, è molto ben mantenuto.

0

Si può provare il python: versione {versione} -alpine. E 'molto più più piccola:

>> docker image ls |grep python 
python 3.6-alpine  89.4 MB 
python 3.6   689 MB 
python 3.5   689 MB 
python 3.5.2   687 MB 
python 3.4   833 MB 
python 2.7   676 MB 

al momento della scrittura sembra che l'immagine ufficiale supoprts -alpine su tutte le versioni di Python.

https://hub.docker.com/_/python/

Problemi correlati