Ubuntu Apache Webserver

Beispiel: Einfacher Apache2 Webserver mit http/https und eigener Start-/Indexseite

Fangen wir mit der Grundstruktur an.

Projektordner

Wir benötigen einen Basis- oder Projektordner $HOME/projektapache mit einer Struktur.

Struktur Projektordner mit Dockerfile
.
├── Dockerfile
└── samplesite
   ├── index.html
   └── style.css

Dockerfile erstellen

Das Dockerfile beschreibt mittels Direktiven den gewünschten Buildprozess.

Dockerfile mit Basis Image ubuntu:22.04 und Apache2 Installation
# Datei Dockerfile
FROM ubuntu:22.04

LABEL maintainer "name@somehost.com"
LABEL description "Test"

# Umgebungsvariablen und Zeitzone einstellen
# (erspart interaktive Rückfragen)
ENV TZ="Europe/Berlin" \
    APACHE_RUN_USER=www-data \
    APACHE_RUN_GROUP=www-data \
    APACHE_LOG_DIR=/var/log/apache2

# Apache installieren, unnötige Dateien aus dem Paket-Cache
# gleich wieder entfernen, HTTPS aktivieren
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && \
    echo $TZ > /etc/timezone && \
    apt-get update && \
    apt-get install -y apache2 && \
    apt-get -y clean && \
    rm -r /var/cache/apt /var/lib/apt/lists/* && \
    a2ensite default-ssl && \
    a2enmod ssl

EXPOSE 80 443

# gesamten Inhalt des Projektverzeichnisses
# samplesite nach /var/www/html kopieren
COPY samplesite/ /var/www/html

CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]

Projektdokumente

Hier handelt es sich um eine einfach Website mit einer CSS-Styling-Datei.

Webdokument samplesite/index.html

Website index.html
<!DOCTYPE html>
<html>
<head>
  <meta charset='utf-8'>
  <link rel="stylesheet" href="style.css">
  <title>Testseite für Container Seminar Joe B.</title>
</head>

<body>
<h1>Testseite für Container Seminar Joe B.</h1>
<p>Diese Seite wird von einem Apache-Webserver präsentiert, der
in einem Docker-Container läuft.
<p>Als Base-Image kommt <tt>ubuntu:22.04</tt>
zum Einsatz.</p>
</body>
</html>

Webdokument samplesite/style.css (CSS Style)

Stylingdatei style.css
body {
    font-family: sans-serif;
}
h1, h2 {
    color: #dd1100;
}

Docker Build Prozess

Es folgt ein beispielhafte Vorgehen - in der Konsole - für das Beispiel: Einfacher Webserver.

Arbeitsschritte im Terminal / in der Shell
# Ordnerstruktur erstellen
mkdir -p $HOME/projektapache/samplesite

# in das Projektverzeichnis wechseln
cd $HOME/projektapache

# HTML/CSS-Site in HTML-Ordner kopieren
touch samplesite/index.html samplesite/style.css

# Dockerfile erstellen und Inhalt bereitstellen
touch Dockerfile

# Image erzeugen / taggen / bitte Punkt am Ende nicht vergessen!
docker build -t joebrandes/testwebserver .

# Container erzeugen
# -d                           Prozess im Hintergrund (detached)
# -p 8080:80 -p 8443:443       Ports/Publish
# -h webtest                   Hostname festlegen
# --name testwebserver         Containername
# joebrandes/testwebserver     Image für Container / Tag:latest
docker run -d -p 8080:80 -p 8443:443 -h webtest \
    --name testwebserver joebrandes/testwebserver

Die normale (und https-gesicherte) Seite sollte sich jetzt im Browser über die entsprechenden URLs öffnen lassen!