2016-05-15 4 views
3

Ich bin ein Neuling für Docker.Docker - Wie fügt man dem vorhandenen Docker-Image neue Python-Abhängigkeiten hinzu?

Ich habe Schwierigkeiten mit Tensorflow Docker in meinem Windows 10 OS.

Als ich den tiefen Lernkurs der Udacity folgen, habe ich den tensorflow Docker nach der instruction heruntergeladen und versucht, die erste Aufgabe zu starten.

Es konnte jedoch nicht gestartet werden, da das Docker-Abbild das scikit-learn Paket fehlte.

Also im Grunde, was ich tun, um dieses Problem zu überwinden, ist ich zum ersten Mal mein Docker Bild laufen:

docker run -it -p 8888:8888 b.gcr.io/tensorflow/tensorflow /bin/bash 

und dann laufe ich:

pip install -U scikit-learn 

und dann laufe ich (vielleicht nicht 100% Korrekt aber etwas wie):

./run_jupyter.sh 

, um das iPython-Notizbuch zu starten, um meine Aufgabe weiterzuführen.

Meine Frage ist einfach:

wie kann ich diese Änderung speichern, die ich auf diesem Docker Bild aufgetreten so dass ich diesen Schritt nicht jedes Mal wiederholen, muss ich das Notebook neu zu beleben haben?

Kann ich dies tun, indem ich die docker-Konfigurationsdatei ändere?

Antwort

3

Sobald Ihr Container im richtigen Zustand ist (scikit-learn ist installiert, wird das Skript ausgeführt), stoppen Sie es (docker stop) und commit es als ein neues Bild.

Siehe docker commit, um die Änderungen oder Einstellungen eines Containers in ein neues Image zu übernehmen.

Dann können Sie das neue Bild (mit den gleichen Parametern wie zuvor) ausführen, außer dass der Container, der aus diesem neuen Bild erstellt wurde, die vorherigen Schritte bereits dort hat.

Aber der andere Ansatz besteht darin, Ihr Bild aus der tenserflow udacity Dockerfile aufzubauen.

FROM gcr.io/tensorflow/tensorflow:latest 
MAINTAINER Vincent Vanhoucke <[email protected]> 
RUN pip install scikit-learn 
RUN rm -rf /notebooks/* 
ADD *.ipynb /notebooks/ 
WORKDIR /notebooks 
CMD ["/run_jupyter.sh"] 

Dieses Bild führt standardmäßig den richtigen Befehl aus.

+0

Vielen Dank VonC. Das ist sehr hilfreich. Aber in der Bash-Shell, wenn ich docker Stop Befehl gebe, erkennt es nicht "Docker". Sollte ich zuerst die Shell verlassen und dann docker commit eingeben? – user8079

+0

@ user8079 Ja, docker stop wird in der Host-Shell eingegeben, nicht in der Container-Shell. – VonC