Docker Install Apache
Method#1: docker pull httpd
Find the httpd image on Docker Hub:
You can check other versions of httpd by Sort by, the default is the latest version httpd:latest.
In addition, we can also use the docker search httpd command to see the available versions.
apidemos@apidemos:~/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]
...
Here we pull the official mirror:
apidemos@apidemos:~/apache$ docker pull httpd
After waiting for the download to complete, we can check the local mirror list for the image with REPOSITORY as httpd.
apidemos@apidemos:~/apache$ docker images httpd
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd latest da1536b4ef14 23 seconds ago 195.1 MB
Method#2: Build via Dockerfile
Create Dockerfile
First, create the directory apache, which will be used to store related stuff later.
apidemos@apidemos:~$ mkdir -p ~/apache/www ~/apache/logs ~/apache/conf
The www directory will be mapped to the apache container configuration application directory.
The logs directory will be mapped to the apache container’s log directory.
The configuration files in the conf directory will be mapped to the configuration files of the apache container.
Go to the created apache directory and create the 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"]
COPY httpd-foreground /usr/local/bin/ in the Dockerfile file is to copy httpd-foreground from the current directory into the image as the httpd service startup script, so we have to create a script file httpd-foreground locally.
#!/bin/bash
set -e
# Apache gets grumpy about PID files pre-existing
rm -f /usr/local/apache2/logs/httpd.pid
exec httpd -DFOREGROUND
Grant executable permissions to the httpd-foreground file.
apidemos@apidemos:~/apache$ chmod +x httpd-foreground
Create an image via Dockerfile and replace it with your own name.
apidemos@apidemos:~/apache$ docker build -t httpd .
Once created, we can find the image we just created in the local list of mirrors.
apidemos@apidemos:~/apache$ docker images httpd
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd latest da1536b4ef14 23 seconds ago 195.1 MB
Use apache image
Run the container
docker run -p 80:80 -v PWD/www/:/usr/local/apache2/htdocs/ -vPWD/conf/httpd.conf:/usr/local/apache2/conf/httpd.conf -v $PWD/logs/:/usr/local/apache2/logs/ -d httpd
Command Description.
-p 80:80: The first port 80 is the host port, the next one is the container port, the effect is to map the container’s port 80 to the host’s port 80.
-v $PWD/www/:/usr/local/apache2/htdocs/: Mount the www directory in the current directory of the host to /usr/local/apache2/htdocs/ of the container.
-v $PWD/conf/httpd.conf:/usr/local/apache2/conf/httpd.conf: Mount the conf/httpd.conf file from the current directory in the host to the container’s /usr/local/apache2/conf/httpd.conf.
-v $PWD/logs/:/usr/local/apache2/logs/: Mount the logs directory in the current directory of the host to /usr/local/apache2/logs/ of the container.
For more detailed commands, please refer to: Docker run command
To view the container startup status.
apidemos@apidemos:~/apache$ docker ps
CONTAINER ID IMAGE COMMAND ... PORTS NAMES
79a97f2aac37 httpd "httpd-foreground" ... 0.0.0.0:80->80/tcp sharp_swanson