I have been a hardcore CentOS user for many years now. I enjoyed its minimal install to create a light environment, intuitive installation process, and it’s package manager. Docker is the most popular container format today and provides developers and enthusiasts with an easy way to run workloads in containerized environments. I started using Docker in production at home for about a year now for services such as Plex Media Server, Web Server for this blog, ZNC, MineCraft, and MySQL to name a few. A Dockerfile is a set of instructions used to create a Docker image. I invested many hours creating perfect Dockerfiles using CentOS and Fedora to make deployments simple on any operating system. However, a personal revolution was brewing.
Docker performance on CentOS and Fedora are terribly slow. The reason for this is that Docker uses device mapper by default for storage. Device mapper is kernel-based framework that is “supposed” to be better than many advanced volume management technologies on Linux and provide an easier way for people to use Docker out of the box. There are workarounds to device mapper such as using OverlayFS and others but they did not work too well for me. When I build a container, each step in the Dockerfile can take a minute or more to complete such as adding a zip file to the image or replacing text in a configuration file. I have found many blog posts about this subject and bugs have been open for some time but I need a solution that works now.
DigitalOcean.com is great hosting provider that will let you run virtual servers or applications such as Docker in a VM running on a solid-state drives for prices starting at five dollars a month. When I tried using Docker on Digital Ocean or with Ubuntu, the performance was incredibly fast. When using CentOS with Docker on DigitalOcean, I had the same poor performance. Docker performance was also great when using Docker Machine, which is an easy way to run Docker on the Mac operating system using VirtuaBox. Last night, I had enough life experience to finally decide that a change must be made to my server and made the switch to Ubuntu.
I installed Ubuntu 15.10 server edition and it worked well for the most part. I think the CentOS/Fedora installer is light years ahead of Ubuntu’s. For example, Ubuntu has far too many prompts and configuring a disk is not as simple as on CentOS. In the end, I can have a CentOS system up and running faster than Ubuntu. I really enjoyed the software repositories on Ubuntu because they had all the Docker packages that I needed such as docker-compose out of the box. On CentOS, I need to install additional Docker repositories manually to get the same functionality. Ubuntu uses AUFS for the Docker storage driver. I had to change all of my Dockerfiles to use Ubuntu as the base operating system because some of my existing Dockerfiles will not work due to a Docker bug related to using CentOS/Fedora images on AUFS.
In conclusion, it was a lot of work to get done and I was up late past my bedtime. I thought it was a great investment in the future to save time building Docker containers. Since Ubuntu does not have the same Docker issues like on CentOS/Fedora, I should be able to move between cloud providers easier now with little effort.