Container mit Apache2 und PHP
Ich habe nicht auf Anhieb ein Docker-Image gefunden, das Apache2 und PHP enthält, daher ( und zum Lernen) habe ich mir die Informationen zusammen gesucht, wie ich selber einen entsprechenden Container erstellen kann. Dies hat außerdem den Vorteil, dass ich genau die Pakete hinzufügen kann, die ich für das von mir gewählte CMS GRAV benötige.
Dazu erstellen wir zunächst ein Verzeichnis webcontainer
, darin legen wir eine
Datei docker-compose.yml
und eine Datei Dockerfile
an:
mkdir webcontainer
cd webcontainer
bash -c "cat > docker-compose.yml" <<EOF
services:
apache:
build:
context: .
dockerfile: Dockerfile
ports:
- 8080:80
volumes:
- /home/jgreven/Projects/IdeaProjects/ai-telligence.info:/var/www/html
- /home/jgreven/Projects/IdeaProjects/ai-telligence.info/logs:/var/log/apache2
- /home/jgreven/Projects/IdeaProjects/ai-telligence.info/docker_apache2.conf:/etc/apache2/apache2.conf
EOF
bash -c "cat > Dockerfile" <<EOF
FROM ubuntu:latest
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
apache2 \
php8.3 \
php8.3-curl \
php8.3-gd \
php8.3-imagick \
php8.3-mbstring \
php8.3-xml \
php8.3-yaml \
php8.3-zip \
libapache2-mod-php8.3 \
composer \
git \
less \
mc \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
RUN a2enmod php8.3
RUN a2enmod rewrite
EXPOSE 80
CMD ["apache2ctl", "-D", "FOREGROUND"]
EOF
bash -c "cat > docker_apache2_conf" <<EOF
DefaultRuntimeDir ${APACHE_RUN_DIR}
PidFile ${APACHE_PID_FILE}
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
# These need to be set in /etc/apache2/envvars
# User ${APACHE_RUN_USER}
# Group ${APACHE_RUN_GROUP}
User ubuntu
Group ubuntu
HostnameLookups Off
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf
Include ports.conf
<Directory />
Options FollowSymLinks
AllowOverride None
Require all denied
</Directory>
<Directory /usr/share>
AllowOverride None
Require all granted
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
AccessFileName .htaccess
<FilesMatch "^\.ht">
Require all denied
</FilesMatch>
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
IncludeOptional conf-enabled/*.conf
IncludeOptional sites-enabled/*.conf
EOF
Selbstverständlich musst Du die Pfadangaben Deinen Gegebenheiten entsprechend anpassen. Du kannst dann den Container starten mit
docker compose up --build -d
Du kannst Dir die laufenden Container anzeigen lassen mit dem Befehl:
docker ps
Du kannst den Container mit dem folgenden Befehl ‚betreten‘:
docker exec -it <CONTAINER-NAME> bash
Du musst natürlich den Namen des Containers anpassen. Dabei funktioniert übrigens die Komplettierung mit der TAB-Taste!