Fundamentally these images all build a Docker image with a Python
virtualenv. There are minor details in how they go about it, but none of
them have any real consequence for the final built image. We can use the
same code to build all these images and just parametrize it in the build
context.
* Port build-dev-docker-jobs-image.sh to Python (build_docker_image.py).
This makes it easier to share code between them; provides better
argument parsing; gives us a better base to build from; and makes
sense for build tooling that works so much with Python.
* Update the Dockerfile to use a two-stage build. It still builds a
virtualenv with wheels provided by the build script, but a two-stage
build keeps image sizes in line with what we had with the package-based
approach, which is appropriate for an image that gets distributed as
widely as arvados/jobs.
* Synchronize everything on bookworm-slim.
Arvados-DCO-1.1-Signed-off-by: Brett Smith <brett.smith@curii.com>