Presenting with Docker

This is the second post about presenting I have written. To catch up on the reasons why one should consider the use of HTML-based presentation framework, please refer to my previous post Presenting with reveal.js.

Now, that the presentation is complete, we can see that many of the pain points were addressed simply by the choice of the tools used to create the presentation. However, if you are in charge of department looking after corporate presentations and dealing with PR, there is a way to make this process even more streamlined than having people manage their presentations in version control system that are later deployed locally or publicly. There is still space for further improvements and automation. Using solutions like Docker can further automate the whole process, unify the standards and the deployment itself.

As it turns out, Docker and frameworks like reveal.js pair well. The use of Docker allows you to employ standardization like corporate templates and graphical identity and bake it into the base image that can be used by the automation pipeline to create the final presentation image. This might seem like a daunting task but thanks to the work done by the community one can utilize the templates that are readily available online. In case of security concerns you might want to build your own templates based on this work quite easily.

To demonstrate how easy it is, I am using this sample presentation from Hakim El Hattab (created by Jay Raj) based on work from Jayson Winters for Web Designer Magazine. Another project I will be using is a small Docker template created by Nigel Brown called docker-revealjs. Nigel made the whole process really easy just by imposing some folder structure to be followed and his Docker build file will take care of the rest.

 Taken from documentation of reveal.js and docker-revealjs:

index.html – the basis of the presentation
/md – a directory containing a file with slides in markdown format, if required
/media – a directory containing any media used in the presentation, if required

/css – Core styles without which the project does not function
/js – Like above but for JavaScript
/plugin – Components that have been developed as extensions to reveal.js
/lib – All other third party assets (JavaScript, CSS, fonts)

Just include a Docker build file with following code in your project:

FROM nbrown/revealjs:3.3.0-onbuild

and use Docker to build the image to host your presentation:

docker build -t my_presentation .

If you followed the folder structure outlined in the documentation, once all the dependencies have been downloaded you are good to go. Launch the image:

docker run -it --rm -p 8000:8000 my_presentation

Further enhancements are available if you want, based on what is available in framework. If you want a sample project to play with, feel free to follow this link to my repo with all you need to hit the road running.


It is easy to image plugging this mechanism into a Jenkins pipeline, followed by simple AWS CloudFormation script to make the presentation available online. In my honest opinion, this way of creating presentations and presenting is very comfortable and the benefits of versioning and distributions are just great. Definitely worth checking out, whether you are a student or working professional. If you like the simplicity of this process, please check out Nigel Brown and show the guy some love :).

Leave a Reply

Your email address will not be published. Required fields are marked *