Configure docker httpd image
Recently I had to publish multiple application on a single machine and all applications will be publicly available on their own domains names.
As I am a docker addict, I want all my applications to be running as a docker container.
Imagine I have the following applications :
name | url | Container Name | Container Port (Expose) |
---|---|---|---|
app1 | www.app1.lol | app1-container | 3000 |
app2 | www.app2.lol | app2-container | 4000 |
app3 | www.app3.lol | app3-container | 8080 |
IMPORTANT: I assume that all container are running (with or without
-P
flag)
The thing is that I do not want to install a proxy (Apache or Nginx) on the docker host, so I wanted to create a docker container that will act as a proxy of all my applications
So I decided to use the docker httpd:2.4 image.
Create your project directory : mkdir ~/apache-proxy & cd ~/apache-proxy
Extract httpd.conf
First you will need to “extract” the httpd.conf
file from the image to be able to configure your apache server.
So you need to start a docker httpd container in a terminal :
docker run -it --name apacheTmp httpd:2.4
NOTE: The name apacheTmp is just here to make extraction easy and to show you that this container will be deleted after use…
Then open a new terminal window (or a new sesion if you are doing it remotely)
And copy the httpd.conf
file :
docker cp apacheTmp:/usr/local/apache2/conf/httpd.conf ~/apache-proxy
NOTE: personnaly I prefer to create a copy (to keep the original as it was) :
cp ~/apache-proxy/httpd.conf ~/apache-proxy/my-httpd.conf
.
Configure apache and vhosts
Now I edited the my-httpd.conf
file to enable modules proxy and proxy_http,
I just remove comment on the lines :
LoadModule proxy_module modules/mod_proxy.so
And
LoadModule proxy_http_module modules/mod_proxy_http.so
Then I created, at the end of the files my 3 vhosts
- www.app1.lol
<VirtualHost *:80> ServerName www.app1.lol ProxyPass / http://app1:3000/ </VirtualHost>
- www.app2.lol
<VirtualHost *:80> ServerName www.app2.lol ProxyPass / http://app2:4000/ </VirtualHost>
- www.app3.lol
<VirtualHost *:80> ServerName www.app3.lol ProxyPass / http://app3:8080/ </VirtualHost>
Create Docker Container
Now I can Create my “proxy” docker file :
- ~/apache-proxy/Dockerfile
FROM httpd:2.4 COPY ./my-httpd.conf /usr/local/apache2/conf/httpd.conf
So I can build now :
docker build -t my/apache-proxy .
Then I can run it :
docker run -d -p 80:80 --link app1-container:app1 --link app3-container:app3 --link app2-container:app2 --name my-proxy my/apache-proxy
And now you should be able to access your 3 apps …