Wie Docker Befehle anwenden?

  • Hallo Leute,
    mag für einige wohl eine recht dumme Frage sein aber ich komme einfach nich drauf... :S
    Ich habe Docker mal auf meinem MacBook getestet und da konnte ich halt direkt Befehle wie docker run hello-world
    anwenden.


    Hier komme ich einfach nicht darauf wie man docker Befehle anwenden kann. Ich gelange lediglich in die /bin/sh rein.



    Mag mir da bitte jemand sagen wie dies geht? Wäre sehr dankbar.


    Bitte Leute,
    es muss doch jemand geben der weiss wie man dies anwendet. Ich komme nich drauf wie ich die docker run Befehle anwenden kann.


    Ich versuche den Firefox Container zu verwenden. https://github.com/jlesage/docker-firefox
    Um das Problem mit dem default RAM usage von 64mb muss ich es höher stellen.
    Dafür müsste ich dies verwenden:


    Bash
    docker run -d \
        --name=firefox \
        -p 5800:5800 \
        -v /docker/appdata/firefox:/config:rw \
        --shm-size 2g \
        jlesage/firefox

    Bzw. da steht:

    Zitat
    • By adding the --shm-size 2g parameter to the docker run command. Seethe Usage section for more details.
    • By using shared memory of the host, by mapping /dev/shm via the parameter-v /dev/shm:/dev/shm of the docker run command

    Aber wie kann ich dieses docker run command in Container Station verwenden?


    Und wie sind diese Environment Variables anzuwenden?


    Wäre euch sehr dankbar.

  • Also die Befehle kannst du einfach genau so anwenden, wenn du dich per SSH auf deinem NAS einloggst und diese dann ausführst. Wenn du die Weboberfläche der Container Station verwenden möchtest musst du einfach nur den Befehl in die entsprechenden Bestandteile zerlegen -v seht z.B. für "Volume" und kann in den erweiterten Einstellungen zugeordnet werden, wenn du den Container "Erstellungsdialog" siehst. -p steht für "Port" und kann ebenfalls in den Netzwerkeinstellungen verwendet werden.


    Ich frage mich aber, warum du nicht einfach die Browser Station von QNAP verwendest, wenn du einen Browser in einem Container auf deinem NAS möchtest...

  • Oh gott... Danke.. Ich habe bisher immer versucht direkt auf dem Container Station zuzugreifen da auch dort unter Präferenzen -> DockerZertifikat was von Port 2376 steht... Und ich hatte auch immer versucht auf die 10.0.5.x Netz zuzugreifen da es vom Docker ist... Dachte nicht das es über den NAS-SSH auch direkt auf dem Docker zugreift... oder über den Terminal der einzelnen Containern...
    Hatte mich halt verwirren lassen durch den Text:
    "By default, Docker runs via a non-networked Unix socket. It can alsooptionally communicate using an HTTP socket.
    If you need Docker to be reachable via the network in a safe manner, you canenable TLS by specifying the tlsverify flag and pointing Docker’stlscacert flag to a trusted CA certificate."


    Für was ist dann dieses Zertifikat und diese lange Anleitung über den Port 2376?



    Dies mit dem Browser war eher gedacht, dass ich es in Zusammenhang mit JDownloader verwenden will und somit beide untereinander komunizieren können sollten also über eine Weiterleitung für das Click&Load. Und auch eher nur ein Test weil ich schliesslich bei jeder App irgendwelche Environment Variables sehe, aber nicht weiss, was ich beim QNAP Container Station anfangen soll.
    Sind diese Environment Variables nicht die, die man unter "Umgebung" findet?


    Meinst du mit -p "Port" das ich einfach lediglich beim "Erscheinungsdialog" einen Port auf diese Art hinzufüge?


    So wie beim -v "Volume" unter Freigabeornder diese hinzufüge?


    Wenn ich eins dieser Environments wie z.B. SUP_GROUP_IDS anwenden will, muss ich dann beim Erstellen eines Containers diesen Parameter mit dem Wert unter Umgebung eintragen?
    Kann man keine Environments mehr eintragen bei bereits erstellten Container? somit neu erstellen?


    Danke für Deine Antwort. Bist mein Retter

  • Also da in deiner Antwort ziemlich viele Fragen enthalten sind, versuche ich mal das Ganze etwas zu entwirren:


    1. Das Zertifikat ist nur für https zuständig. Das heißt es wird benötigt wenn du z.B. einen Webserver in dem Container betreibst und per Browser darauf zugreifst und keine Meldung a la "diese Website ist unsicher" bekommen möchtest. Für den Heimgebrauch musst du dich zunächst nicht damit befassen...


    2. Ja du kannst ohne weiteres die Docker Befehle direkt auf dem NAS (via SSH) ausführen, da das Betriebssystem des NAS (QTS) der "Host" ist auf dem der Docker Service/Daemon läuft.


    3. Wenn du nur JDownloader und Click & Load verwenden möchtest, sollte das prinzipiell auch mit der Browser Station funktionieren, obwohl ich selbst damit noch keinerlei Erfahrungen habe. Aber Click & Load sendet einfach nur einen http Request an den JDownloader auf einem bestimmten Port, das sollte auch von der Browser Station oder auch jedem anderen Rechner in deinem Heimnetz möglich sein.


    3.

    Sind diese Environment Variables nicht die, die man unter "Umgebung" findet?

    Ja genau, das sind die Variablen die du unter "Umgebung" findest.


    4. Mit den Ports verhält es sich so: wenn du in deinem Docker Befehl eine Anweisung wie -p 8080:3333 hast, dann heißt das so viel wie "leite alles was auf dem Host an Port 8080 geleitet wird, innerhalb des Containers an Port 3333". Die erste Zahl ist also der Port des Hosts, der zweite der im Container. So wird es dann auch in der Container Station angezeigt.


    5. Bei den Volumes ist es ähnlich: -v /share/Downloads:/srv/Downloads erzeugt ein Volume innerhalb des Containers unter /srv/Downloads, welches die Daten vom Host (/share/Downloads) beinhaltet. Diese Volumes dienen dazu Daten zwischen Container und Host auszutauschen.


    6.

    Wenn ich eins dieser Environments wie z.B. SUP_GROUP_IDS anwenden will, muss ich dann beim Erstellen eines Containers diesen Parameter mit dem Wert unter Umgebung eintragen?

    Ja genau.


    7. Nein, bei einem bereits erstellten Container kannst du diese Werte nicht mehr ändern. Wenn du neue Werte vergeben willst, musst du den Container neu erstellen.

  • Sooo.. Nach Tagen rumlesen und nach der eigene geschriebene Doku bin ich nun langsam etwas schlauer geworden. Dies alles muss ich nun nur noch richtig anwenden ^^
    Ich hätte nur noch vielleicht ein paar Kleinigkeiten. Vielleicht magst Du oder sonst jemand noch beantworten.


    Zuerst noch zum Thema "Kann man den Container nachträglich nicht mehr verändern?" Dies habe ich auch im Internet gelesen und auch von Dir bestätigt bekommen, dass man sie neu erstellen müsste jedoch habe ich herausgefunden, dass man beim ContainerStation dennoch selbst die ENV`s verändern kann. Dafür MUSS man den Container Station stoppen da die Einstellungen etc. im Arbeitsspeicher geladen sind und sonst alle manuell geänderte Einstellungen überschreiben würde.
    Danach müsste man unter /share/CACHEDEV1_DATA/VMs/Container/container-station-data/lib/docker/containers gehen.


    Die darunterliegende Ordner sind die Container die man hat. Darin befindet sich die qnap.json das man mit einem Editor öffnen kann. Wenn man sie aufmacht gibt es einen Eintrag "hostname": {AppName}" Bsp.: "hostname": "firefox-1" so weiss man um welche es sich handeln. Sobald man den richtig Ordner der gewünschten App gefunden hat, kann man sich noch die config.v2.json anschauen. Darin sind auch die ENVs. Ich habe mal darin z.B. die Auflösung meines Firefox Browsers geändert, und diese Einstellungen wurden dann auch übernommen. Ob dies alles so gesund ist und nicht irgendwelche Abhängigkeiten bei anderen Images geben würden die nur beim ersten Start gesetzt werden müssen.. weiss ich nicht. Dafür hafte ich nicht :D . Wollte nur meine neue Erkenntnisse teilen. Wie gesagt.. CS stoppen, Änderungen machen, CS Starten, Container starten.



    Soo.. Zu meinen Fragen.: :mcup:


    1. Ich habe gemerkt, dass man nicht einfach so wie beim Virtual Station einen Virtuellen Switch zuweisen kann. Gibt es hier auch die Möglichkeit Netzwerktechnisch die Apps voneinander zu Trennen? Sprich einen anderen VirtualSwitch gewissen Containern zuteilen zu können? Ich habe gelesen, dass man so einen weiteren Daemon Service erstellen müsste. Dachte nur es würde eine einfachere Lösung geben.



    2. Handelt sich bei den --{Befehl} immer um Options für andere Befehle? Bzw.: sind dies immer Parameter die man anderen Befehlen mitgibt? Ich verstehe nicht so ganz wieso es eben z.B.: Die Option -v, aber auch --version gibt wenn es wie es aussieht dasselbe tut.



    Und ja.. Es gibt den Browser Station, jedoch erfüllt dies nicht meine Anforderungen.

    2 Mal editiert, zuletzt von Shinigami ()

  • Besser spät als nie kommt hier noch meine Antwort auf deine Fragen:


    1. Ich glaube du kannst auch dne viruellen Switch mit der CS verwenden, habe aber selbst keinerlei Erfahrung damit. Ich glaube "von Haus aus" haben die Container immer eine 10.x.x. Adresse und sind sozusagen von den anderen getrennt.


    2. Nein die Befehle mit den beiden Bindestrichen sind meist nur die "lange Form". Ob du nun -v /share:/srv oder --volume /share:/srv anwendest ist da egal. Ich glaube das mit der Version ist ein Spezialfall, der nur angewendet wird, wenn sonst keine weiteren Argumente mehr übergeben werden.


    Habe selbst auch noch keine Verwendung für die BS gehabt, dachte nur das würde vielleicht Sachen einfacher machen, aber freut mich, dass du scheinbar dennoch gewillt bist dich mit Docker zu befassen.

  • Danke für deine Antwort. Ich habe es nur einmal geschaft als ich mal nen docker-compose von jemand anderes getestet hatte. Da wurde ein virtual switch erstellt. Muss aber noch einmal schauen wie der dies gemacht hatte :)


    Ich habe noch eine letzte Sache die einfach net klappen will... Bin wohl zu blöd dafür.
    Ich weiss, dass man über CS GUI RAM und auch CPU Usage immer einstellen kann. Ich würde dies gerne voll automatisiert haben und einfach nur eine docker-compose verwenden um dies auch zu setzen. Es gibt einerseits unter der 2.3er Version das shm_size:
    und in der 3er Version das
    deploy: resources: limits: cpus: '0.50' memory: 50MJedoch funktioniert beides nicht. Das mit den deploy liegt daran das es nicht in einem swarm ist und dies habe ich auch nicht hinbekommen... Hast du da nen rat?


    Edit:
    Ok.. scheint wohl nur nicht im CS richtig angezeigt zu werden den unter docker stats wird es richtig angezeigt.

  • Ich weiß da leider auch nicht Bescheid, da ich mich weder mit docker-compose, noch mit CPU/RAM Einstellungen der CS auskenne...

  • Hast du mal docker inspect <container-name> probiert? Damit bekommst du eigentlich alle Infos zu dem Container aufgelistet