English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

安装 Apache Docker

Método uno, docker pull httpd

Búsqueda Docker Hub en las imágenes de httpd:

Puede ver otras versiones de httpd mediante la opción Sort by, la versión predeterminada es la última httpd:latest

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

w3codebox@w3codebox:~/apache$ docker search httpd
NAME DESCRIPCIÓN ESTRELLAS OFICIAL AUTOMATIZADO
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 0 0 0 0 [OK]
publicisworldwide/httpd The Apache httpd webserver... 0 0 0 0 0 [OK]
rgielen/httpd-image-simple Docker image for simple... 0 0 0 0 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]
...

Here we pull the official image

w3codebox@w3codebox:~/apache$ docker pull httpd

After the download is complete, we can find the image with REPOSITORY as httpd in the local image list.

w3codebox@w3codebox:~/apache$ docker images httpd
REPOSITORY                           TAG                           IMAGE ID                           CREATED                                   SIZE
httpd                               latest                  da1536b4ef14    23 hace segundos    195.1 MB

Method two: build through Dockerfile

Create Dockerfile

Firstly, create the directory apache to store the related items later.

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

The www directory will be mapped to the application directory configured by the apache container.

The logs directory will be mapped to the log directory of the apache container.

The configuration files in the conf directory will be mapped to the configuration files of the apache container.

Enter the created apache directory and create a 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
# see 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"]

Dockerfile 文件中 COPY httpd-foreground /usr/local/bin/ 是将当前目录下的 httpd-foreground 拷贝到镜像里,作为 httpd 服务的启动脚本,所以我们要在本地创建一个脚本文件 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

赋予 httpd-foreground 文件可执行权限。

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

通过 Dockerfile 创建一个镜像,替换成你自己的名字。

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

创建完成后,我们可以在本地的镜像列表里查找到刚刚创建的镜像。

w3codebox@w3codebox:~/apache$ docker images httpd
REPOSITORY                           TAG                           IMAGE ID                           CREATED                                   SIZE
httpd                               latest                  da1536b4ef14    23 hace segundos    195.1 MB

使用 apache 镜像

运行容器

run docker -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

Descripción del comando:

-p 80:80: Mapear el contenedor 8Puerto 0 mapeado al host 8Puerto 0。

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

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

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

Ver el estado de inicio de los contenedores:

w3codebox@w3codebox:~/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

¡Funciona! https://es.oldtoolbag.com