Beim Erstellen von Docker Ich möchte eine Bibliothek eines privaten Repositorys wie Github oder BitBucket installieren
Der Schlüssel für den Zugriff auf das private Repository befindet sich unter $ HOME / .ssh
Erstellen Sie lokal ein Rad und kopieren Sie es mit Dockerfile
pip wheel djando
(Obwohl Django nicht privat ist)
Beispiel 1: Django auf ein Rad setzen -> Django-1.8.1-py2.py3-none-any.whl python2-3 kompatibel, Betriebssystemunabhängig (beliebig) In diesem Fall gibt es kein Problem,
Beispiel 2: MysqlClient auf das Rad bringen -> mysqlclient-1.3.10-cp27-cp27m-macosx_10_10_intel.whl CPython2.7 begrenzt die Build- und Ausführungsumgebung für macosx10.10. Da Docker Container auf dem Linux-Kernel ausgeführt wird, kann dies den Betrieb beeinträchtigen.
Es wäre schön, es unter Linux zu bekommen und es in ein Rad umzuwandeln, aber es dauerte zu lange und es fiel um.
Betten Sie den Schlüssel in das Bild ein. O'REILLYs Docker-Buch sagt "Tu es nicht". Abgelehnt, weil es für die Sicherheit zu unfreundlich ist.
Ich möchte nicht, dass der Schlüssel dauerhaft im Image verbleibt, daher sollte ich den Schlüssel kopieren und nach der Pip-Installation löschen. Also habe ich ihn geschrieben.
Dockerfile.
COPY id_rsa /root/.ssh/
COPY id_rsa.pub /root/.ssh/
RUN chmod 600 /root/.ssh/id_rsa && \
chmod 600 /root/.ssh/id_rsa.pub && \
echo "Host github.com\n\tStrictHostKeyChecking no\n" >> /root/.ssh/config
RUN pip install -r requirements.txt
RUN rm /root/.ssh/*
So was. Das Zugriffsrecht der Schlüsseldatei muss 600 sein (.ssh ist 700). Wenn HostKeyChecking nicht deaktiviert ist, tritt im Build ein Fehler auf. Entfernen Sie nach Abschluss der Pip-Installation alle Anmeldeinformationen aus dem Image.
Schlüsseldateien befinden sich normalerweise lokal unter $ HOME / .ssh, und Docker-Builds können nur auf das Verzeichnis zugreifen, das die Docker-Datei und die darin enthaltenen Dateien als oberstes Verzeichnis enthält. Daher müssen Sie die Schlüsseldatei kopieren und in einen Bereich bringen, auf den der Docker-Build zugreifen kann. Es ist nicht sehr cool, es dauerhaft zu behalten, daher halte ich es für eine gute Idee, ein Build-Skript zu schreiben, das es nach dem Erstellen vorübergehend kopiert und löscht. Es ist nicht vollständig mit Docker-Befehlen, aber es kann nicht geholfen werden ...
Geben Sie Ihr Bestes nur für die Bibliothek des privaten Repositorys, machen Sie es zu einem Rad, das der Ausführungsumgebung von Docker entspricht, und installieren Sie den Rest aus dem Internet normal im Build.
Es hängt von der Anzahl der Bibliotheken im privaten Repository ab, aber ich fühle mich gut dabei. Brauchen wir aber auch eine Radversionskontrolle ...
Vorschlag 2-2 für den Vertrieb als persönliche Entwicklungsumgebung, Vorschlag 3 für den Produktionsbetrieb ...
Recommended Posts