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

Einführung in das Enctype-Attribut des Form-Tags und seine Anwendungsbeispiele

Enctype: Gibt den Kodierungstyp an, der vom Browse...

Tutorial zur Installation und Deinstallation von Python3 unter Centos7

1. Installieren Sie Python 3 1. Installieren Sie ...

So verwenden Sie MySQL, um die Datengenerierung in Excel abzuschließen

Excel ist das am häufigsten verwendete Tool zur D...

Erfahren Sie in einem Artikel mehr über JavaScript-Closure-Funktionen

Inhaltsverzeichnis Variablenbereich Das Konzept d...

So erweitern Sie den Linux-Swap-Speicher

Swap-Speicher bedeutet hauptsächlich, dass das Sy...

Tutorial zur Verwendung von Docker Compose zum Erstellen von Confluence

Dieser Artikel verwendet die Lizenzvereinbarung „...

Verstehen Sie das elastische CSS3 FlexBox-Layout in 10 Minuten

Grundlegende Einführung Merkmale Flexbox ist ein ...

Hinweise zum virtuellen Dateisystem des Linux-Kernel-Gerätetreibers

/******************** * Virtuelles Dateisystem VF...

Grundlegende Implementierung der AOP-Programmierung in JavaScript

Einführung in AOP Die Hauptfunktion von AOP (Aspe...

Lernen Sie MySQL auf einfache Weise

Vorwort Die Datenbank war schon immer meine Schwa...

Implementierung der Nginx-Domänennamenweiterleitung für den HTTPS-Zugriff

Ein Wort vorab: Plötzlich erhielt ich die Aufgabe...