Implementieren von Zeitbefehlen in Docker auf Elastic Beanstalk

9

Ich habe einen Django-Dienst innerhalb von Docker, den ich für AWS Elastic Beanstalk bereitstelle.

Ich möchte meine Datenbankmigrationen zur Bereitstellungszeit ausführen

Wenn ich als "Python-Projekt" in EB bereitstellen würde, könnte ich Folgendes in meinem .ebextensions :

haben %Vor%

Jedoch sind container_commands für die EC2-Instanzen - und es ist im Docker-Container , dass ich meinen Code usw. habe.

Dinge, die ich schon gesehen habe

  • Ich kann es nicht einfach zu meinem Dockerfile hinzufügen, da es bei der Durchführung von Migrationen nur darum geht, auf der angehängten RDS-Instanz (von der Umgebung bereitgestellt) zu arbeiten - nicht wirklich "Bestandteil des Docker-Images"

  • Es scheint nichts Nützliches zu geben, das ich zu Dockerrun.aws.json

  • hinzufügen kann

Hacky-Optionen, die ich bisher gefunden habe

  • Ich könnte vielleicht den Docker-Bildnamen in meinem container_commands identifizieren und dann docker run -ti $container-name python manage.py migrate usw., aber keine Ahnung wie und es fühlt sich schrecklich hacky an

  • Ich könnte die Migrationen manuell ausführen

  • Ich könnte CMD gunicorn $etc durch CMD $script ersetzen, wo $script Migrationen anwendet und dann Gunicorn startet.

    • Das ist das Geringste, was ich bisher herausgefunden habe, und was ich als Notlösung vorhabe.
    • Das bedeutet: "Versuche, Migrationen jedes Mal anzuwenden, wenn ich eine Instanz starte", die mich nicht glücklich und zufrieden macht.

Ideen sehr willkommen bitte!

    
Kristian Glass 19.05.2015, 09:50
quelle

2 Antworten

0

Ich denke, die Verwendung von ENTRYPOINT in Dockerfile könnte Ihr Problem lösen.

Entweder können Sie ein Skript (das sich um Datenbankmigrationen kümmert, einen Webserver und andere Plausibilitätsprüfungen starten), die in Ihrem Container-Image erstellt wurden, aufrufen und dieses Skript in Dockerfile ENTRYPOINT aufrufen.

%Vor%

Auf diese Weise wird das Skript nur ausgeführt, wenn Sie einen Container dieses Bildes erstellen.

Oder führen Sie die beiden Befehle (Python manage.py migrate & amp; & amp; & ndash; httpd start) mit ENTRYPOINT

aus     
VDR 19.05.2015 10:46
quelle
0

Sie könnten ein post-deploy-Skript wie folgt in Ihre .extenxtensions einfügen:

%Vor%

Ich habe nur das Leader-Bit eingefügt, für den Fall, dass Sie eine Load-Balanced-Umgebung verwenden. Es werden keine Migrationen auf mehreren Servern gleichzeitig ausgeführt. Dies kann auch für den Befehl collectstatic verwendet werden.

    
ARJMP 25.03.2018 04:31
quelle