Seite 4 von 6
Re: Erster Container
Verfasst: So Feb 03, 2019 8:50 pm
von murelli146
Könnte mir bitte jemand einen schupser geben.
Hab debien als container installiert und meine bin hinzugefügt.
Jetzt will ich einen deamon automatisch starten lassen. Doch der systemctl bzw. systemd ist im Docker nicht verfügbar.
Bevor ich anfange systemd im Docker zu installieren frage ich lieber.
Wie geht man mit starten von deamons im Docker um?
Schöne Grüße
Gernot
Re: Erster Container
Verfasst: So Feb 03, 2019 9:01 pm
von MiniMaxV2
Im Normalfall baust du dir für sowas einen eigenen Container. Basis ist dein Debian, packst deine Binaries dazu mit Copy und gibst einen Run Befehl vor, der nach dem Start ausgeführt wird (gerne macht man da ein eigenes Skript was dann gestartet wird). Grade der Copy-Step ist sinnvoll, da der Container selbst im flüchtigen Speicher lebt, wenn es um ein Update oder Rebuild geht. Docker hat da ein etwas anderes Konzept als "echte" virtuelle Maschinen.
Also ich würde mir an deiner Stelle ein Dockerfile zusammen schustern (mit drei Zeilen From, Copy, Cmd bzw. Entrypoint) und fertig

Re: Erster Container
Verfasst: So Feb 03, 2019 9:29 pm
von James_T_Kirk
systemd ist bei docker unüblich und unnötig. Es reicht den jeweiligen Prozess am Ende des Dockerfiles mit dem ENTRYPOINT Befehl zu starten. Jeder Dienst ein eigener Container.
Re: Erster Container
Verfasst: So Feb 03, 2019 11:14 pm
von murelli146
OK Danke für eure Hilfe!
Hab jetzt den Container am laufen. Macht schon Spaß
Mein Dockerfile was funktioniert:
Code: Alles auswählen
FROM debian
COPY root /
RUN /usr/bin/knxdmxd -d -c /etc/knxdmxd.conf -u ip:192.168.1.62 -p /var/run/knxdmxd.pid
Wenn ich statt RUN, ENTRYPOINT eingebe funktioniert es nicht mehr. Werde ich mich noch auseinandersetzen wo der unterschied lie

gt.
Wie überprüfe ich den dienst ? top gibt es auch nicht, jetzt kann ich nur nachsehen ob das Pidfile vorhanden ist.
Wie kann ich den dienst neu starten wenn er beendet wird bzw. Fehler hat (wie bei systemd "restart=on-error")?
Oder ist das so schon ein sauberes Image. Worauf soll ich achten?

Re: Erster Container
Verfasst: Mo Feb 04, 2019 10:59 am
von James_T_Kirk
Also der RUN Befehl wird beim build des Containers (docker build) ausgeführt. Der ENTRYPOINT Befehl beim Start des Containers (docker run xxx).
Wie hast du dein Dockerfile erstellt und ausgeführt?
Re: Erster Container
Verfasst: Mo Feb 04, 2019 11:21 am
von murelli146
Mit folgenden Befehlen.
Code: Alles auswählen
docker build -t knxdmxd-beta .
docker run -it knxdmxd-beta
Container funktioniert und startet den deamon, auch wenn ich den Container über Portainer ändere.
Re: Erster Container
Verfasst: Mo Feb 04, 2019 5:15 pm
von MiniMaxV2
Es macht Sinn, dass es funktioniert -jede Zeile im Dockerfile erzeugt einen intermediate Container, auf dem der Nachfolgende Befehl aufbaut. In dem Intermediate nach run, läuft ein Demon. Da das der letzte Befehl ist, hat der fertige Container auch den laufenden Demon. Nicht schön und auch so nicht gedacht, geht aber.
Nimm lieber folgendes als letzte Zeile:
Code: Alles auswählen
ENTRYPOINT["/usr/bin/knxdmxd","-d","-c","/etc/knxdmxd.conf","-u","ip:192.168.1.62","-p","/var/run/knxdmxd.pi"]
Wie du siehst ziemlich lang und unhandlich. Darum hat man gerne ein Run Skript welches über Entrypoint (ENTRYPOINT[".\run.sh"] aufgerufen wird und dann die Parameter zusammenbaut aus z.b. Umgebungsvariablen (bei dir IP wäre ein Kandidat).
Re: Erster Container
Verfasst: Mo Feb 04, 2019 5:51 pm
von murelli146
Danke langsam lichtet sich der Nebel

Re: Erster Container
Verfasst: Di Feb 05, 2019 12:59 pm
von murelli146
Würde doch nochmal Hilfe benötigen.
Habe mich mit dem entrypoint gespielt doch es funktioniert einfach nicht.
Mit RUN läuft der Container, mit entrypoint beendet er sich gleich wieder nach dem der Deamon gestartet wurde (exit 0 oder so).
Nach ca. 50 versuchen ist mir vorgekommen dass es am Anfang funktioniert hat. Habe mich aber am Anfang mit der Imageerstellung vertan. (statt Image, Container erstellt)
So nochmal von vorne, mache ich bei der Erstellung etwas falsch?
1. Dockerfile anpassen:
Code: Alles auswählen
FROM debian
COPY root /
ENTRYPOINT ["/usr/bin/knxdmxd","-d","-c","/etc/knxdmxd.conf","-u","ip:192.1.1.62","-p","/var/run/knxdmxd.pid"]
2. Image erstellen
3. Container erstellen
Wenn es nicht funktioniert wieder zu Punkt 1. Das Image sollte so doch auch aktualisiert werden?
Ab und zu habe ich über Portainer die Container gelöscht und auch das Image.
Schöne Grüße
Gernot
Re: Erster Container
Verfasst: Di Feb 05, 2019 7:32 pm
von MiniMaxV2
Nimm mal statt dem Flag -it den -d Flag.
-d steht für detached. Dann läuft das ganze im Hintergrund. Kannst dann mit docker ps prüfen.
Dein -it Flag macht eine Interaktive Konsole auf. Brauchst du diese?