Probo Docker Images Restructure

Probo uses pre-built Docker images to power the docker containers that run each Probo build. These Probo Docker images were previously provisioned using Puppet, which is a tool we’ve used at Zivtech for server provisioning for a long time. Over the last year, we switched to using Ansible to provision these images, which was a fairly smooth transition after we figured out the new Ansible syntax. Overall, Ansible has made our Probo image builder code cleaner and easier to manage.

Our new Ansible provisioning workflow allows us to roll out new and updated Probo Docker images much faster, with less time battling dependencies. We now have a matured workflow for rolling out new Probo images, so it’s time move on to restructuring our Docker image tags to be a bit more logical in their naming convention.

We always had a difficult time getting the Puppet dependencies to resolve themselves. Ansible resolved this by not having layers of dependencies at all. This has allowed us more time to work on adding new images and packages for our customers to use in their Probo builds.

This post outlines some upcoming changes in the Probo Docker images naming convention and old image tags that will be going away during the restructure.

Current Whitelisted Probo Docker Images

Below is a list of the current image tags that are whitelisted that can be defined in your project’s .probo.yaml file. When no image is defined, the default image used is currently proboci/ubuntu-14.04-lamp.

  • proboci/ubuntu-14.04-lamp
  • proboci/ubuntu-14.04-lamp:beta
  • proboci/ubuntu-14.04-lamp:5.6-beta
  • proboci/ubuntu-14.04-lamp:7.0-beta
  • proboci/ubuntu-14.04-lamp:7.1-beta
  • proboci/ubuntu-14.04-lamp:php-5.6
  • proboci/ubuntu-14.04-lamp:php-7.0
  • proboci/ubuntu-14.04-lamp:php-7.1
  • proboci/ubuntu-14.04-lamp:php5.6-nightly
  • proboci/ubuntu-14.04-lamp:php7.0-nightly
  • proboci/ubuntu-14.04-lamp:php7.1-nightly
  • proboci/ubuntu-14.04-lamp:latest
  • proboci/ubuntu-16.04-lamp:php7.0-nightly
  • proboci/ubuntu-16.04-lamp:php7.1-nightly
  • proboci/ubuntu-16.04-lamp:php7.2-nightly

New Whitelisted Probo Docker Images

Below is a list of the new Probo Docker images that will be whitelisted that can be defined in your project’s .probo.yaml file. Over the next few releases of our images, we’ll be retiring some of our old image tags shown above for the new image tags below.

  • proboci/ubuntu-14.04-lamp
  • proboci/ubuntu-14.04-lamp:latest
  • proboci/ubuntu-14.04-lamp:php-5.5
  • proboci/ubuntu-14.04-lamp:php-5.5-beta
  • proboci/ubuntu-14.04-lamp:php-5.6
  • proboci/ubuntu-14.04-lamp:php-5.6-beta
  • proboci/ubuntu-14.04-lamp:php-7.0
  • proboci/ubuntu-14.04-lamp:php-7.0-beta
  • proboci/ubuntu-14.04-lamp:php-7.1
  • proboci/ubuntu-14.04-lamp:php-7.1-beta
  • proboci/ubuntu-14.04-lamp:php-7.2
  • proboci/ubuntu-14.04-lamp:php-7.2-beta
  • proboci/ubuntu-16.04-lamp
  • proboci/ubuntu-16.04-lamp:latest
  • proboci/ubuntu-16.04-lamp:php-7.2
  • proboci/ubuntu-16.04-lamp:php-7.2-beta
  • proboci/ubuntu-16.04-lamp:php-7.1
  • proboci/ubuntu-16.04-lamp:php-7.1-beta
  • proboci/ubuntu-16.04-lamp:php-7.0
  • proboci/ubuntu-16.04-lamp:php-7.0-beta

Why the Changes?

The default image for Probo builds has been proboci/ubuntu-14.04-lamp since we launched, which defaults to the proboci/ubuntu-14.04-lamp:latest tag from the Docker Hub. This particular tag has not been updated in over two years, which means its tag of :latest is quite misleading. During our Probo Docker Images Restructure process, we plan on updating our default image to a new stable tag. Then we will move to using the :latest tag as our most bleeding edge release.

The other big change in our newer images is that any of the older -nightly image tags will be replaced with a -beta tag and non-beta tags will be considered stable releases. We’ve also added a :latest tag for 16.04, along with a few new stable tags for 16.04 images to pair with their -beta tags. This should set the stage for much more stable tests for your Probo Builds, or allow you to try out the latest features we’re working on adding to our images in the -beta releases.

Probo Docker Image Release Schedule

Our original plan for having nightly Probo image releases sounded good on paper, but was not very maintainable in practice. Instead, we’ve decided to move to a new release schedule that fits with the Docker project’s own release schedule. With this new release schedule there will be stable releases once per quarter and edge releases once per month. We went with beta instead of edge for our naming convention, as it was already in use for our older Probo image tags. We’ll try our best to stick to the release schedule as outlined below for all upcoming Probo Docker image releases.

  • Stable: A stable Probo Docker image will be released once per quarter after thorough live testing of the previous beta tagged release.
  • Beta: A beta Probo Docker image will be released once per month that will contain updates to packages and possibly new features.

We hope the new release schedule will allow our customers to experience both better stability on the stable image tags and allow others the ability to have bleeding edge features in their Probo Builds.

How Do I Prepare?

We will be updating and removing some older Probo Docker images from the whitelist, but only after giving our customers who use custom images in their .probo.yaml files enough time to prepare and change them to a new one. Here are some steps you can do to prepare for these upcoming changes during the restructure.

Note: Those who have no image: line defined in their .probo.yaml file can skip these steps, as your builds will automatically use the new stable image that we define as a default on the next build after we deploy the restructure.

  • Remove the image: line defined in your .probo.yaml file and use the default image if you can.

    • This is the safest method to deal with the upcoming restructure, as the default image is defined in Probo and new builds will use this image on the next build after the restructure has been deployed.
  • Switch to a stable image instead of a -beta tagged image.

    • The Stable images are not going anywhere and will be receiving updates to packages during the restructure.
    • Examples: proboci/ubuntu-14.04-lamp:php-5.6, proboci/ubuntu-14.04-lamp:php-7.0, proboci/ubuntu-14.04-lamp:php-7.1
  • Create a PR that is ready to go with the new image tag you want to use after the restructure has been deployed.

    • This will allow you to keep using the config you have for now, and you’ll be ready to start new builds using the new images as soon as the restructure has been deployed.
    • Use the list of new whitelisted Probo Docker images outlined above to choose the new image that best fits your project. Either have that ready to commit, or set up a PR ahead of time to add those changes to your repository.

New Default Probo Docker Image

We’ve created a short survey to get some feedback from our Probo customers on what the new default image should be after the restructure. Ubuntu 16.04 has been out for a while, and PHP 7 is a huge bump in performance; every PHP site should be taking advantage of it if possible. Probo has been out for over two years now, so perhaps it’s time to upgrade the default image to a 16.04 stable image release instead. Let us know what you think by filling out the survey we created on Google Forms, in the comments below, or come join the conversation on Slack if you aren’t there already.