Instalación de Apache con Docker


Método 1: docker pull httpd

BuscarDocker Hubla imagen httpd en:

Puedes ver otras versiones de httpd mediante Sort by; por defecto es la última versión.httpd:latest。

Además, también podemos usar el comando docker search httpd para ver las versiones disponibles:

ejemplo@ejemplo:~/apache$ docker search httpd
NAME                           DESCRIPTION                  STARS  OFFICIAL AUTOMATED
httpd                          The Apache HTTP Server ..    524     [OK]       
centos/httpd                                                7                [OK]
rgielen/httpd-image-php5       Docker image for Apache...   1                [OK]
microwebapps/httpd-frontend    Httpd frontend allowing...   1                [OK]
lolhens/httpd                  Apache httpd 2 Server        1                [OK]
publici/httpd                  httpd:latest                 0                [OK]
publicisworldwide/httpd        The Apache httpd webser...   0                [OK]
rgielen/httpd-image-simple     Docker image for simple...   0                [OK]
solsson/httpd                  Derivatives of the offi...   0                [OK]
rgielen/httpd-image-drush      Apache HTTPD + Drupal S...   0                [OK]
learninglayers/httpd                                        0                [OK]
sohrabkhan/httpd               Docker httpd + php5.6 (...   0                [OK]
aintohvri/docker-httpd         Apache HTTPD Docker ext...   0                [OK]
alizarion/httpd                httpd on centos with mo...   0                [OK]
...

Aquí extraemos la imagen oficial.

ejemplo@ejemplo:~/apache$ docker pull httpd

Cuando la descarga haya terminado, podemos ver la imagen con REPOSITORY httpd en la lista de imágenes locales.

ejemplo@ejemplo:~/apache$ docker images httpd
REPOSITORY     TAG        IMAGE ID        CREATED           SIZE
httpd          latest     da1536b4ef14    23 seconds ago    195.1 MB

Método 2: construir a través de Dockerfile

Crear Dockerfile

Primero, crea el directorio apache para guardar los archivos relacionados posteriores.

ejemplo@ejemplo:~$ mkdir -p  ~/apache/www ~/apache/logs ~/apache/conf 

El directorio www se mapeará como el directorio de aplicaciones configurado en el contenedor apache.

El directorio logs se mapeará como el directorio de registros del contenedor apache.

Los archivos de configuración en el directorio conf se mapearán como archivos de configuración del contenedor apache.

Entra en el directorio apache creado y crea el Dockerfile.

FROM debian:jessie

# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added
#RUN groupadd -r www-data && useradd -r --create-home -g www-data www-data

ENV HTTPD_PREFIX /usr/local/apache2
ENV PATH $PATH:$HTTPD_PREFIX/bin
RUN mkdir -p "$HTTPD_PREFIX" \
    && chown www-data:www-data "$HTTPD_PREFIX"
WORKDIR $HTTPD_PREFIX

# install httpd runtime dependencies
# https://httpd.apache.org/docs/2.4/install.html#requirements
RUN apt-get update \
    && apt-get install -y --no-install-recommends \
        libapr1 \
        libaprutil1 \
        libaprutil1-ldap \
        libapr1-dev \
        libaprutil1-dev \
        libpcre++0 \
        libssl1.0.0 \
    && rm -r /var/lib/apt/lists/*

ENV HTTPD_VERSION 2.4.20
ENV HTTPD_BZ2_URL https://www.apache.org/dist/httpd/httpd-$HTTPD_VERSION.tar.bz2

RUN buildDeps=' \
        ca-certificates \
        curl \
        bzip2 \
        gcc \
        libpcre++-dev \
        libssl-dev \
        make \
    ' \
    set -x \
    && apt-get update \
    && apt-get install -y --no-install-recommends $buildDeps \
    && rm -r /var/lib/apt/lists/* \
    \
    && curl -fSL "$HTTPD_BZ2_URL" -o httpd.tar.bz2 \
    && curl -fSL "$HTTPD_BZ2_URL.asc" -o httpd.tar.bz2.asc \
# see https://httpd.apache.org/download.cgi#verify
    && export GNUPGHOME="$(mktemp -d)" \
    && gpg --keyserver ha.pool.sks-keyservers.net --recv-keys A93D62ECC3C8EA12DB220EC934EA76E6791485A8 \
    && gpg --batch --verify httpd.tar.bz2.asc httpd.tar.bz2 \
    && rm -r "$GNUPGHOME" httpd.tar.bz2.asc \
    \
    && mkdir -p src \
    && tar -xvf httpd.tar.bz2 -C src --strip-components=1 \
    && rm httpd.tar.bz2 \
    && cd src \
    \
    && ./configure \
        --prefix="$HTTPD_PREFIX" \
        --enable-mods-shared=reallyall \
    && make -j"$(nproc)" \
    && make install \
    \
    && cd .. \
    && rm -r src \
    \
    && sed -ri \
        -e 's!^(\s*CustomLog)\s+\S+!\1 /proc/self/fd/1!g' \
        -e 's!^(\s*ErrorLog)\s+\S+!\1 /proc/self/fd/2!g' \
        "$HTTPD_PREFIX/conf/httpd.conf" \
    \
    && apt-get purge -y --auto-remove $buildDeps

COPY httpd-foreground /usr/local/bin/

EXPOSE 80
CMD ["httpd-foreground"]

La línea COPY httpd-foreground /usr/local/bin/ en el Dockerfile copia el archivo httpd-foreground del directorio actual a la imagen como script de inicio del servicio httpd, por lo que debemos crear un archivo de script llamado httpd-foreground localmente.

#!/bin/bash
set -e

# Apache gets grumpy about PID files pre-existing
rm -f /usr/local/apache2/logs/httpd.pid

exec httpd -DFOREGROUND

Otorga permisos de ejecución al archivo httpd-foreground.

ejemplo@ejemplo:~/apache$ chmod +x httpd-foreground

Crea una imagen mediante el Dockerfile y reemplaza el nombre por el tuyo propio.

ejemplo@ejemplo:~/apache$ docker build -t httpd .

Una vez completada la creación, podemos encontrar la imagen recién creada en la lista de imágenes locales.

ejemplo@ejemplo:~/apache$ docker images httpd
REPOSITORY     TAG        IMAGE ID        CREATED           SIZE
httpd          latest     da1536b4ef14    23 seconds ago    195.1 MB

Usar la imagen de apache

Ejecutar el contenedor

docker run -p 80:80 -v $PWD/www/:/usr/local/apache2/htdocs/ -v $PWD/conf/httpd.conf:/usr/local/apache2/conf/httpd.conf -v $PWD/logs/:/usr/local/apache2/logs/ -d httpd

Explicación del comando:

-p 80:80:El primer puerto 80 es el puerto del host, el segundo es el puerto del contenedor; el efecto es mapear el puerto 80 del contenedor al puerto 80 del host.

-v $PWD/www/:/usr/local/apache2/htdocs/:Monta el directorio www del directorio actual del host en /usr/local/apache2/htdocs/ del contenedor.

-v $PWD/conf/httpd.conf:/usr/local/apache2/conf/httpd.conf:Monta el archivo conf/httpd.conf del directorio actual del host en /usr/local/apache2/conf/httpd.conf del contenedor.

-v $PWD/logs/:/usr/local/apache2/logs/:Monta el directorio logs del directorio actual del host en /usr/local/apache2/logs/ del contenedor.

Referencia más detallada de comandos:Comando Docker run

Ver el estado de inicio del contenedor:

ejemplo@ejemplo:~/apache$ docker ps
CONTAINER ID  IMAGE   COMMAND             ... PORTS               NAMES
79a97f2aac37  httpd   "httpd-foreground"  ... 0.0.0.0:80->80/tcp  sharp_swanson

Acceder a través del navegador

Otras extensiones