Docker একটি ওপেন সোর্স প্ল্যাটফর্ম যা ডেভেলপারদের অ্যাপ্লিকেশন এবং তাদের ডিপেনডেন্সি একত্রে প্যাকেজ করতে সাহায্য করে। Docker এর মাধ্যমে আপনি আপনার FastAPI অ্যাপ্লিকেশনকে একটি কনটেইনারে রান করতে পারেন, যা সহজে যে কোনো পরিবেশে (local, staging, production) ডিপ্লয় করা যায়।
এখানে আমরা দেখব কিভাবে FastAPI অ্যাপ্লিকেশনকে Docker ব্যবহার করে ডিপ্লয় করা যায়।
Step 1: FastAPI অ্যাপ তৈরি করা
প্রথমে একটি সাধারণ FastAPI অ্যাপ তৈরি করুন। উদাহরণস্বরূপ:
main.py:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"message": "Hello, FastAPI with Docker!"}
এটি একটি খুব সাধারণ FastAPI অ্যাপ যেখানে একটি GET এন্ডপয়েন্ট রয়েছে, যা {"message": "Hello, FastAPI with Docker!"} রিটার্ন করবে।
Step 2: requirements.txt তৈরি করা
Docker কনটেইনারে অ্যাপ চালানোর জন্য প্রয়োজনীয় লাইব্রেরি ইনস্টল করার জন্য একটি requirements.txt ফাইল তৈরি করুন।
requirements.txt:
fastapi
uvicorn[gunicorn]
এখানে আমরা FastAPI এবং Uvicorn ইনস্টল করছি। Uvicorn হলো FastAPI অ্যাপ রান করার জন্য একটি ASGI সার্ভার, এবং Gunicorn হলো এটি ডিপ্লয়মেন্টের জন্য একটি ওয়েব সার্ভার।
Step 3: Dockerfile তৈরি করা
Docker কনটেইনার তৈরি করতে আপনাকে একটি Dockerfile তৈরি করতে হবে, যেখানে কনটেইনার তৈরির জন্য নির্দেশনা থাকবে।
Dockerfile:
# Step 1: Use an official Python runtime as a parent image
FROM python:3.9-slim
# Step 2: Set the working directory in the container
WORKDIR /app
# Step 3: Copy the current directory contents into the container at /app
COPY . /app
# Step 4: Install any needed packages specified in requirements.txt
RUN pip install --no-cache-dir -r requirements.txt
# Step 5: Make port 80 available to the world outside this container
EXPOSE 80
# Step 6: Define environment variable
ENV NAME World
# Step 7: Run uvicorn to serve the FastAPI app
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80"]
ব্যাখ্যা:
FROM python:3.9-slim: এই লাইনটি Python 3.9 slim ইমেজ ব্যবহার করে কনটেইনার তৈরি করবে।WORKDIR /app: কনটেইনারের মধ্যে একটি কাজের ডিরেক্টরি সেট করবে, যেখানে অ্যাপের সমস্ত ফাইল কপি হবে।COPY . /app: আপনার FastAPI অ্যাপের সমস্ত ফাইল কনটেইনারে কপি করবে।RUN pip install --no-cache-dir -r requirements.txt: কনটেইনারে প্রয়োজনীয় প্যাকেজ ইনস্টল করবে।EXPOSE 80: কনটেইনারের port 80 খুলবে যাতে এটি বাইরে অ্যাক্সেসযোগ্য হয়।CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80"]: কনটেইনার শুরু হলে Uvicorn ব্যবহার করে FastAPI অ্যাপ রান করবে।
Step 4: Docker Image Build করা
Dockerfile এবং requirements.txt ফাইল তৈরি করার পর, Docker image তৈরি করতে হবে।
docker build -t fastapi-app .
এখানে, -t fastapi-app হল Docker ইমেজের নাম।
Step 5: Docker Container চালানো
Docker ইমেজ তৈরি হয়ে গেলে, কনটেইনার রান করার জন্য নিচের কমান্ডটি ব্যবহার করুন:
docker run -d -p 8000:80 fastapi-app
-d: কনটেইনারটি ব্যাকগ্রাউন্ডে রান করবে।-p 8000:80: কনটেইনারের port 80 কে হোস্ট মেশিনের port 8000 এর সাথে ম্যাপ করবে।
এখন, আপনি ব্রাউজারে গিয়ে http://localhost:8000/ URL-এ অ্যাপটি অ্যাক্সেস করতে পারবেন।
রেসপন্স:
{
"message": "Hello, FastAPI with Docker!"
}
Step 6: Docker Container Logs দেখুন
যদি আপনি কনটেইনারের লগ দেখতে চান, তাহলে নিচের কমান্ডটি ব্যবহার করতে পারেন:
docker logs <container_id>
এখানে <container_id> হল আপনার Docker কনটেইনারের আইডি, যা আপনি docker ps কমান্ড দিয়ে দেখতে পারবেন।
Step 7: Docker Container বন্ধ করা
আপনি যদি কনটেইনার বন্ধ করতে চান, তবে নিচের কমান্ডটি ব্যবহার করুন:
docker stop <container_id>
এখানে <container_id> আপনার কনটেইনার আইডি।
Step 8: Docker Compose ব্যবহার করা (ঐচ্ছিক)
যদি আপনার FastAPI অ্যাপ্লিকেশন আরও ডিপেনডেন্সি থাকে (যেমন MongoDB, PostgreSQL ইত্যাদি), তাহলে Docker Compose ব্যবহার করতে পারেন। Docker Compose আপনাকে একাধিক কনটেইনার পরিচালনা করতে সাহায্য করে।
উদাহরণ: docker-compose.yml
version: '3.7'
services:
web:
build: .
ports:
- "8000:80"
environment:
- NAME=FastAPI with Docker
db:
image: mongo
ports:
- "27017:27017"
এই কনফিগারেশনটি FastAPI অ্যাপ এবং MongoDB এর জন্য দুটি আলাদা সার্ভিস তৈরি করবে।
Docker Compose কমান্ড:
Build and Start:
docker-compose up --buildStop Services:
docker-compose down
Docker ব্যবহার করে FastAPI অ্যাপ্লিকেশন ডিপ্লয়মেন্ট অত্যন্ত সহজ এবং কার্যকরী। Docker কনটেইনারের মাধ্যমে আপনি অ্যাপ্লিকেশন এবং তার ডিপেনডেন্সি প্যাকেজ করতে পারেন এবং যে কোনো পরিবেশে তাত্ক্ষণিকভাবে রান করাতে পারেন। এটি আপনার অ্যাপ্লিকেশনকে স্কেলযোগ্য এবং পরিবেশনিরপেক্ষ (environment-agnostic) করে তোলে।
Read more