As I continue my plan to adopt docker for most of my personal infrastructure, including this website, I am learning a valuable lesson. Docker works best with simple images. I imagine there are some complex images out there that work fine but I believe its best to avoid those situations. The ability to support changes and updates and how items interact with each other just adds to the layers. For instance I’m a big fan of CentOS. I know it sacrifices running the latest for dependability. This caused me to have issues using it in a Docker image with apache and PHP 7.2. It doesn’t naively support PHP 7.2 so I started down the path for work arounds. I then realized that it would be really simple to use a base image that has native support. In the end I accomplished with Ubuntu very easily which was becoming more and more complex in CentOS. As an aside I do hope that CentOS 8 is out soon so it can take advantage of some of the newer versions.
Here’s my Docker file, I know I need to optimize my commands to reduce the layers but it works fine:
FROM ubuntu:latest ARG DEBIAN_FRONTEND=noninteractive RUN apt update RUN apt upgrade -y RUN apt install apache2 php libapache2-mod-php php-mysql -y EXPOSE 80 CMD ["/usr/sbin/apache2ctl", "-DFOREGROUND"]