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

