Deploying your salary prediction ML model inside a Docker container hosted on an EC2 instance
A step-by-step guide to deploying your salary prediction ML model inside a Docker container hosted on an EC2 instance:
Step 1: Prepare the ML Model
- Train your model: Make sure your salary prediction model is trained and saved as a serialized file (e.g.,
model.pkl
). - Create a Flask API: If you haven't already, create a Flask API to serve the model predictions.from flask import Flask, request, jsonify
import pickle app = Flask(__name__) # Load the model model = pickle.load(open('model.pkl', 'rb')) @app.route('/predict', methods=['POST']) def predict(): data = request.get_json() prediction = model.predict([data['features']]) return jsonify({'prediction': prediction.tolist()}) if __name__ == '__main__': app.run(host='0.0.0.0', port=5000)
- Test the API locally: Run the Flask application locally to ensure it works as expected.
Step 2: Create a Dockerfile
- Create a
Dockerfile
in the same directory as your Flask app. Here's an example:# Use an official Python runtime as a parent imageFROM python:3.8-slim # Set the working directory in the container WORKDIR /app # Copy the current directory contents into the container at /app COPY . /app # Install any needed packages specified in requirements.txt RUN pip install --no-cache-dir -r requirements.txt # Make port 5000 available to the world outside this container EXPOSE 5000 # Run app.py when the container launches CMD ["python", "app.py"]
- Create a
requirements.txt
file to list the dependencies - Flask
scikit-learn
Step 3: Build and Test the Docker Image Locally
- Build the Docker image:docker build -t salary-prediction-app .
- Run the Docker container locally:docker run -p 5000:5000 salary-prediction-app
- Test the API: Use Postman or
curl
to test your API endpoint (http://localhost:5000/predict
).
Step 4: Set Up an EC2 Instance
- Launch an EC2 instance: Go to the AWS Management Console, launch an EC2 instance, and choose an appropriate AMI (e.g., Amazon Linux 2).
- Connect to the EC2 instance:ssh -i /path/to/your-key.pem ec2-user@your-ec2-public-dns
- Install Docker on the EC2 instance:sudo yum update -y
sudo amazon-linux-extras install docker sudo service docker start sudo usermod -a -G docker ec2-user
Step 5: Deploy the Docker Container on EC2
Copy your Docker image to the EC2 instance:
- You can use
docker save
anddocker load
commands to transfer the Docker image, or you can push the image to a Docker registry (e.g., Docker Hub) and pull it on the EC2 instance.
docker save salary-prediction-app | gzip > salary-prediction-app.tar.gzscp -i /path/to/your-key.pem salary-prediction-app.tar.gz ec2-user@your-ec2-public-dns:/home/ec2-user/ ssh -i /path/to/your-key.pem ec2-user@your-ec2-public-dns gunzip -c salary-prediction-app.tar.gz | docker load
- You can use
Run the Docker container on EC2:
docker run -d -p 80:5000 salary-prediction-app
Step 6: Access Your Application
- Access your app: The app should now be running on your EC2 instance. You can access it using the public DNS of your EC2 instance:http://your-ec2-public-dns/
Step 7: Secure Your Application
- Security groups: Make sure your EC2 instance security group allows inbound traffic on port 80 (HTTP).
- Optional: Set up a domain name and SSL for better security and accessibility
Your Application
- Security groups: Make sure your EC2 instance security group allows inbound traffic on port 80 (HTTP).
- Optional: Set up a domain name and SSL for better security and accessibility
Comments
Post a Comment