Installer Apache avec Docker


Méthode 1 : docker pull httpd

RechercherDocker HubL'image httpd sur Docker Hub :

Vous pouvez utiliser Trier par pour afficher d'autres versions de httpd ; la version par défaut est la dernière version.httpd:latest。

De plus, nous pouvons également utiliser la commande docker search httpd pour afficher les versions disponibles :

example@example:~/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]
...

Ici, nous récupérons l'image officielle.

example@example:~/apache$ docker pull httpd

Une fois le téléchargement terminé, nous pouvons trouver l'image avec REPOSITORY httpd dans la liste des images locales.

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

Méthode 2 : Construire via Dockerfile

Créer un Dockerfile

Tout d'abord, créez un répertoire apache pour stocker les éléments associés pour plus tard.

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

Le répertoire www sera mappé sur le répertoire d'application configuré par le conteneur apache.

Le répertoire logs sera mappé sur le répertoire de logs du conteneur apache.

Les fichiers de configuration du répertoire conf seront mappés sur les fichiers de configuration du conteneur apache.

Entrez dans le répertoire apache créé et créez un 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"]

Dans le Dockerfile, l'instruction COPY httpd-foreground /usr/local/bin/ copie httpd-foreground depuis le répertoire courant dans l'image en tant que script de démarrage du service httpd, nous devons donc créer localement un fichier de script httpd-foreground.

#!/bin/bash
set -e

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

exec httpd -DFOREGROUND

Accordez la permission d'exécution au fichier httpd-foreground.

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

Créez une image via un Dockerfile, et remplacez son nom par le vôtre.

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

Une fois la création terminée, nous pouvons trouver l'image qui vient d'être créée dans la liste des images locales.

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

Utilisez l'image apache.

Lancer le conteneur

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

Description de la commande :

-p 80:80:Le premier port 80 est le port hôte, tandis que le second est le port du conteneur, ce qui fait correspondre le port 80 du conteneur au port 80 de l'hôte.

-v $PWD/www/:/usr/local/apache2/htdocs/:Montez le répertoire www situé sous le répertoire courant de l'hôte vers /usr/local/apache2/htdocs/ dans le conteneur.

-v $PWD/conf/httpd.conf:/usr/local/apache2/conf/httpd.conf:Montez le fichier conf/httpd.conf situé dans le répertoire courant sur l'hôte vers /usr/local/apache2/conf/httpd.conf dans le conteneur.

-v $PWD/logs/:/usr/local/apache2/logs/:Montez le répertoire logs situé dans le répertoire courant sur l'hôte vers /usr/local/apache2/logs/ dans le conteneur.

Pour des commandes plus détaillées, reportez-vous à :Commande Docker run

Vérifiez l'état de démarrage du conteneur :

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

Accès via navigateur

autres extensions