Docker verwendet CMD- oder ENTRYPOINT-Befehle, um mehrere Dienste gleichzeitig zu starten

Docker verwendet CMD- oder ENTRYPOINT-Befehle, um mehrere Dienste gleichzeitig zu starten

Voraussetzung: Celery wird in Django eingeführt. Wie kann beim Starten des Django-Projekts auch der Celery-Dienst gestartet werden?

Beginnen Sie mit der Verwendung des ENTRYPOINT-Befehls

1. Schreiben Sie das Dockerfile

 VON centos:7
 RUN localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
 ENV LC_ALL zh_CN.UTF-8
 KOPIEREN ./hrms $CODE_DIR/hrms/
 KOPIEREN ./run $CODE_DIR/run/
 AUSFÜHREN chmod a+x $CODE_DIR/run/*
 RUN pip3 install -r $CODE_DIR/hrms/requirements.txt
 EXPOSE 8080
 ARBEITSVERZEICHNIS /opt/hrms/hrms/

Sie müssen das Obige nicht lesen, der Schlüssel ist, sich den folgenden Befehl anzusehen

 #Starten Sie einen Dienst mit CMD# CMD ["python3.5", "/opt/hrms/hrms/manage.py", "runserver", "0.0.0.0:8080"] 
 
 #Wenn Sie mehrere Dienste starten, können Sie CMD verwenden, um ein Skript auszuführen und mehrere Dienste in der Skript-CMD-Quelle /opt/hrms/run/entrypoint.sh zu starten.
 
 #Wenn Sie mehrere Dienste starten, können Sie ENTRYPOINT auch verwenden, um ein Skript auszuführen und mehrere Dienste im Skript ENTRYPOINT ["/opt/hrms/run/entrypoint.sh"] zu starten.

Der Unterschied zwischen CMD und ENTRYPOINT besteht darin, dass der CMD-Befehl durch den Befehl in der Datei docker-compose.yml überschrieben werden kann. Sobald der Befehl angegeben ist, wird der CMD-Befehl nicht mehr ausgeführt, während ENTRYPOINT niemals überschrieben werden kann.

Also können wir hier Folgendes tun:

Verwenden Sie CMD, um ein Skript zu starten, und starten Sie dann mehrere Dienste im Skript, z. B. Django, Celery usw. Wenn Sie nur eine Datenbankmigration durchführen möchten, können Sie python manage.py migrate im Befehl in der Datei docker-compose.yml ausführen, sodass der CMD-Befehl nicht ausgeführt wird und nur die Datenbankmigration ausgeführt wird.

2. entrypoint.sh Skriptdatei

#!/bin/bash
 #Django starten
 python3.5 /opt/hrms/hrms/manage.py runserver 0.0.0.0:8080 & 
 
 #Starten Sie den Arbeiter
 celery worker -A celery_tasks.main -l info -f /opt/hrms/logs/celery.log & #Beachten Sie, dass der Protokollspeicherort in einem absoluten Pfad geschrieben werden muss#Start beat
 Sellerie-Beat -A celery_tasks.main -l info

Hinweis: Die ersten beiden Dienste müssen im Hintergrund ausgeführt werden, d. h., fügen Sie danach ein & ein, und der letzte Dienst muss im Vordergrund ausgeführt werden.

Andernfalls wird, wenn alle im Vordergrund ausgeführt werden, nur der erste Dienst gestartet; wenn alle im Hintergrund ausgeführt werden, wird der Container beendet, wenn der letzte Dienst ausgeführt wird.

Zusatzwissen: Nutzung von Dockerfile CMD

Drei CMD-Formate:

CMD ["ausführbare Datei", "Param1", "Param2"] (Exec-Form, bevorzugtes Format)

CMD ["param1","param2"] (als Standardparameter von ENTRYPOINT)

CMD-Befehl param1 param2 (Shell-Form)

Notiz:

Das obige Exec-Formular wird in ein JSON-Array analysiert, was bedeutet, dass Sie doppelte Anführungszeichen anstelle von einfachen Anführungszeichen verwenden müssen.

Das Exec-Formular ruft die Befehlsshell nicht auf.

Beispielsweise wird in CMD [ "echo", "HOME"] die Variable HOME nicht ersetzt. Wenn Sie die Shell verwenden möchten, sollte es so aussehen: CMD [ "sh", "-c", "echo $HOME" ]

In einem Dockerfile sollte nur ein CMD vorhanden sein. Wenn es mehrere gibt, wird nur das letzte ausgeführt.

Beispiele für die Formatverwendung:

CMD [„sh“, „run.sh“]

oder

CMD sh ausführen.sh

Der obige Artikel darüber, wie man mit dem CMD- oder ENTRYPOINT-Befehl mehrere Dienste gleichzeitig in Docker startet, ist alles, was ich mit Ihnen teilen möchte. Ich hoffe, er kann Ihnen als Referenz dienen. Ich hoffe auch, dass Sie 123WORDPRESS.COM unterstützen werden.

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung des Dockerfiles zum Erstellen eines benutzerdefinierten Docker-Images und Vergleich der CMD- und ENTRYPOINT-Anweisungen
  • Detaillierte Erklärung der CMD- und ENTRYPOINT-Befehle im Dockerfile
  • Schritte zum Bereitstellen mehrerer Tomcat-Dienste mithilfe von DockerFile im Docker-Container
  • Installieren des Ping-Tools in einem von Docker erstellten Container
  • Lösen Sie das Problem der Docker-Protokollmontage
  • Beheben Sie das Problem, dass Änderungen an der Docker MySQL-Containerdatenbank nicht wirksam werden
  • Der Docker-Container wird direkt ausgeführt, um den öffentlichen IP-Vorgang über Ping abzurufen
  • Docker-Dateispeicherpfad, Befehlsvorgang zum Starten des Containers abrufen

<<:  Die Prinzipien und Mängel der MySQL-Volltextindizierung

>>:  Hinweise zur Verwendung des Blockquote-Tags

Artikel empfehlen

Sechs Möglichkeiten, die Größe von Docker-Images zu reduzieren

Seitdem ich 2017 mit der Arbeit an Vulhub begonne...

Detaillierte Erklärung der reinen SQL-Anweisungsmethode basierend auf JPQL

JPQL steht für Java Persistence Query Language. B...

Beispiel, wie nginx dynamische und statische Trennung implementiert

Inhaltsverzeichnis Stellen Sie nginx auf Server1 ...

Einführung in die Verwendung von Ankern (benannte Anker) in HTML-Webseiten

Die folgenden Informationen sind aus dem Internet ...

Optimale Webseitenbreite und ihre kompatible Implementierungsmethode

1. Beim Entwerfen einer Webseite ist das Bestimmen...

Installations- und Konfigurationstutorial von MySQL 8.0.16 unter Win10

1. Entpacken Sie MySQL 8.0.16 Der Ordner dada und...

So verwenden Sie ein HTML-Formular mit mehreren Beispielen

Neun einfache Beispiele analysieren die Verwendun...

Beispielcode der Uniapp Vue- und NVUE-Karussellkomponenten

Der Vue-Teil ist wie folgt: <Vorlage> <K...

Linux Cron geplante Ausführung von PHP-Code mit Parametern

1. Verwenden Sie zur Ausführung weiterhin ein PHP...