Dockerfiles are great and easily readable specifications for the installation and configuration of an application. It is terse, can be understood by anyone who understands UNIX commands, results in a testable product and can easily be turned into an automated installation script using a little awk’ward magic. Just in case you want to install the application in question on the good old fashioned way, without the Docker hassle 🙂
In this case, we needed to experiment with the Codahale Metrics library and Zabbix. Instead of installing a complete Zabbix server, I googled for a docker container and was pleased to find a ready to run Zabbix server configuration created by Bernardo Gomez Palacio. . Unfortunately, the server stopped repeatedly after about 5 minutes due the simplevisor’s impression that it was requested to stop. I could not figure out where this request was coming from, and as it was pretty persistent, I decided to install zabbix on a virtual box.
So I checked out the docker-zabbix github project and found a ready to run Vagrant configuration to build the zabbix docker container itself (Cool!). The Dockerfile contained easily and readable instructions on how to install and configure Zabbix. But, instead of copy-and-pasting the instructions to the command prompt, I cloned the project on the vagrant box and created the following awk script in order to execute the instructions in the Dockerfile directly on the running system.
/^ADD/ {
sub(/ADD/, "")
cmd = "mkdir -p $(dirname " $2 ")"
system(cmd)
cmd = "cp " $0
system(cmd)
}
/^RUN/ {
sub(/RUN/, "")
cmd = $0
system(cmd)
}
After a few minutes, the image was properly configured. I just needed to run the database initialisation script (/start.sh) and ensured that all the services were started on reboot.
cd /etc/init.d
for i in zabbix* httpd mysqld snmp* ; do
chkconfig $i on
service $i start
done
Even if you do not use Docker in production, Dockerfiles are a great improvement in the specifications of installation instructions!