Neue Antwort schreiben 
 
Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Kein mir jemand Docker erklären?
Dirk Offline
Software Archäologe

Beiträge: 14.934
Registriert seit: Jul 2008
Beitrag #1
Kein mir jemand Docker erklären?
Ich raff es nicht. Folgendes Problem, bisher bastel ich auf Windows mit XAMPP an der Homepage. Das wird nicht mehr richtig gepflegt und Mysql ist mal wieder kaputt. Also will ich mich nach was anderem umschauen.

Alle Sagen Docker. Jetzt habe ich mir nen Paket aus nginx, mysql, php und phpmyadmin geschnürt. Aber wo sind meine Dateien? Das ganze scheint ja auf den Linux Subsystem zu laufen.

Bin ich der einzige auf dem Planeten, der einfach nen verficktes Windows Verzeichnis als root für einen Websserver betreiben will? Und warum kann ich keine 2te Datenbank anlegen. Was sind Volumes? Warum alles so abstrahiert?

13.09.2024 09:06
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
tk1908 Offline
Unixer

Beiträge: 7.343
Registriert seit: Apr 2009
Beitrag #2
RE: Kein mir jemand Docker erklären?
Kannst du uns das Dockerfile mal zukommen lassen?

[Bild: Rz3JNLI.gif]
Meine Beiträge stehen unter der MIT-Lizenz:D

(09.04.2016 13:26)tk1908 schrieb:  externe HDD am Router? Klar ich tausch mein Auto gegen nen Tretroller mit Bremsklotz.
(Dieser Beitrag wurde zuletzt bearbeitet: 13.09.2024 10:55 von tk1908.)
13.09.2024 10:55
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Playitlouder Offline
Hier könnte ihre Werbung stehen

Beiträge: 5.241
Registriert seit: May 2010
Beitrag #3
RE: Kein mir jemand Docker erklären?
Den Docker Container kannst du dir vorstellen wie ne minimale VM ohne alles. Also du emulierst nicht nen BIOS, Betriebssystem, Hardware etc. sondern hast nur ne Umgebung in der ne Anwendung laufen kann. Die Anwendung merkt das nicht, dass sie in einem Container läuft und hat die gleichen rechte wie normalerweise, nur halt im Container.

Angenommen du willst jetzt auf einem Server drei verschiedene Versionen einer Software am laufen haben und installierst das ganz normal wirst du schnell Probleme mit Abhänigkeiten etc. bekommen. Außerdem kann ja jedes Programm auch einfach Daten der anderen Version bearbeiten und löschen. Das ist schlecht und das will man vermeiden.

Deshalb bekommt jeder Container ne eigene frische Installation des Base-Images vorgegaukelt und die Daten werden in Volumes gehalten.

Also du kannst in der Shell mal
Code:
docker ps -a
ausführen. Damit siehst du alle vorhanden Container. Die sind per Default alle Einzelgänger und haben nur Internet und sonst nichts (keine Ports offen etc.).

Code:
docker volume ls
Listet alle Volumes der Container. Das ist die Festplatte wo die Daten des Containers liegen.
Mit
Code:
docker volume inspect NAME
siehst du auch wo der Container liegt.

Für sowas wie einen Webserver willst du jetzt aber den Container ja mit deinem Hostsystem teilen. Dafür gibts sogenannte Bind-Mounts. Damit kann man einen Ordner im Container einfach auf einen lokalen Pfad legen und so kannst du und das Programm im Container auf den Pfad einfach zugreifen und da Daten lesen und schreiben.
Und wenn du den Container neu anlegst und den mount wieder angibst sind die Daten dann noch da.
beim Starten vom Container spezifizierst du das einfach so [code]-v /path/to/music/library:/music" Vor dem Doppelpunkt ist der Lokale Pfad und hinter dem Doppelpunkt der Pfad im Container.

Docker ist sehr praktisch wenn mans verstanden hat.
Am besten stellst du dir vor du hast ne Maschine die nur ein Terminal und ne Internetverbindung hat. Alles andere spezifizierst du beim Start des Containers nach. Also welche Ports offen sind, ob irgendwelche Daten mit anderen Maschinen ausgetauscht werden sollen, ob Geräte vom Host an die Maschine durchgereicht werden sollen etc.
Und Container sind dafür gemacht weggeworfen zu sein, alles was du im Container tust aber nicht in einem Volume gespeichert wird ist beim nächsten Erstellen des Containers weg. So sollte man das auch handhaben und nicht im Container mit apt Dinge updaten etc.

Musst mal die offizielle Doku durchschauen. Chatgpt kann dir in der Hinsicht auch fast alles erklären wenn du fragen hast. Sonst Poste auch hier gerne mal dein Dockerfile.

Achja und es gibt auch noch ne Strategie wenn man mehrere Container auf einmal verwalten will, z.B. wenn du 3 Webserver und eine DB Starten möchtest. Nennt sich Docker Compose.

.
13.09.2024 20:30
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Dirk Offline
Software Archäologe

Beiträge: 14.934
Registriert seit: Jul 2008
Beitrag #4
RE: Kein mir jemand Docker erklären?
Das ist schonmal interessant. Ich habe gedacht, dass man die ordner über diese yml Datei definieren muss/kann. Ich finde es auch äußerst verwirrend dass niemand irgendwas mit der oberfläche machen zu scheint und alle nur Konsolenbefehle rauswerfen. werde die datei mal hier reinstellen. aber wie immer falscher Rechner

14.09.2024 10:14
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Arnulf zu Linden Offline
Hat und braucht kein Smartphone!

Beiträge: 6.084
Registriert seit: Oct 2012
Beitrag #5
RE: Kein mir jemand Docker erklären?
(14.09.2024 10:14)Dirk schrieb:  Ich finde es auch äußerst verwirrend dass niemand irgendwas mit der oberfläche machen zu scheint und alle nur Konsolenbefehle rauswerfen.

Das ist im (unixoiden) Server-Umfeld aber Gang und Gebe. Da klickt sich keiner "was zusammen". Eine GUI dient nur dazu, mehrere Console-Fenster auf einem Bildschirm anzuzeigen.



Wie kamst Du eigentlich auf den Thread-Titel "Kein mir jemand Docker erklären?" ?

Wenn es mal "etwas" älter sein darf:
https://www.sackpfeyffer-zu-linden.de/Hardware.html
(Dieser Beitrag wurde zuletzt bearbeitet: 14.09.2024 16:36 von Arnulf zu Linden.)
14.09.2024 16:34
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
winfreak Offline
アンゲシュテルタ

Beiträge: 10.515
Registriert seit: Aug 2008
Beitrag #6
RE: Kein mir jemand Docker erklären?
(14.09.2024 10:14)Dirk schrieb:  Das ist schonmal interessant. Ich habe gedacht, dass man die ordner über diese yml Datei definieren muss/kann. Ich finde es auch äußerst verwirrend dass niemand irgendwas mit der oberfläche machen zu scheint und alle nur Konsolenbefehle rauswerfen. werde die datei mal hier reinstellen. aber wie immer falscher Rechner

Ja, da geht, wenn du mit Docker Compose arbeitest. Letztendlich kannst du aber auch einzelne Container einfach per Command Line starten und über Netzwerke miteinander verbinden.
Um das eben zu vereinfachen, gibts Docker Compose. Da wird dann alles in einer YAML Datei angegeben und gestartet/gestoppt, was das ganze etwas komfortabler macht.

Noch ein wenig komfortabler gehts über Tools wie DDEV.

[Bild: winfreak_32972_14.png]
14.09.2024 20:35
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Dirk Offline
Software Archäologe

Beiträge: 14.934
Registriert seit: Jul 2008
Beitrag #7
RE: Kein mir jemand Docker erklären?
Das Tool versteh ich überhaupt nicht.

Ich wollte mein Compose hier posten. Aber sinnlos. Der haufen Müll funktioniert schon nicht mehr. Erst hatte ich keine Verbindung mehr zum SQL Server herstellen können und jetzt beendet sich der Webserver einfach.

ICh brauche primär einfach:
HMTL Server der auf nen lokalen Ordner zeigt (Wunsch parallelverzeichnis)
PHP 8.3
phpmyadmin
mysql Datenbank

Was mich ankotzt ist das man via google kein Tutorial findet. Jeder bastelt nur irgendwas, postet es, das listing funktioniert nicht und 15 andere Leute haben Ideen

Bin jetzt erstmal damit weiter gekommen. Jetzt mit Apache. Aber jetzt kämpfe ich mit der DB Anbindung

docker compose
Code:
version: "3.6"
services:
    php:
        build: .
        restart: always
        ports:
            - "8080:80"
        volumes:
            - ../winhistory:/var/www/html
            - ./log:/var/log/apache2
    mysql:
        image: mysql:8.0
        restart: always
        ports:
            - "3306:3306"
        command: --default-authentication-plugin=mysql_native_password
        environment:
            - MYSQL_DATABASE=myDb
            - MYSQL_USER=user
            - MYSQL_PASSWORD=test
            - MYSQL_ROOT_PASSWORD=test
        volumes:
            - ./dump:/docker-entrypoint-initdb.d
            - ./conf:/etc/mysql/conf.d
            - persistent:/var/lib/mysql
    phpmyadmin:
        image: phpmyadmin
        restart: always
        ports:
            - 8081:80
        environment:
            - PMA_HOST=mysql
volumes:
    persistent:

dockerfile
Code:
FROM php:8-apache

RUN apt-get update && apt-get upgrade -y
RUN apt-get install sudo unzip wget -y
RUN docker-php-ext-install mysqli

RUN a2enmod rewrite
RUN a2enmod ssl
RUN service apache2 restart
EXPOSE 80

update: Es läuft. Ich glaub es kaum. Mein fehler war das ich per Localhost mich verbinden wollte, es muss aber mysql heißen, weil ... weil ich es so angegeben habe? Die Mysql hat auch was importiert, war aber egal, weil ich jetzt root hatte, konnte ich meine 2 dbs direkt einspeichern. Was Dockerfile macht ist mir ein völliges rätsel und ich weiß gerade nicht, welche php version aktiv ist. aber von den Fehlermeldungen scheint es mindestens 8.1 zu sein. Jede Menge deprecated. muss mal schauen wie ich zu mindest warnings weg kriege. Auf dem Server wie der Testbench.

(Dieser Beitrag wurde zuletzt bearbeitet: 16.09.2024 15:42 von Dirk.)
16.09.2024 10:32
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Nik Offline
Hirsch :3

Beiträge: 2.029
Registriert seit: May 2012
Beitrag #8
RE: Kein mir jemand Docker erklären?
(16.09.2024 10:32)Dirk schrieb:  Mein fehler war das ich per Localhost mich verbinden wollte, es muss aber mysql heißen, weil ... weil ich es so angegeben habe?

Container bekommen automatisch Hostnamen, die zu dem korrespondieren, was du als Namen der Services im "Services"-Abschnitt angibst.
Code:
services:
    php:  #  <--- Hostname
        build: .
    mysql:  #  <--- Hostname
        image: mysql:8.0
    phpmyadmin:  #  <--- Hostname
        image: phpmyadmin

Theoretisch kannst du auch manuell Namen angeben:

Code:
services:
    php:  #  <--- Hostname
        build: .
    mysql:  #  <--- Hostname
        image: mysql:8.0
    phpmyadmin:
        image: phpmyadmin
        container_name: admin  #  <--- Hostname und Container-Name wird hier mit "admin" überschrieben



Noch etwas zu der Sache mit den Versionen von Container-Images:

Dadurch, dass du

Code:
services:
    php:
        build: .

angegeben hast, fängt docker compose beim ausführen von "docker compose build" oder "docker compose up" an, ein Container-Image zu bauen, welches dann auf deinem Server abgelegt und direkt danach gestartet wird.

Im "Dockerfile", welches dafür benutzt wird ("build: ." gibt an, dass es im aktuellen Verzeichnis nach einem Dockerfile suchen soll), hast du folgendes angegeben:
Code:
FROM php:8-apache

Das bedeutet, dass Docker sich als "Grundschicht" erstmal das Image "php:8-apache" runterlädt (per Default von https://hub.docker.com/) und darauf aufbauend deine Befehle, die weiter unten angegeben sind, ausführt. Nachdem die Befehle ausgeführt wurden, wird das Endprodukt (also z.B. installiertes wget, aktiviertes apache2 ssl Modul) als Image abgelegt.

Versionen von Images kannst du pinnen, indem du einen Tag oder einen Digest bzw. Hash angibst. Ein Digest pinnt eine Version sehr sehr spezifisch - sobald sich an einem Image ein Bit ändert, wird der Digest am Ende anders sein.
Welche Versionen von einem Image es gibt, kannst du im Fall von php hier sehen: https://hub.docker.com/_/php/tags
Hier gibt es noch eine bessere Übersicht, aber vorsicht, es ist wirklich viel: https://github.com/docker-library/docs/b...file-links
Wenn du in die Suche nun "8-apache" rein wirfst, wirst du auf folgendes Image stoßen: https://hub.docker.com/layers/library/ph...xt=explore
Das ist das "php"-Image mit dem Tag "8-apache". Viele Anbieter laden verschiedene Varianten hoch, die auf bestimmte Bedürfnisse zugeschnitten sind. In dem Fall beinhaltet dieses PHP-Image das neueste stable PHP in Version 8, und dazu einen Apache-Webserver. Natürlich gibt es dementsprechend auch Varianten, die ein FPM drin haben, oder z.B. eine spezifische ältere Debian-Version als Basis benutzen.

Diese Tags (also z.B. "8-apache") sind frei vergebbare Namen. Mit jedem Update wird das "8-apache" Tag überschrieben und beinhaltet dahinter ein anderes Image. Du kannst dir das wie einen Alias vorstellen, der Name zeigt einfach auf ein ganz bestimmtes Image.
Welches ganz bestimmte Image das ist, kann mit dem Digest angegeben werden. Wenn du ein Image pinnst, sieht das z.B. so aus:
Code:
FROM php:8-apache@sha256:7d01ff3c5de85dd3a2acc1cefb8b220e3086488e5f9d506c8b1e7565aa01cd77
Das ist jetzt aber natürlich für manuelle Bearbeitung extrem nervig. Daher bieten viele Anbieter an mehrere Tags an, die auf das gleiche Image zeigen, immer spezifischer von der Versionierung her.
Du kannst also auch
Code:
FROM php:8.3.11-apache
verwenden, da es zum jetzigen Zeitpunkt auf den gleichen Digest zeigt. Während sich in "php:8-apache" immer die neueste Version 8 mit Bookworm-Basis und Apache befinden wird, ist in "php:8.3.11-apache" immer nur diese eine spezifische Version drin. Analog dazu gibt es auch "php:8.3-apache", in welchem dann regelmäßig neue Patch-Versionen landen.

"Mach das Licht entweder an oder aus, aber nicht beides gleichzeitig" - Nik, 2017
(Dieser Beitrag wurde zuletzt bearbeitet: 18.09.2024 10:24 von Nik.)
18.09.2024 10:22
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Dirk Offline
Software Archäologe

Beiträge: 14.934
Registriert seit: Jul 2008
Beitrag #9
RE: Kein mir jemand Docker erklären?
Wow. Viel Info. Ich habe viele Beispiele gefunden, wo PHP in de Services stand, und habs nicht verstanden, warum das bei dem Beispiel gerade nicht so gemacht wurde. Weil logischer fände ich schon wenn PHP von PHP in der neuesten Version käme. Auf dem Server habe ich ja auch nur begrenzt einfluss drauf und ich nehme immer das aktuelle, weil so edge ist das ganze Winhistory.de Zeug nicht. Jetzt ist mal viel alter Code dagewesen, der sich viel gemeldet hatte.

Bin am Überlegen nochmal weiterzubasteln. Ich könnte doch jetzt einen weiteren Docker Ordner daneben mit anderen Namen machen, und der würde dann eine parallele Maschine zusammenbasteln? Weil die würde ich nicht aufgeben wollen. Das läuft jetzt wirklich, habe noch den Port auf 80 geändert.

Würde es was bringen von php:8-apache auf php:8.3-fpm oder versau ich mir dann alle einstellungen? bzw wenns nen 8.4 gäbe, würde 8-apache (wenn es noch gepflegt wird direkt darauf gehen und php:8.3 wohl eher nicht. PHP scheint da wirklich etwas strange zu sein, habe andere Beispiele angeschaut, aber letztlich wird doch nur über nen dockerfile was nachgeladen.

Will auch mal schauen, ob ich mit der db über init die richtigen user und db zumindest anlege. Importieren müsste ich ja eh manuell.

18.09.2024 19:33
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Neue Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste