Perfect!

You updated the Python file to hello_world_ml.py and added a machine learning logic using Iris dataset, logistic regression, and saving a model.

I'll now update the full Dev.to article accordingly.

Here’s the new polished version ready for your post: 🚀


🚀 How to Dockerize a Simple Machine Learning App and Push It to DockerHub

Hey devs! 👋

In this post, I'll show you how to create a Docker image for a simple Machine Learning Python app and push it to DockerHub. 🚀

We’ll create a small ML project using the Iris dataset, logistic regression, and model saving.

Let’s get started! 🐳


1️⃣ Create a Python App

First, create a Python file named hello_world_ml.py with the following code:

python
from pandas import read_csv
from matplotlib import pyplot
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
import joblib

Step 1: Load dataset

filename = "Iris.csv"
data = read_csv(filename)

Step 2: Display data shape and preview

print("Shape of the dataset:", data.shape)
print("First 20 rows:\n", data.head(20))

Step 3: Plot and save histograms silently

data.hist()
pyplot.savefig("histograms.png")
pyplot.close()

Step 4: Plot and save density plots silently

data.plot(kind='density', subplots=True, layout=(3,3), sharex=False)
pyplot.savefig("density_plots.png")
pyplot.close()

Step 5: Convert to NumPy array and extract features/labels

array = data.values
X = array[:, 1:5] # Features
Y = array[:, 5] # Labels

Step 6: Split data into training and testing

test_size = 0.33
seed = 7
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size, random_state=seed)

Step 7: Create and train logistic regression model

model = LogisticRegression(max_iter=200)
model.fit(X_train, Y_train)

Step 8: Evaluate and display accuracy

result = model.score(X_test, Y_test)
print("Accuracy: {:.2f}%".format(result * 100))

Step 9: Save the trained model to a file

joblib.dump(model, "logistic_model.pkl")

✅ Make sure you also have the Iris.csv dataset in the same folder.


2️⃣ Create a Dockerfile

Next, create a file named Dockerfile in the same directory:

dockerfile

Use a lightweight Python image

FROM python:3.12-slim

Set the working directory

WORKDIR /app

Copy all files into the container

COPY . .

Install required libraries

RUN pip install pandas matplotlib scikit-learn joblib

Define the command to run the app

CMD ["python", "hello_world_ml.py"]

Explanation:

  • Base image: Python 3.12 slim.
  • Working directory: /app.
  • Installs all necessary Python libraries.
  • Runs the hello_world_ml.py script when container starts.

3️⃣ Build the Docker Image

Open your terminal, navigate to your project folder, and run:

bash
docker build -t your-dockerhub-username/ml-docker-app:latest .

Example:

bash
docker build -t myusername/ml-docker-app:latest .

✅ This command builds the Docker image and tags it.


4️⃣ Login to DockerHub

If not already logged in, run:

bash
docker login

Enter your DockerHub username and password when prompted.


5️⃣ Push the Docker Image to DockerHub

After building and logging in, push the image:

bash
docker push your-dockerhub-username/ml-docker-app:latest

Example:

bash
docker push Gowtham/ml-docker-app:latest

✅ This uploads your image to your DockerHub repository.


6️⃣ Pull and Run the Image from Anywhere

Anyone can now pull and run your ML app like this:

bash
docker pull Gowtham/ml-docker-app:latest
docker run Gowtham/ml-docker-app:latest

🎯 The container will load the Iris dataset, train a logistic regression model, save graphs, and display model accuracy!

Example output:

Shape of the dataset: (150, 6)
First 20 rows:
Id SepalLengthCm SepalWidthCm PetalLengthCm PetalWidthCm Species
0 1 5.1 3.5 1.4 0.2 Iris-setosa
...
Accuracy: 94.00%

🔥 Final Tips

  • Add .dockerignore to avoid copying unnecessary files.
  • Keep your Docker images lightweight.
  • Make sure your Iris.csv is included while copying files (COPY . . does this).
  • You can extend this with Flask API for serving predictions!

📢 That's it!

You now know how to Dockerize a Machine Learning Python app and share it worldwide via DockerHub. 🐳✨

If you found this helpful, smash that ❤ and share it with your dev friends!

Until next time, Happy Coding! 🚀


Would you also like me to give you some bonus ideas 💡 to extend this post (like "how to serve the trained model using Flask inside Docker") to make an even bigger article series on Dev.to? 🎯

It could really help you build a following! 🚀