These days I’ve been dockerizing everything, and love the fact that docker allows for a very transparent deployment process with the server management side of things. Currently I’m working for a Canadian telecommunications company, and updating some of their web development processes and pipelines using the power of docker. There is something satisfying about typing
docker-compose up -d and that’s it (well, I guess I’ve set some of the older guys with a Portainer GUI, semantics!)
I’ve created a repo with all the files here, so if you don’t bother with the explanation clone away. Let’s start with the static page
index.html, it’s basic html so there’s not to much to say
To serve this page to someone, we need a web server to handle the request. I usually use Nginx since it does it all (reverse proxy, load balancer, mail proxy, e.t.c) and it’s super light weight. So we’ll use the convenient docker team supported image
nginx:alpine which you can learn more about on nginx’s dockerhub page. I’ve also included an example nginx config file
default.conf to overwrite the default’s within the base image.
Here we can see that the server configuration is to listen on port 80 with the server name as localhost. If you’re deploying this to some server, you’d just had to change to the domain name that points there e.g. example.com. Since the only location is
/, when you ask for
server_name:port, it will treat the root folder on server as
/usr/share/nginx/html and there it’ll serve you the the index file named
index.htm. You can add other locations to point to other files in on your server (in this case it’s your container) by just adding new location blocks. Now that’s it for the server content and the nginx configuration. All we have to do is put it all together into a
Dockerfile. So we’ll start with the base image
nginx:alpine, and then copy the html file and config file into the container.
That’s it for the container, we could build the image with
docker build -t static-web-page ., but I usually prefer to use compose so I can simply call
docker-compose up -d and call it a day. So we’ll add
The basic highligths here are we’re using docker-compose version 2. The one service in the compse is called
static-web and it is built using the previous
Dockerfile with port 80 inside the container taking requests from 8000 outside. With this compose file, we can easily launch the server with
docker-compose up -d and visit
localhost:8000 to get the html page we created at the beginning. Now any deploying this web page is one command from any computer with docker and docker-compose on it. Feel free to comment below if you have any questions.