Zum Hauptinhalt springen

Tag 15: LAMP mit Docker

1 Übung 1

1.1 Schritt 1: Aufbauen der Struktur

Auftrag
  1. Erstellen Sie auf Ihrer VM ein Verzeichnis mit dem Namen dockerComposeTest
  2. Platzieren Sie darin ein docker-compose.yml
  3. Erstellen Sie nun noch die Verzeichnisse apache, php und mysql.

Neues Verzeichnis erstellen:

mkdir dockerComposeTest
cd dockerComposeTest

docker-compose.yml erstellen:

vim docker-compose.yml
docker-compose.yml
version: "3.0"

services:
apache:
build: './apache'
php:
build: './php'
mysql:
build: './mysql'

Apache, PHP und MySQL Verzeichnisse erstellen:

mkdir apache
mkdir php
mkdir mysql

1.2 Schritt 2: Ports und Networks

Auftrag
  1. Erstellen Sie die Port-Weiterleitungen
  2. Definieren Sie ein Backend und Frontend Netzwerk mit den entsprechenden Verbindungen

Port-Weiterleitung einrichten & Netzwerke definieren:

docker-compose.yml
version: "3.0"

services:
apache:
build: './apache'
ports:
- 8085:80
networks:
- frontend
- backend
depends_on:
- php
- mysql
php:
build: './php'
networks:
- backend
mysql:
build: './mysql'
networks:
- backend
networks:
backend:
frontend:

1.3 Schritt 3: Volumes

Auftrag
  1. Mounten Sie die Webverzeichnisse in den Container apache:
    • public_html nach /usr/local/apache2/htdocs
  2. Mounten Sie die Webverzeichnisse in den Container php:
    • public_html nach /usr/local/apache2/htdocs
    • tmp nach /usr/local/tmp
  3. Mounten Sie das Datenbankverzeichnis in den Container mysql:
    • database nach /var/lib/mysql

Verzeichnisse erstellen:

mkdir public_html
mkdir tmp
mkdir database

Verzeichnisse mounten:

docker-compose.yml
version: "3.0"

services:
apache:
build: './apache'
ports:
- 8085:80
networks:
- frontend
- backend
depends_on:
- php
- mysql
volumes:
- ./public_html:/usr/local/apache2/htdocs
php:
build: './php'
networks:
- backend
volumes:
- ./public_html:/usr/local/apache2/htdocs
- ./tmp:/usr/local/tmp
mysql:
build: './mysql'
networks:
- backend
volumes:
- ./database:/var/lib/mysql
networks:
backend:
frontend:

1.4 Schritt 4: Konfigurationen für die Container

Auftrag
  1. Die Container apache und mysql müssen noch beim Erstellen definierte Konfigurationen durchlaufen. Erstellen Sie also bitte folgende Konfigrationsdateien im Verzeichnis:
    • Im Verzeichnis apache die Datei apache.conf erstellen
    • Im Verzeichnis mysql die Datei my.cnf erstellen
    • Im Verzeichnis php die Datei php.ini erstellen

Konfiguration Apache

Konfiguration MySQL

Konfiguration PHP

1.5 Schritt 5: Dockerfiles erstellen

Auftrag
  1. Damit nun alle Container nach unseren Vorstellungen gebaut werden, müssen noch für jeden Container ein Dockerfile erstellt werden.
./apache/Dockerfile
FROM httpd:2.4.35-alpine
RUN apk update; \
apk upgrade;
COPY ./apache.conf /usr/local/apache2/conf/httpd.conf
EXPOSE 80
./mysql/Dockerfile
FROM mysql:8.0.13
ENV MYSQL_ROOT_PASSWORD <password>
COPY my.cnf /etc/mysql/
./php/Dockerfile
FROM php:7.3-rc-fpm-alpine
RUN apk update; \
apk upgrade;
RUN docker-php-ext-install mysqli
RUN apk add freetype libpng libjpeg-turbo freetype-dev libpng-dev libjpeg-turbo-dev
RUN docker-php-ext-install -j$(nproc) iconv
RUN docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/
RUN docker-php-ext-install -j$(nproc) gd
COPY php.ini /usr/local/etc/php/php.ini

1.6 Schritt 6: Vorbereitung der Testumgebung

Auftrag
  1. Erstellen Sie im Verzeichnis public_html die folgenden beiden Dateien: index.html index.php

index.html

index.php

1.7 Schritt 7: Starten der Applikation und Testing

Auftrag
  1. Starten Sie nun die Applikation über den geeigneten Docker-Compose-Befehl
  2. Verifizieren Sie nun, ob die Aufrufe auf index.html und index.php von verschiedenen Containern beantwortet wird (Tip: Logging beachten!)

Docker-Compose starten:

docker-compose up