Containerise a PyPI package

By the end of this tutorial you will be able to run pyfiglet via docker:

$ docker run --rm -it pyfiglet:0.7.6 exec pyfiglet hello
 _          _ _
| |__   ___| | | ___
| '_ \ / _ \ | |/ _ \
| | | |  __/ | | (_) |
|_| |_|\___|_|_|\___/

Prerequisites

Project Setup

To create a new Rockcraft project, create a new directory and change into it:

mkdir pyfiglet-rock && cd pyfiglet-rock

Next, create a file called rockcraft.yaml with the following contents:

name: pyfiglet
base: [email protected]
version: '0.7.6'  # Note: should match `pyfiglet` below
summary: A rock for pyfiglet
description: A rock for pyfiglet
license: Apache-2.0
platforms:
  amd64:

parts:
  pyfiglet:
    plugin: python
    source: .
    python-packages:
      - pyfiglet==0.7.6  # Note: should match `version` above
    stage-packages:
      - python3-venv

Pack the rock with Rockcraft

To build the rock, run:

rockcraft pack

Run the rock in Docker

First, import the recently created rock into Docker:

sudo /snap/rockcraft/current/bin/skopeo --insecure-policy copy oci-archive:pyfiglet_0.7.6_amd64.rock docker-daemon:pyfiglet:0.7.6

Now run the pyfiglet command from the rock:

docker run --rm pyfiglet:0.7.6 exec pyfiglet it works!

Which should print:

 _ _                        _        _ 
(_) |_  __      _____  _ __| | _____| |
| | __| \ \ /\ / / _ \| '__| |/ / __| |
| | |_   \ V  V / (_) | |  |   <\__ \_|
|_|\__|   \_/\_/ \___/|_|  |_|\_\___(_)
                                       

Explore the running container

Since the rock uses an ubuntu base, you can poke around in a running container using bash, via:

$ docker run --rm -it pyfiglet:0.7.6 exec bash
root@14d1812a2681:/# pyfiglet hi
 _     _
| |__ (_)
| '_ \| |
| | | | |
|_| |_|_|