DEV Community

Suman Giri
Suman Giri

Posted on • Originally published at coderfact.com

I Automated Docker Pulls with Archon in 30 Lines

Automating Docker pulls with Archon

It was 8am on a Monday and I had just grabbed a cup of chai from the street vendor near my apartment in Kolkata when I noticed my Docker deploy script had been running for 25 minutes, causing my CoderFact website to be unavailable. Again. I was trying to get everything ready for a big traffic spike expected that day.

Look, I've dealt with slow internet and power cuts in Kolkata, but this was different — my Docker pull commands were just hanging indefinitely. I'm not gonna lie, it was frustrating.

Introduction to Docker Automation

Docker automation workflow

Honestly, I've been using Docker for a while now, and I've always known that manual Docker pulls can be a pain. But this particular Monday morning was when I decided I'd had enough. I started searching for a way to automate my Docker pulls — and that's when I stumbled upon Archon.

What I needed was a way to automate my Docker pulls and deployments without having to manually run docker-compose pull every time. I mean, who has the time for that, right?

I first tried using docker pull with the --all-tags flag, but that didn't solve the issue. Here's what I tried:

import subprocess

# Attempt to pull all Docker images
subprocess.run(["docker", "pull", "--all-tags"])
Enter fullscreen mode Exit fullscreen mode

What this does is attempt to pull all Docker images, but it didn't quite work out for me — the process would still hang sometimes.

The Problem with Manual Docker Pulls

Manual Docker pull script

# Example of a manual Docker pull script
for image in $(docker images -q); do
docker pull $image
done
Enter fullscreen mode Exit fullscreen mode

I then attempted to use a Bash script to automate the pulls, but it was cumbersome and prone to errors. I mean, I'm a frontend dev, not a sysadmin, so this was way out of my comfort zone.

The Bash script looked something like this:

#!/bin/bash

# Loop through all Docker images and pull them
for image in $(docker images -q); do
  docker pull $image
done
Enter fullscreen mode Exit fullscreen mode

What this does is loop through all Docker images and attempt to pull them, but like I said, it was error-prone and not really what I needed.

Implementing Archon for Automated Docker Pulls

Archon automation architecture

That's when I decided to give Archon a shot. I mean, it's a Python library, so I figured it would be easy to integrate with my existing Docker setup. And boy, was I right.

Here's the core code snippet that uses Archon to automate my Docker pulls and deployments:

import archon

# Define a task to pull and deploy Docker images
@archon.task
def pull_and_deploy():
  # Pull all Docker images
  archon.run(["docker", "pull", "--all-tags"])

  # Deploy the images
  archon.run(["docker-compose", "up", "-d"])

# Run the task
pull_and_deploy()
Enter fullscreen mode Exit fullscreen mode

What this does is define a task that pulls all Docker images and then deploys them using docker-compose. It's pretty straightforward, and it's been a game-changer for me.

Results and Future Improvements

Automation results comparison

So, what were the results? Well, I went from 32 minutes to 2 minutes and 14 seconds for a full Docker image pull and deployment. That's a huge time savings, and it's been a massive relief.

While implementing Archon, I discovered that it also provided built-in support for automated retries and failure notifications, which ended up saving me from a potential outage caused by a Docker Hub outage. I mean, talk about a nice surprise, right?

If you're interested in learning more about how I use Archon and other DevOps tools at CoderFact, you can check out my blog at coderfact.com.

CoderFact website with automation

If you build this, drop a comment — I'm genuinely curious what you use it for. And if it saves you time, the clap button is right there.


More free tools and tutorials at CoderFact. AI-assisted draft, reviewed and edited by me.

Top comments (0)