Sep 22, 2023 6 min read

How to Install Apache in Docker

Install Apache in Docker with our step-by-step tutorial. Apache is an open-source monitoring tool for system stability and performance.

Install Apache in Docker
Table of Contents


Before we begin talking about how to install Apache in Docker, let's briefly understand – What is Apache and Docker?

Apache is an open-source web server software widely used to host websites on the internet. It offers a secure and reliable platform for delivering web content. Apache provides advanced features like virtual hosting, load balancing, and authentication.

Docker uses containers built from predefined images to accelerate and streamline the deployment of applications. Applications like web servers, which must maintain their configurations across many web browsers, target OS environments, and CPU architectures, benefit from the use of containers.

In this tutorial, you will install Apache in Docker. We will also address a few FAQs on how to install Apache in Docker.

Advantages of Apache

  1. Open-source: Apache is freely available and adaptable, making it accessible to developers worldwide.
  2. Security: It offers robust security measures, shielding websites from cyber threats and vulnerabilities.
  3. Flexibility: Apache supports a wide range of operating systems and integrates seamlessly with various software applications.
  4. Scalability: It handles high web traffic efficiently, ensuring websites remain accessible even during peak periods.
  5. Extensive Community Support: The Apache community provides regular updates, patches, and assistance, making it reliable and continuously evolving.


  • A Linux server instance.
  • Docker with non-root access turned on.

Run Apache Docker via Docker Hub Image

Using a container with a predefined Docker Hub image is the simplest approach to set up an Apache web server in Docker. Although you cannot modify the image for your deployment using this process, it still offers a great way to test a web server.

To deploy an Apache container based on the Docker Hub image, adhere to the instructions listed below.

Download the Apache Image for Docker

On Docker Hub, httpd is the recognised Apache image. Use the docker pull command to download the image to your system:

docker pull httpd

The output of the command displays the pull progress and reports when the download is complete.

Start the Apache Container

To create and launch a Docker container based on the httpd image, run the docker run command:

docker run -d --name [container-name] -p 80:[host-port] httpd

The command has a number of options.

  • The -d option instructs Docker to run the container as a background process or in detached mode.
  • You can give the container a name by using the --name flag. In the absence of this flag, Docker chooses a name at random.
  • The -p option maps the container's TCP port 80 to a free open port on the host system.

In the example that follows, a container named apache is created, launched, and published to port 80 on the host system using the httpd image.

docker run -d --name apache -p 80:80 httpd

Docker outputs the ID of the new container if there are no issues.

Check if Apache is Running

By launching a web browser and entering the server's IP address, you may test the new Apache installation:


You can also use localhost and the host port you gave the container to connect to the Apache installation on the same computer.


Apache shows the default page, indicating that the deployment was successful.

Note: Type the following to terminate a running Docker container:

docker stop [container-name-or-id]

See our Docker Commands Cheat Sheet for additional Docker management commands.

Run Apache via Dockerfile

Using a customised image made with Dockerfile is another option to deploy an Apache instance in Docker. To construct the image and run a container based on it, adhere to the instructions listed below.

Create a Directory for Apache Image

Start by assembling all the information pertinent to the image into a dedicated directory.

1) Create the apache directory and navigate to it.

mkdir apache && cd apache

2) Create or copy the files you want to include in the image in the directory.

For instance, create a new landing page by making an index.html file in a text editor:

nano index.html

Add some HTML to the file.

<p>This is a test page for the Apache deployment in Docker</p>

Save the file, then close it.

Note: You can manage and coordinate server provisioning with phoenixNAP Bare Metal Cloud servers because they deploy in a matter of minutes.

Build Dockerfile

The Dockerfile for the new image should then be created. All the directions Docker needs to put together a particular image are in the Dockerfile.

1) To generate the file, use a text editor.

nano Dockerfile

2) Set up the image in writing.

FROM httpd:latest
COPY index.html /usr/local/apache2/htdocs

The aforementioned example alters the most recent httpd image by copying index.html from the local directory into the /usr/local/apache2/htdocs directory. Moreover, container port 80 is made accessible for mapping to a host port by being exposed.

Save the file and exit.

3) To create a Dockerfile-based image, use docker build.

docker build -t [image-name] .

The output demonstrates how Docker executed the commands from the Dockerfile.

Run Apache Dockerfile as a Container

Execute the created image through an Apache container:

docker run -d --name [container-name] -p 80:[host-port] [image-name]

The example that follows uses the Dockerfile-created apache:v1 image to build a detached container with the name apache. Port 80 for containers is mapped to port 80 for hosts.

docker run -d --name apache -p 80:80 apache:v1

Verify if Apache is Running

Enter the server's IP address in a web browser to check the new Apache installation:


Apache delivers the test page contained in the custom image, validating the deployment's success.

Note: Clear the cache and reload the page if the browser displays any other page other the one that is now shown.

FAQs to Install Apache in Docker

Which Docker image should I use for Apache? 

You can use the official Apache HTTP Server image provided by the Apache Software Foundation in the Docker Hub. It is widely used and maintained.

How to pull the Apache image from Docker Hub? 

Use the command "docker pull httpd" to download the latest Apache HTTP Server image from Docker Hub.

How to create a Docker container for Apache? 

Execute the command "docker run -d -p 80:80 httpd" to create a Docker container based on the Apache image. This maps port 80 of the host to port 80 of the container.

How to access Apache running in a Docker container? 

Open a web browser and go to "http://localhost" or "http://<docker_host_ip>" if accessing from a remote machine. You should see the Apache default page.

How can I customize the Apache configuration in Docker? 

Create a local file with your custom Apache configuration and mount it into the container using the "-v" flag in the "docker run" command. For example: "docker run -d -p 80:80 -v /path/to/custom.conf:/usr/local/apache2/conf/httpd.conf httpd"

How to manage multiple Apache containers with Docker? 

Docker Compose allows you to define and manage multiple containers as services. Utilize a docker-compose.yml file to define each Apache container's configuration and interdependencies.

How to stop and remove a Docker container? 

To stop a container, execute the command "docker stop <container_id>". To remove it, use "docker rm <container_id>". You can retrieve the container ID by running "docker ps -a".


The tutorial discussed the two methods for deploying an Apache web server with Docker. The first approach involved using the official image, whereas the second explained how to make your own customised Apache image.

If you have any suggestions or queries, kindly leave them in the comments section.

Great! You’ve successfully signed up.
Welcome back! You've successfully signed in.
You've successfully subscribed to DevOps Tutorials - VegaStack.
Your link has expired.
Success! Check your email for magic link to sign-in.
Success! Your billing info has been updated.
Your billing was not updated.