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

Schnelles Verständnis des Vue-Routing-Navigationsschutzes

Inhaltsverzeichnis 1. Globale Wache 1. Globale Fr...

Detaillierte Erklärung zum Festlegen des Kontextpfads in der Webanwendung

URL: http://hostname.com/contextPath/servletPath/...

MySQL 8.0.19 Win10 - Schnellinstallations-Tutorial

Dieses Tutorial enthält das Installationstutorial...

JavaScript zum Erzielen eines einfachen Drag-Effekts

In diesem Artikel wird der spezifische JavaScript...

Lernen Sie, wie Sie Uniapps und Miniprogramme (Bilder und Text) untervergeben

Inhaltsverzeichnis 1. Subunternehmer für Miniprog...

MySQL5.7.27-winx64 Version Win10 Download- und Installations-Tutorial-Diagramm

MySQL 5.7-Installation Wir lernen in der Schule M...

Codebeispiele für allgemeine Docker-Datenvolumenvorgänge

Wenn der Entwickler Dockerfile zum Erstellen des ...

Methode zur Optimierung von MySQL-Gruppenabfragen

MySQL behandelt GROUP BY- und DISTINCT-Abfragen i...

Linux wird geladen, vmlinux wird debuggt

Laden von Kernelsymbolen mit gdb arm-eabi-gdb out...

web.config (IIS) und .htaccess (Apache) Konfiguration

xml <?xml version="1.0" encoding=&qu...

Ubuntu-Grundlagen-Tutorial: apt-get-Befehl

Vorwort Der Befehl apt-get ist ein Paketverwaltun...

Umfassender Vergleich und Bewertung des Vue-Code-Hervorhebungs-Plugins

Inhaltsverzeichnis Umfassender Vergleich Aus der ...

Implementierungs- und Nutzungsszenarien der JS-Anti-Shake-Drosselungsfunktion

Inhaltsverzeichnis 1. Was ist die Anti-Shake-Funk...

So steuern Sie den Anteil untergeordneter Flex-Elemente auf der Hauptachse

Hintergrund Durch das flexible Layout wird eine e...