1. The Problem
My ultimate goal is to deploy my ML models to the cloud, but I don’t currently have access to an AWS or GCP account. This is a hard blocker. Furthermore, developing directly on a live cloud can be slow and costly. I need a way to build and test my cloud infrastructure locally, offline, and for free.
2. The “Plain English” Intuition
The solution is to run a “private cloud” directly on my Fedora machine. We will use a tool called MinIO, which is an open-source program that perfectly mimics Amazon’s S3 (Simple Storage Service). By running MinIO inside a Podman container, we get a completely isolated, disposable, and fast S3-compatible server. Anything I learn to do with MinIO is directly transferable to AWS S3.
3. The Lab Notebook
Part A: Running the Local Cloud Server
The first step was to run MinIO using Podman. This required learning the key podman run
flags to configure the server.
podman run -d ...
: The-d
(detached) flag was critical. It runs the container in the background so it doesn’t shut down when I close my terminal.-p 9001:9001
: This maps my local machine’s port 9001 to the container’s web console port.-p 9000:9000
: This maps my local port 9000 to the container’s API port, which my Python code will use.-v ~/minio-data:/data
: This connects a folder on my machine to a folder inside the container, ensuring any data I upload is saved permanently.-e "MINIO_ROOT_USER=..."
: This sets the necessary username and password for the server.
After running the container, I accessed the web console at http://127.0.0.1:9001
, created a bucket named autocleanse-data
, and uploaded my titanic_train.csv
file.
Part B: Programmatic Access with boto3
The real test is controlling the cloud with code. I wrote a Python script (cloud_test.py
) to connect to my local MinIO server and list its buckets. The key was configuring the boto3
client correctly.
import boto3
# Credentials from the podman run command
access_key = "admin"
secret_key = "password"
# The local server URL, not the AWS default
endpoint_url = "http://127.0.0.1:9000"
s3_client = boto3.client(
's3',
endpoint_url=endpoint_url,
aws_access_key_id=access_key,
aws_secret_access_key=secret_key
)
# This command proves the connection works
response = s3_client.list_buckets()
for bucket in response['Buckets']:
print(f"Found bucket: {bucket['Name']}")
4. Academic Bridge
- Cloud Unit 2.1 (Virtualization): Running MinIO in a Podman container is a form of Containerization, which is a lightweight type of application virtualization.
- Cloud Unit 3.2 (Object-Based Storage): S3 and MinIO are premier examples of Object Storage, the dominant storage type for modern cloud applications and data lakes.
5. Why It Matters
A freelancer who can only work when connected to a live, expensive cloud service is inefficient. Knowing how to simulate the cloud locally allows for rapid, offline development and testing. This skill drastically speeds up development cycles and demonstrates a deep understanding of the underlying cloud technologies.