How to Customize the Base Ubuntu Version (e.g., noble, focal) in LabNow AI Builds
To customize the Ubuntu base version in LabNow AI builds, override the BASE_IMG build argument at build time, which defaults to ubuntu:noble in the docker_atom/Dockerfile.
The LabNow AI foundation repository (labnow-ai/lab-foundation) provides containerized environments built on Ubuntu Linux. When you need to customize the base Ubuntu version—whether switching from noble to focal, jammy, or another LTS release—the project exposes a configurable build argument that controls the entire image stack without requiring permanent Dockerfile modifications.
Understanding the Base Image Configuration
The root of the image hierarchy is defined in docker_atom/Dockerfile, where the base Ubuntu version is parameterized through the BASE_IMG build argument. According to the source code, this argument defaults to the latest LTS release:
# latest # default value: Latest LTS version of Ubuntu (https://hub.docker.com/_/ubuntu)
ARG BASE_IMG="ubuntu:noble"
FROM ${BASE_IMG}
This design pattern allows the entire LabNow AI stack to inherit from a single, configurable source image.
Local Build Customization
For local development or testing, you can override the default noble base by passing a specific Ubuntu tag during the Docker build process.
Overriding BASE_IMG with Docker Build
Use the --build-arg flag to inject your preferred Ubuntu version without editing source files:
# Switch to Ubuntu focal for local testing
docker build \
--build-arg BASE_IMG=ubuntu:focal \
-t labnow/atom:focal-custom \
./docker_atom
CI/CD and Automated Builds
The GitHub Actions workflow at .github/workflows/build-docker.yml supports dynamic base image selection through workflow inputs, enabling automated builds across different Ubuntu versions.
Configuring GitHub Actions Workflow Dispatch
The workflow accepts a base_image input parameter that forwards to the BASE_IMG build argument:
on:
workflow_dispatch:
inputs:
base_image:
description: 'Ubuntu base image (e.g. ubuntu:focal)'
default: 'ubuntu:noble'
required: false
When executed, the workflow passes this value to the Docker build command:
docker build \
--build-arg BASE_IMG=${{ inputs.base_image || 'ubuntu:noble' }} \
-t ${{ env.IMAGE_NAME }} .
This configuration supports matrix builds and compatibility testing across multiple Ubuntu LTS releases.
Propagation Across the Image Stack
The docker_atom image serves as the parent for downstream images including docker_core and docker_base. These child images reference the base through the pattern FROM ${BASE_NAMESPACE:+$BASE_NAMESPACE/}${BASE_IMG}, ensuring that modifying the BASE_IMG argument in the parent automatically propagates Ubuntu version changes throughout the entire LabNow AI container hierarchy.
Summary
- The
BASE_IMGbuild argument indocker_atom/Dockerfilecontrols the Ubuntu base version, defaulting toubuntu:noble. - Override locally using
docker build --build-arg BASE_IMG=ubuntu:focalfor immediate testing without code changes. - The GitHub Actions workflow at
.github/workflows/build-docker.ymlsupports version selection viaworkflow_dispatchinputs. - Child images inherit the base configuration automatically, maintaining consistency across the labnow-ai/lab-foundation stack.
Frequently Asked Questions
What is the default Ubuntu version in LabNow AI builds?
The default Ubuntu base version is ubuntu:noble (24.04 LTS), defined as the default value for the BASE_IMG argument in docker_atom/Dockerfile. You can verify this on lines 3-5 of the Dockerfile where ARG BASE_IMG="ubuntu:noble" is declared.
Can I use any Ubuntu tag with the BASE_IMG argument?
Yes, any valid Ubuntu Docker Hub tag will work, including specific point releases like ubuntu:22.04 or ubuntu:jammy. The build argument accepts any string that resolves to a valid base image reference, allowing you to pin to specific LTS versions or use rolling tags.
Do I need to modify multiple Dockerfiles to change the base version?
No, you only need to override the BASE_IMG argument when building the docker_atom image. Downstream images in docker_core, docker_base, and other directories automatically inherit this base through the ${BASE_IMG} reference pattern, ensuring single-point configuration for the entire stack.
How do I permanently change the default Ubuntu version?
To permanently change the default, edit line 4 of docker_atom/Dockerfile to modify the ARG BASE_IMG default value from "ubuntu:noble" to your preferred tag (e.g., "ubuntu:focal"), then commit and push the change. All subsequent builds will use the new default unless explicitly overridden at build time.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →