[PYTHON] Pip installiert privates Repository beim Erstellen von Docker

Bedarf

Beim Erstellen von Docker Ich möchte eine Bibliothek eines privaten Repositorys wie Github oder BitBucket installieren

Bedingungen

Der Schlüssel für den Zugriff auf das private Repository befindet sich unter $ HOME / .ssh

Vorschlag 1

Erstellen Sie lokal ein Rad und kopieren Sie es mit Dockerfile

pip wheel djando (Obwohl Django nicht privat ist)

guter Punkt

Problem

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.

Vorschlag 2

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.

Vorschlag 2-2

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.

Sie können es damit installieren

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

Vorschlag 3

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

Zusammenfassung

Vorschlag 2-2 für den Vertrieb als persönliche Entwicklungsumgebung, Vorschlag 3 für den Produktionsbetrieb ...

Recommended Posts

Pip installiert privates Repository beim Erstellen von Docker
Wenn die Pip-Installation fehlschlägt
Ich habe einen UnicodeDecodeError erhalten, als ich auf Ubuntu Pip installiert habe
Ein Memorandum, wenn bei der Pip-Installation ein Fehler auftritt
Wenn Moos mit Pip installieren
Installieren Sie das Github-Repository mit pip
Pip installiert das GitHub-Repository
Proxy-Fehler beim Ausführen von "pip install"
So installieren Sie ein Paket mithilfe eines Repositorys
Eine Problemumgehung bei der Installation von pyAudio mit pip.
Erstellen Sie ein privates Repository mit AWS CodeArtifact
Fehler beim Installieren eines Moduls mit Python pip
Ändern Sie das Standardreferenz-Repository für die Pip-Installation
Pipenv-Installation mit ssh aus dem privaten Bitbucket-Repository
pip install Geben Sie das Github-Repository als Quelle an
Beseitigt SSL-Fehler bei der PIP-Installation unter Windows.
sudo pip installieren
pip> link> Ist `sudo pip install` immer noch eine kaputte Praxis? <Wie wäre es mit dem Hinzufügen von sudo beim Piping?
Erstellen einer R- und Python Docker-Arbeitsumgebung
Ein Memo zum Erstellen einer Django (Python) -Anwendung mit Docker