My current set of tools for deploying my application to production includes Packer and Terraform. I didn't write all of the code for the deployments, but I've been over most of it now.
When trying to upgrade my server from Ubuntu 20.01 to 22.01, I ran into some problems with conflicting versions of dependencies (related to postgres, mostly). My first instinct was to create an EC2 instance, then walk through each step manually, but I realized I didn't even have to spin up an instance if I could use Docker.
I'm not much of a Docker user, but I've used it a few times professionally. Mostly other people have done the hard work of creating a docker image, and I've run it for development. So I thought this was a great opportunity to try using it myself.
I started by spinning up a docker image for the target Ubuntu version, named
docker pull ubuntu:jammy docker create -it --name jelly ubuntu:jammy docker start jelly docker attach jelly
Then running through the scripts from my packer build manually:
echo "deb http://apt.postgresql.org/pub/repos/apt/ bionic-pgdg main"> /etc/apt/sources.list.d/pgdg.list apt-get update apt-get install -y wget gnupg wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add - export DEBIAN_FRONTEND=noninteractive apt update && apt upgrade -y && apt auto-remove -y && apt update apt-get install -y unzip libpq-dev postgresql-client-14 nginx curl awscli logrotate
This is where I get the errors about conflicting versions or versions not available. Did you catch it?
echo "deb http://apt.postgresql.org/pub/repos/apt/ bionic-pgdg main"> /etc/apt/sources.list.d/pgdg.list
bionic in there refers to the version of Ubuntu that we are requesting the dependencies for. It should be jammy!
This was a great example where Docker saved me some time (and a few pennies) from not having to spin up a cloud instance. And there really wasn't much to learn about Docker itself to dive in. So my advice to you is to give Docker a try for a simple use case like this. Despite being used in massive (sometimes very complicated) build chains, Docker is a relatively simple technology to get started with if you already have some familiarity with the Linux version you are planning to use in your container.
Maybe someday I'll start using it for building a small project...