2017-12-27 6 views
2

Ich habe eine Nodejs App auf github dockerized. Meine Dockerfile basiert auf den offiziellen Nodejs Images. Der offizielle Knoten-Repo unterstützt nahtlos mehrere Architekturen (x86, amd64, arm). Dies bedeutet, dass ich die gleiche Dockerfile auf verschiedenen Maschinen erstellen kann, was zu unterschiedlichen Bildern für die jeweilige Architektur führt.So automatisieren Multi-Arch-Docker Image erstellt

Also versuche ich die gleichen Architekturen nahtlos für meine App zu bieten. Aber wie? Mein Ziel ist es so viel wie möglich zu automatisieren. Ich weiß, dass ich in der Theorie ein Docker-Manifest erstellen muss, das als Docker-Repo fungiert und die Endbenutzer-Docker-Clients auf ihre geeigneten Bilder umleitet.

Docker-Hub selbst kann ein Github Repo überwachen und einen automatisierten Build starten. Thats würde auf das amd64 Bild aufpassen. Aber was ist mit den verbleibenden Architekturen? Dort gibt es auch den Service "TravisCI", von dem ich denke, dass er sich mit Hilfe von qemu um den Armbau kümmern kann. Dann denke ich, beide Repos könnten dann statisch durch das Manifest-Repo referenziert werden. Aber das lässt immer noch ein paar Architekturen unerfüllt.

Aber die Verwendung mehrerer Dienste/Möglichkeiten zum Erstellen der gleichen App fühlt sich falsch an. Kennt jemand eine bessere und vollständigere Lösung für dieses Problem? Es läuft im Grunde die gleiche Dockerfile durch ein paar Maschinen und notiert sie in einem Manifest.

+0

Auch daran interessiert, wie Menschen das lösen – Chris

+0

Ich werde keine Antwort versuchen, wie ich auch mit diesem kämpfen, endete ich mit echten Geräten und Cron. Siehe https://blog.slucas.fr/blog/docker-multiarch-manifest-hub-1/ – seblucas

Antwort

0

Beginnend mit Docker 18.02 CLI können Sie Multi-Arch-Manifeste erstellen und sie an die Docker-Registrierungsstellen senden, wenn Sie clientseitige experimentelle Funktionen aktiviert haben. Ich war in der Lage, VSTS zu verwenden und nach dem Build eine benutzerdefinierte Build-Aufgabe für Multi-Arch-Tags zu erstellen. Ich folgte diesem Muster.

docker manifest create --amend {multi-arch-tag} {os-specific-tag-1} {os-specific-tag-2} 
docker manifest annotate {multi-arch-tag} {os-specific-tag-1} --os {os-1} --arch {arch-1} 
docker manifest annotate {multi-arch-tag} {os-specific-tag-2} --os {os-2} --arch {arch-2} 
docker manifest push --purge {multi-arch-tag} 

Auf einer Seite beachten, ich die 18,02 Docker CLI für Windows und Linux nicht in meiner benutzerdefinierten VSTS Aufgabe verpackt, so von Docker installieren erforderlich war. Der Manifest-Befehl scheint den Docker-Daemon nicht korrekt zu funktionieren.