IT-Knowledgebase
de Software Webserver nginx

NGINX mit Docker starten

Der NGINX Webserver ist wohl der bekannteste und weit verbreiteste Webserver/Reverse Proxy der Welt. NGINX gibt es in der OpenSource Version, welche Kostenlos ist und eine Kostenpflichtige Version namens NGINX Plus, welche mit besonderen Modulen und Premium Support wirbt. Wir kümmern uns hier um die Kostenlose Version von NGINX von den offiziellen Docker Quellen.

Den Container starten

Den Container kann man relativ einfach starten mit einem

1docker run -it -p 8080:80 nginx

startet einen interaktiven docker container mit dem nginx-image und lauscht auf Port 8080 von außen, welcher weitergeleitet wird auf den Container Port 80

Das war es auch schon, wir können nun in unserem Browser die nginx-Standardseite sehen auf dem Port 8080. Da es ein interaktiver Container (-it) ist, bleibt der Container in unserer Shell offen und wir sehen sofort den Log-Output. Möchte man den Container beenden, hilft ein STRG + C Befehl (CTRL + C auf dem MAC).

Eigene Seite in Nginx

Möchte man nun eine eigene Seite in NGINX rein packen kann ma ndas ganze mit Volumes machen. So könnte man z.B. auch eine eigene Config für nginx bereitstellen oder aber man baut sein eigenes image worin die Dateien schon mit drin sind.

Eigene HTML Dateien mit Volumes

Ein Volume ist ein Mountpunkt (eine Verbindung von unserem Filesystem in den Container) von uns in den Container hinein um Dateien bereitzustellen. Um das in docker abzubilden müssen wir den -v Befehl benutzen mit dem absoluten Pfad und dem gewünschten Mountpoint im Container getrennt von einem Doppelpunkt.

1docker run -it -v $PWD/src/:/usr/share/nginx/html/ -p 8080:80 nginx 

$PWD bietet uns eine Möglichkeit direkt im aktuellen Verzeichnis anzufangen (liefert uns den aktuellen Pfad). Die Dateien im Container liegen unter /usr/share/nginx/html.

Zum Testen habe ich mir zwei sehr einfache Dateien erstellt und in einem Ordner namens src geschoben.

 1<!DOCTYPE html>
 2<html lang="en">
 3
 4<head>
 5    <meta charset="UTF-8">
 6    <meta name="viewport" content="width=device-width, initial-scale=1.0">
 7    <title>Document</title>
 8</head>
 9
10<body>
11    <h1>My Site</h1>
12    <a href="test.html">Testing</a>
13</body>
14
15</html>

index.html

 1<!DOCTYPE html>
 2<html lang="en">
 3
 4<head>
 5    <meta charset="UTF-8">
 6    <meta name="viewport" content="width=device-width, initial-scale=1.0">
 7    <title>Document</title>
 8</head>
 9
10<body>
11
12</body>
13
14</html>

test.html

Eigene HTML Dateien mit eigenem Image

Ein eigenes Image hat den Vorteil, das es weit aus portabler ist. Jeder der das Image hat, kann damit die Seite starten mit einem einzelnen Befehl. Hierfür nehmen wir wieder wie oben die beiden Beispieldateien in einem src Verzeichnis und kopieren Sie in unserem Dockerfile in unser Image.

1FROM nginx
2
3COPY ./src /usr/share/nginx/html

kopiert unseren Ordner in den Container

gebaut wird das Image nun wie folgt

1docker build -t NAME_DES_IMAGES .

Das -t steht dabei für den Namen des Images, wenn es fertig gebaut wurde und der . bestimmt den Ort von dem es gebaut wird. Ein . ist dabei das aktuelle Verzeichnis.

Das starten des Images erfolgt dann wie oben, nur mit unserem neuen Namen

1docker run -it -p 8080:80 NAME_DES_IMAGES