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! π
Top comments (0)