2015-06-25 10 views
5

Ich möchte meine App mit Docker testen. Also, ich habe dies in Dockerfile:Große Größe von Python Bild in Docker

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

test.py:

print(123) 

Dann laufe ich:

docker build -t my_test_app . 

Also, ich habe ein großes Bild. docker images zurück:

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

Warum ist die Dateigröße so groß?

Ist diese Dateigröße normal?

Antwort

2

Ich habe gerade auf meiner Maschine das Standard-Ubuntu überprüft: trusty Bild ist 188 MB und das Bild mit allen Python Zeug ist 480MB. Ich sehe sehr oft 800MB Bilder, das sind normalerweise solche, die eine sinnvolle Anwendung enthalten.

Allerdings basieren diese Bilder auf unseren privaten Bildern, das offizielle Docker-Bibliotheksbild scheint aus irgendeinem Grund viel größer zu sein. Sie sind sich dieser Tatsache bewusst und versuchen sie zu reduzieren. Sehen Sie sich die Diskussion über das Thema an here

Wenn Sie ein bisschen kleineres Bild versuchen, versuchen Sie dieses 'rouge8/pythons' es ist ungefähr 100MB kleiner.

rouge8/pythons latest … 680.3 MB 

Denken Sie daran, Docker Bilder sind als hierarchische Schichtstruktur angeordnet. Wenn Sie also das zugrunde liegende Basisbild für viele Container wiederverwenden, ist die Größe, die jeder einzelne Container hinzufügt, ziemlich klein. Es ist nur der Unterschied zwischen der Basis und dem, was Sie in einen bestimmten Container hinzugefügt haben.

+0

ich Bild von hier - https://registry.hub.docker.com/_/python/ – tim

0

Ja, es ist normale Größe. Das Image enthält ein Betriebssystemabbild und verschiedene Pakete und deshalb die Größe.

1

Sie fügen verschiedene Systempakete für Dinge wie Datenbankclients, Bilddateibearbeitung und XML-Parsing-Bibliotheken hinzu. Dies ist so, es gibt keine zusätzliche Arbeit, die ein Benutzer tun muss, wenn er Python-Pakete für psycopg2, MySQLdb, Pillow oder lxml installieren möchte. Das Hinzufügen dieser zusätzlichen Pakete bedeutet jedoch, dass das Bild dicker wird, was, wenn Sie diese Pakete nicht benötigen, Platzverschwendung wäre.

Sie versuchen auch nicht, Dinge aus der Python-Installation zu trimmen, die nicht wirklich benötigt werden, wie zum Beispiel alle Standardbibliotheks-Testcodeverzeichnisse. Selbst die .pyc-Dateien können so gekürzt werden, dass Speicherplatz eingespart wird, ohne dass sich dies wirklich auswirkt, da eine Webanwendung in der Regel einmal für die gesamte Lebensdauer des Containers geladen wird.

Zum Vergleich, werfen Sie einen Blick auf die 'pythonX.Y-slim' Varianten und deren Größe. Es gibt keine Onbuild-Variante für die schlanken Bilder.

Sie könnten auch meine eigenen Docker Bilder für Python mit gebündelter Apache/mod_wsgi Unterstützung ansehen. Diese werden getrimmt und verlassen sich auf zusätzliche Pakete, die vom Benutzer nur als Build-Hooks installiert werden, wenn dies erforderlich ist. Für diejenigen, die Größe von Python 3.4 onbuild Bild speziell für eine WSGI Anwendung ist:

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

Die Größe gegeben, selbst enthält Apache und mod_wsgi, Ihnen einen richtigen Produktion Grad WSGI Server mit Fähigkeiten gab statischen Dateiinhalt zu handhaben und vieles mehr.

Wenn Sie keine WSGI-Anwendung ausführen, starten Sie stattdessen mit dem Basisimage.

Sie können die mod_wsgi Docker Bilder finden Sie unter:

Verschiedene Blog-Posts darüber, wie diese Bilder für WSGI Anwendungen zu nutzen und den Aufbau Docker Bilder für Python und WSGI Anwendungen gefunden werden kann verlinkt aus der Bildbeschreibung auf Docker Hub. Behalte auch meine Blog-Seite im Auge, da ich im Laufe der Zeit mehr über Docker und Python veröffentlichen werde.

3

Alpine Linux ist eine sehr schlanke Distribution für Docker. Ohne Python sind es ungefähr 5 MB. Mit Python bekomme ich Bilder zwischen 60 und 120 MB. Die folgende Dockerdatei liefert ein 110-MB-Bild.

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"] 

Auch ist es sehr gut erhalten.

0

Sie können versuchen, die Python: {Version} -alpine Version. Es ist viel kleiner:

>> 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 

Zum Zeitpunkt des Schreibens es wie das offizielle Bild sieht supoprts -alpine auf allen Python-Versionen.

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