{"id":19294305,"url":"https://github.com/mdecker-mobilecomputing/docker_nginx4html","last_synced_at":"2025-10-24T07:14:06.222Z","repository":{"id":212835254,"uuid":"732416683","full_name":"MDecker-MobileComputing/docker_nginx4html","owner":"MDecker-MobileComputing","description":"Repo contains files to build simple Docker container which serves custom HTML page with nginx","archived":false,"fork":false,"pushed_at":"2024-12-06T08:38:48.000Z","size":34,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-05T21:09:15.094Z","etag":null,"topics":["docker","example","nginx"],"latest_commit_sha":null,"homepage":"https://hub.docker.com/r/mide76/hallodocker","language":"Dockerfile","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MDecker-MobileComputing.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-12-16T15:53:48.000Z","updated_at":"2024-12-06T08:38:51.000Z","dependencies_parsed_at":"2023-12-30T17:43:04.634Z","dependency_job_id":"36b957fd-e519-4cbc-8a2d-4d4bc3943302","html_url":"https://github.com/MDecker-MobileComputing/docker_nginx4html","commit_stats":null,"previous_names":["mdecker-mobilecomputing/docker_nginx4html"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MDecker-MobileComputing%2Fdocker_nginx4html","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MDecker-MobileComputing%2Fdocker_nginx4html/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MDecker-MobileComputing%2Fdocker_nginx4html/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MDecker-MobileComputing%2Fdocker_nginx4html/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MDecker-MobileComputing","download_url":"https://codeload.github.com/MDecker-MobileComputing/docker_nginx4html/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240397179,"owners_count":19794807,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","example","nginx"],"created_at":"2024-11-09T22:37:51.068Z","updated_at":"2025-10-24T07:14:01.162Z","avatar_url":"https://github.com/MDecker-MobileComputing.png","language":"Dockerfile","readme":"# Demo für Docker: Webserver \"nginx\" in Container liefert eigene Webseite aus #\r\n\r\n\u003cbr\u003e\r\n\r\nDas Repo enthält im Wurzelverzeichnis ein [Dockerfile](./Dockerfile), welches\r\ndas Image [nginx:stable-alpine3.17-slim](https://hub.docker.com/_/nginx/tags)\r\nals Basis-Image verwendet.\r\nDas Image enthält also als Betriebs-System [Alpine Linux](https://www.alpinelinux.org/)\r\nund den Webserver [nginx](https://nginx.org/en/); bei *Alpine Linux* handelt\r\nes sich um eine besonders leichtgewichtige Linux-Distribution, die sich besonders\r\ngut als Grundlage für Container eignet.\r\nDas `Dockerfile` kopiert den Web-Content aus dem Unterverzeichnis [docs/](docs/)\r\nin den Ordner `/usr/share/nginx/html/` im Image, weil dies der Ordner für den von\r\n`nginx` ausgelieferten Web-Content ist.\r\n\r\n\u003cbr\u003e\r\n\r\n----\r\n\r\n## Docker-Befehle ##\r\n\r\n\u003cbr\u003e\r\n\r\n**Vorbemerkung:** Unter Linux müssen Sie für die folgenden Aufrufe von `docker` evtl. den Befehl `sudo` voranstellen.\r\n\r\n\u003cbr\u003e\r\n\r\n### Erzeugung Image ###\r\n\r\nFühren Sie den folgenden Befehl im Verzeichnis mit dem [Dockerfile](./Dockerfile) aus, um das Image zu erstellen:\r\n```\r\ndocker build -t mide76/hallodocker:1.0 .\r\n```\r\n* Hierbei ist `mide76` der Nutzername auf *Docker Hub*.\r\n  Wenn Sie das Image nicht auf *Docker Hub* veröffentlichen wollen (siehe unten),\r\n  dann können Sie das `mide76/` weglassen.\r\n  Wenn Sie das Image aber veröffentlichen wollen, dann müssen Sie `mide76`\r\n  durch Ihren eigenen Nutzernamen auf *Docker Hub* veröffentlichen.\r\n* `hallodocker` ist der Name des Images.\r\n  Er darf keine Großbuchstaben enthalten.\r\n* `1.0` ist die Version, die erstellt wird.\r\n* Der einzelne Punkt '.' am Ende steht für das aktuelle Verzeichnis.\r\n  Hier wird nach dem [Dockerfile](./Dockerfile) gesucht.\r\n* [Doku für diesen Befehl](https://docs.docker.com/engine/reference/commandline/build/)\r\n\r\n\u003cbr\u003e\r\n\r\nNach einem erfolgreichen Lauf dieses Befehls sollte das neu erzeugte Image in der Liste aller lokalen Images,\r\ndie vom folgenden Befehl ausgegeben wird, enthalten sein:\r\n```\r\ndocker image ls\r\n```\r\n* Das `ls` steht für \"list\".\r\n* [Doku für dieses Befehl](https://docs.docker.com/engine/reference/commandline/image_ls/)\r\n\r\n\u003cbr\u003e\r\n\r\n### Erzeugung Container ###\r\n\r\nWie können dann einen Container (laufende Instanz) von diesem Image erzeugen:\r\n```\r\ndocker run --detach --name mein-webserver-1 -p 8080:80 mide76/hallodocker:1.0\r\n```\r\n\r\nDie Bedeutung der verwendeten Optionen und Argumente ist:\r\n* `--detach` : Container wird im Hintergrund ausgeführt, blockiert also nicht die Shell, mit der der Befehl ausgeführt wurde\r\n* `--name mein-webserver-1` : Name des Containers\r\n* `-p 8080:80` : Der Port 80 des Containers soll an den Port 8080 des \"äußeren\" Betriebs-System gebunden werden\r\n* `mide76/hallodocker:1.0`: Image, für das ein Container erzeugt werden soll.\r\n* [Doku für diesen Befehl](https://docs.docker.com/engine/reference/commandline/run/)\r\n\r\n\u003cbr\u003e\r\n\r\nNach erfolgreicher Erzeugung sollte der Container in der Liste der laufenden Container, die der folgende Befehl ausgibt, enthalten sein:\r\n```\r\ndocker container ls\r\n```\r\n\r\n\u003cbr\u003e\r\n\r\nDie Webseite aus dem Ordner [docs/](docs/) dieses Repos sollte dann unter der folgenden lokalen URL im Web-Browser erreichbar sein:\r\n```\r\nhttp://localhost:8080/\r\n```\r\n\r\n\u003cbr\u003e\r\n\r\nMit dem folgenden Befehl können wir uns das aktuelle Log-File des Container anzeigen lassen:\r\n```\r\ndocker container logs mein-webserver-1\r\n```\r\n[Doku für diesen Befehl](https://docs.docker.com/engine/reference/commandline/logs/)\r\n\r\n\u003cbr\u003e\r\n\r\n### Interaktive Shell ###\r\n\r\nEs ist auch möglich, eine interaktive Shell im Container zu öffnen:\r\n```\r\ndocker exec --interactive --tty mein-webserver-1 sh\r\n```\r\n* Das `sh` am Ende ist der im Container auszuführende Befehl, nämlich die Shell.\r\n* `--interactive`: Interaktive Ausführung\r\n* `--tty`: Pseudo-Terminal erstellen\r\n* [Doku für diesen Befehl](https://docs.docker.com/engine/reference/commandline/container_exec/)\r\n\r\n\u003cbr\u003e\r\n\r\n\u003cbr\u003e\r\n\r\nMit dem folgenden Befehl kann man sich den Inhalt des Verzeichnisses mit dem Web-Content ausgeben lassen:\r\n```\r\nls -l /usr/share/nginx/html/\r\n```\r\n* `ls` steht für den Linux-Befehl \"list\" (entspricht in etwa dem DOS-Befehl `dir`)\r\n* `-l`: Detaillierte Anzeige (nicht nur Dateiname, sondern z.B. auch noch Größe der Datei)\r\n* [Doku zu diesem Befehl](https://www.digitalocean.com/community/tutorials/ls-command-in-linux-unix)\r\n\r\n\u003cbr\u003e\r\n\r\nWir können mit dem folgenden Befehl eine Datei mit dem aktuellen Datum und Uhrzeit\r\nim Container erzeugen:\r\n```\r\ndate \u003e /root/datum.txt\r\n```\r\nMit dem `\u003e` wird die Ausgabe vom Programm `date` in eine Datei umgeleitet.\r\n\r\n\u003cbr\u003e\r\n\r\nSie können noch weitere Linux-Befehl eingeben oder die interaktive Shell mit dem Befehl `exit` verlassen.\r\n\r\n\u003cbr\u003e\r\n\r\n### Überwachung laufender Container ###\r\n\r\nWährend ein oder mehrere Container laufen, können Sie mit dem folgenden Befehl den Ressourcenverbrauch (z.B. CPU und RAM) der einzelnen Container anzeigen lassen:\r\n```\r\ndocker container stats\r\n```\r\nAbbruch dieser Anzeige mit `STRG+C`.\r\n\r\n\u003cbr\u003e\r\n\r\nDie in dem Container laufenden Prozesse können Sie sich mit dem folgenden Befehl ausgeben lassen:\r\n```\r\ndocker container top mein-webserver-1\r\n```\r\n[Doku für diesen Befehl](https://docs.docker.com/engine/reference/commandline/container_top/)\r\n\r\n\u003cbr\u003e\r\n\r\nDer folgende Befehl listet die Dateien auf, welche sich im Container im Vergleich zu Image geändert haben:\r\n```\r\ndocker container diff mein-webserver-1\r\n```\r\n\r\n\u003cbr\u003e\r\n\r\n### Container stoppen und neu starten ###\r\n\r\nWir können dann den Container mit dem folgenden Befehl beenden:\r\n```\r\ndocker container stop mein-webserver-1\r\n```\r\n[Doku zu diesem Befehl](https://docs.docker.com/engine/reference/commandline/container_diff/)\r\n\r\n\u003cbr\u003e\r\n\r\nDie Ausgabe des folgenden Befehls zeigt, dass der gestoppte Container immer noch vorhanden ist:\r\n```\r\ndocker container ls --all\r\n```\r\nDie Option `--all` ist herbei erforderlich, damit auch gestoppte Container angezeigt werden.\r\n\r\n\u003cbr\u003e\r\n\r\nWie können den Container mit folgendem Befehl wieder starten:\r\n```\r\ndocker container start mein-webserver-1\r\n```\r\nDabei müssen wir das Port-Forwarding nicht erneut spezifizieren.\r\n[Doku zu diesem Befehl](https://docs.docker.com/engine/reference/commandline/container_start/)\r\n\r\nWenn wir erneut eine interaktive Shell zum Container öffnen, dann können wir uns mit dem folgenden Befehl die während des vorherigen Laufs erzeugte Datei `datum.txt` anzeigen lassen:\r\n```\r\ncat /root/datum.txt\r\n```\r\nDies zeigt, dass die im Container geänderten Dateien auch erhalten bleiben, wenn der Container gestoppt und neu gestartet wird.\r\n[Doku zu Linux-Befehl `cat`](https://linux.die.net/man/1/cat)\r\n\r\nDie Datei `/root/datum.txt` aus dem Container können Sie sich mit dem folgenden Befehl aus dem Container herauskopieren:\r\n```\r\ndocker container cp mein-webserver-1:/root/datum.txt datum-aus-container.txt\r\n```\r\n[Doku zu diesem Befehl](https://docs.docker.com/engine/reference/commandline/container_cp/)\r\n\r\n\u003cbr\u003e\r\n\r\n### Container löschen ###\r\n\r\nWir stoppen den Container erneut mit dem selben Befehl wie oben.\r\n\r\nDer gestoppte Container kann mit folgendem Befehl gelöscht werden:\r\n```\r\ndocker container rm mein-webserver-1\r\n```\r\n[Doku zu diesem Befehl](https://docs.docker.com/engine/reference/commandline/container_rm/)\r\n\r\n\u003cbr\u003e\r\n\r\nUm *ALLE* gestoppten Container zu löschen kann der folgende Befehl eingegeben werden (gefährlich!):\r\n```\r\ndocker container prune\r\n```\r\n[Doku zu diesem Befehl](https://docs.docker.com/engine/reference/commandline/container_prune/)\r\n\r\n\u003cbr\u003e\r\n\r\n----\r\n\r\n## Image auf *Docker Hub* veröffentlichen ##\r\n\r\n\u003cbr\u003e\r\n\r\nWenn Sie das Image auf [Docker Hub](https://hub.docker.com/) veröffentlichen möchten, dann gehen Sie wie folgt beschrieben vor.\r\nSie können aber auch die [offizielle Dokumentation](https://docs.docker.com/get-started/04_sharing_app/) lesen.\r\n\r\n\u003cbr\u003e\r\n\r\n### Erste Version veröffentlichen ###\r\n\r\nLegen Sie sich ein (kostenloses) Konto auf *Docker Hub* an.\r\nHierbei müssen Sie einen Nutzernamen festlegen.\r\nIm weiteren Beispiel ist dieser `mide76`.\r\n\r\nLegen Sie sich auf der Weboberfläche ein Repository an.\r\nDieser Repo-Name ist für das weitere Beispiel `hallodocker`.\r\n\r\n\u003cbr\u003e\r\n\r\nLoggen Sie sich dann auf der Konsole mit Ihrem Docker-Konto ein:\r\n```\r\ndocker login\r\n```\r\n[Doku zu diesem Befehl](https://docs.docker.com/engine/reference/commandline/login/)\r\n\r\n\u003cbr\u003e\r\n\r\nSie können dann das Image mit folgendem Befehl auf den Server hochladen:\r\n```\r\ndocker push mide76/hallodocker:1.0\r\n```\r\n[Doku zu diesem Befehl](https://docs.docker.com/engine/reference/commandline/push/)\r\n\r\n\u003cbr\u003e\r\n\r\nÖffentliche URL des Beispiel-Repos: https://hub.docker.com/r/mide76/hallodocker\r\n\r\nAndere Nutzer können des Image dann mit dem folgenden Befehl herunterladen:\r\n```\r\ndocker pull mide76/hallodocker:1.0\r\n```\r\n[Doku für diesen Befehl](https://docs.docker.com/engine/reference/commandline/pull/)\r\n\r\n\u003cbr\u003e\r\n\r\n### Weitere Version veröffentlichen ###\r\n\r\nWenn wir eine weitere Version des Image auf *Docker Hub* hochladen wollen (z.B. wegen Änderungen\r\nin `Dockerfile` oder im verpackten Web-Content), dann können wir auch direkt das Image mit dem\r\nNutzernamen als Prefix erzeugen.\r\nFür eine Version `1.1` sieht der Befehl wie folgt aus:\r\n```\r\nsudo docker build -t mide76/hallodocker:1.1 .\r\n```\r\n\r\n\u003cbr\u003e\r\n\r\nDer zugehörige `push`-Befehl sieht dann so aus:\r\n```\r\ndocker push mide76/hallodocker:1.1\r\n```\r\n\r\n\u003cbr\u003e\r\n\r\nEs ist Konvention, der aktuellsten stabilen Version eines Images noch den Tag `latest` zu geben.\r\nDies können wir für die gerade erstellte Version `1.1` mit folgendem Befehl machen:\r\n```\r\ndocker tag mide76/hallodocker:1.1 mide76/hallodocker:latest\r\n```\r\n[Doku zum Befehl](https://docs.docker.com/engine/reference/commandline/tag/)\r\n\r\n\u003cbr\u003e\r\n\r\nMit dem letzten Befehl wurde der Tag aber nur lokal angelegt.\r\nDamit dieser Tag auch im Repositry auf *Docker Hub* verfügbar ist, muss\r\ner gepusht werden:\r\n```\r\ndocker push mide76/hallodocker:latest\r\n```\r\n\r\n\u003cbr\u003e\r\n\r\nDieser Tag und die beiden Versionen werden dann im Tab \"Tags\" des Repos auf\r\n*Docker Hub* angezeigt, siehe [hier](https://hub.docker.com/repository/docker/mide76/hallodocker/tags?page=1\u0026ordering=last_updated).\r\nWenn zwei Tags den gleichen (Hash-)Wert für \"Digest\" haben, dann handelt es sich um dieselbe Version.\r\n\r\n\u003cbr\u003e\r\n\r\nWenn wir später noch eine Version `1.2` des Image erstellen, dann können wir mit dem folgenden\r\nBefehl den Tag `latest` von der Version `1.1.` zu der Version `1.2.` verschieben:\r\n```\r\ndocker tag mide76/hallodocker:1.2 mide76/hallodocker:latest\r\n```\r\nDurch Anhängen des Tag `latest` an eine andere Version wird der Tag von der bisherigen Version `1.1` entfernt.\r\n\r\nWir müssen dann noch das neue Image mit den beiden Tags `1.2` und `latest` zu *Docker Hub* pushen:\r\n```\r\ndocker push mide76/hallodocker:1.2\r\ndocker push mide76/hallodocker:latest\r\n```\r\n\r\n\r\n\u003cbr\u003e\r\n\r\n----\r\n\r\n## License ##\r\n\r\n\u003cbr\u003e\r\n\r\nSee the [LICENSE file](LICENSE.md) for license rights and limitations (BSD 3-Clause License).\r\n\r\n\u003cbr\u003e\r\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmdecker-mobilecomputing%2Fdocker_nginx4html","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmdecker-mobilecomputing%2Fdocker_nginx4html","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmdecker-mobilecomputing%2Fdocker_nginx4html/lists"}