
Uno de los primeros virtualhosts que migré realmente fue el de mi wiki (la misma que ya mencioné uso con Grav y funciona bajo el dominio local http://wiki.localhost/).
Siendo que es una instalación super sencilla, tuvo sentido usar esto como el comienzo del experimento. Además, necesitaba que funcione junto con otros proyectos ya que suele ser material de consulta.
Habiendo ya desinstalado todo el stack local, ahora sólo queda Docker.
Para hacer funcionar Grav se necesita poco y nada. Mi docker-compose.yml inicial para este container fue:
version: "3.1"
services:
  webserver:
    build: .docker/apache/7.3
    container_name: wiki
    volumes:
      - ./:/var/www/html
      - ./.docker/apache/virtualhost.conf:/etc/apache2/sites-enabled/000-default.conf
      - ./.docker/php/mcrypt.ini:/etc/php/7.3/apache2/conf.d/20-mcrypt.ini
    ports:
      - "80:80"El archivo .docker/apache/7.3/Dockerfile, que se encuentra en .docker/apache/7.3, y define la imagen del servidor web, contiene lo siguiente:
FROM php:7.3-apache
RUN apt-get update \
    && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
    software-properties-common \
    && apt-get update \
    && DEBIAN_FRONTEND=noninteractive apt-get install -y \
    libfreetype6-dev \
    libicu-dev \
    libssl-dev \
    libjpeg62-turbo-dev \
    libmcrypt-dev \
    libedit-dev \
    libedit2 \
    libpq-dev \
    libxslt1-dev \
    libzip-dev \
    apt-utils \
    gnupg \
    git \
    vim \
    wget \
    curl \
    lynx \
    psmisc \
    unzip \
    tar \
    cron \
    bash-completion \
    && apt-get clean
#Install Dependencies
RUN docker-php-ext-configure \
    gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/; \
    docker-php-ext-install \
    opcache \
    gd \
    bcmath \
    intl \
    mbstring \
    soap \
    xsl \
    zip
RUN chmod 777 -R /var/www \
    && chown -R www-data:www-data /var/www \
    && usermod -u 1000 www-data \
    && chsh -s /bin/bash www-data
RUN a2enmod rewrite
RUN a2enmod headers
RUN ln -sf /dev/stdout /var/log/apache2/access.log \
    && ln -sf /dev/stderr /var/log/apache2/error.logPodría mejorarse, pero para lo que quiero hacer ahora va a funcionar.
El siguiente archivo que estoy usando en el compose es .docker/apache/virtualhost.conf. Es el archivo que se mapea para definir las opciones del virtualhost.
<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName wiki.localhost
    DocumentRoot /var/www/html
    <Directory /var/www/html/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Require all granted
    </Directory>
    LogLevel warn
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>Y finalmente algún ajuste para PHP con el archivo .docker/php/mcrypt.ini, para habilitar el módulo. Allí tengo:
extension=mcrypt.soAhora si, ejecutamos:
docker-compose upCuando termine la creación, mi nuevo stack de un único container estará disponible y voy a poder acceder a http://wiki.localhost/admin:

Si comparo lo que definí aquí con la idea de stack básico, vamos a encontrar que este stack es sólo un container que hace de servidor web.

Como ya habíamos adelantado, si quisiera ahora iniciar otro stack o container que escuche en el puerto 80, comenzarían los problemas.
Para esto, como también ya dejé ver, la solución por la que opté fue la implementación de un Proxy Reverso.