2017-05-18 2 views
0

Angenommen, ich möchte die neueste Version von AwesomeTool in einen Docker-Container (z. B. CentOS) integrieren, für den in keinem Repo RPM verfügbar ist (oder die RPM ist nicht aktuell und ich möchte die neueste Version ausführen) .Erstellen von Software für/in Docker-Containern - wie verwalten?

So lade ich awesometool.tar.gz, auspacken, konfigurieren & & & & make install machen. Dann stelle ich fest, dass es Sachen an allen verschiedenen Orten installiert hat, Bibliotheken, Binärdateien, Symlinks ... und ich muss während eines "Docker-Builds" all dieses Zeug in mein Docker-Bild bringen.

Sollte ich:
1) den Build während der Docker-Image-Build, die Installation aller notwendigen Tools (GCC, machen, etc) im Voraus, vielleicht entfernen sie nach der Installation.
2) Erstellen Sie die Software außerhalb des Images, und suchen Sie dann nach einer Möglichkeit, alle Installationsartefakte in das Image zu kopieren oder zu verpacken (was Sie bei der Erstellung eines RPMs tun würden).

Eine Möglichkeit, (2) einfacher zu machen, wäre die Installation in einem PREFIX und das Kopieren in das Image während des Docker-Builds, aber es müsste an einen übereinstimmenden Speicherort kopiert werden, oder freigegebene Objekte können nicht korrekt verknüpft werden.

Ein Vorteil von (1) ist, dass der Build in der Dockerfile gekapselt ist, aber all diese Build-Artefakte herumliegen können, wenn nicht eine sehr spezifische Bereinigung durchgeführt wird.

Ein Vorteil von (2) ist, dass das Docker-Image sauberer ist, aber externe Build-Schritte und möglicherweise knifflige Arbeit benötigt, um alle Artefakte zu finden, die kopiert werden müssen .... die sich ändern können, wenn eine neue Version von AwesomeTool ist veröffentlicht und muss daher beibehalten werden.

Wie nähern sich andere diesem Problem?

Antwort

0

Ich würde für Option (1) entscheiden. Die Build-Artefakte konnten entfernt werden. Das wichtige Problem hierbei ist, dass die Installation, Kompilierung und Entfernung dieser Artefakte in einem einzigen RUN durchgeführt werden muss, um das Bild kleiner zu machen.

Option (3) wäre, eine RPM-Spezifikation zu erstellen, um das Paket zu erstellen und seine Laufzeitabhängigkeiten anzugeben, dann das RPM zu erstellen und es mit yum zu installieren.

Verwandte Themen