استفاده از Docker Compose برای دیپلوی برنامه‌های پایتون

استفاده از Docker Compose برای دیپلوی برنامه‌های پایتون

در دنیای توسعه نرم‌افزار مدرن، دیپلوی و مدیریت برنامه‌ها به صورت کارآمد و قابل تکرار از اهمیت بالایی برخوردار است. Docker و Docker Compose ابزارهایی قدرتمند هستند که این فرآیند را به شدت تسهیل می‌کنند. این مقاله به بررسی عمیق Docker Compose و نحوه استفاده از آن برای دیپلوی برنامه‌های پایتون می‌پردازد. این آموزش در دسته ‘دیپلوی و DevOps با پایتون’ قرار می‌گیرد و برای توسعه‌دهندگانی که به دنبال اتوماسیون و ساده‌سازی فرآیند دیپلوی هستند، مناسب است.

مقدمه‌ای بر Docker و Docker Compose

Docker یک پلتفرم کانتینری‌سازی است که به شما امکان می‌دهد برنامه‌ها و وابستگی‌های آن‌ها را در یک واحد استاندارد به نام کانتینر بسته‌بندی کنید. این کانتینرها مستقل از محیط سیستم عامل میزبان هستند و می‌توانند به راحتی بین محیط‌های مختلف (توسعه، تست، تولید) منتقل شوند. Docker Compose ابزاری است که به شما امکان می‌دهد چندین کانتینر Docker را به عنوان یک برنامه واحد تعریف و مدیریت کنید.

چرا از Docker Compose استفاده کنیم؟

برنامه‌های پایتون اغلب به وابستگی‌های مختلفی نیاز دارند، مانند پایگاه داده، سرور وب، و کش. مدیریت این وابستگی‌ها به صورت دستی می‌تواند پیچیده و زمان‌بر باشد. Docker Compose این پیچیدگی را با ارائه یک فایل پیکربندی ساده (docker-compose.yml) حل می‌کند که تمام سرویس‌های مورد نیاز برنامه را تعریف می‌کند. مزایای استفاده از Docker Compose عبارتند از:

  • سادگی: تعریف و مدیریت برنامه‌های چندکانتینری با یک فایل YAML ساده.
  • قابلیت تکرار: اطمینان از اینکه برنامه در هر محیطی به طور یکسان اجرا می‌شود.
  • مقیاس‌پذیری: امکان افزایش یا کاهش تعداد کانتینرها به راحتی.
  • اتوماسیون: خودکارسازی فرآیند دیپلوی و مدیریت برنامه.
  • ایزولاسیون: جداسازی سرویس‌ها از یکدیگر برای جلوگیری از تداخل.

نصب Docker و Docker Compose

قبل از شروع، باید Docker و Docker Compose را بر روی سیستم خود نصب کنید. دستورالعمل‌های نصب بسته به سیستم عامل شما متفاوت است. می‌توانید دستورالعمل‌های مربوطه را در وب‌سایت رسمی Docker پیدا کنید.

ساخت یک برنامه پایتون ساده

برای شروع، یک برنامه پایتون ساده ایجاد می‌کنیم که یک سرور وب Flask را اجرا می‌کند. این برنامه یک نقطه پایانی (endpoint) دارد که پیام “Hello, Docker Compose!” را برمی‌گرداند.

فایل app.py:

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello, Docker Compose!"

if __name__ == "__main__":
    app.run(debug=True, host='0.0.0.0')

فایل requirements.txt:

Flask

ایجاد فایل docker-compose.yml

حالا فایل docker-compose.yml را ایجاد می‌کنیم تا سرویس Flask را تعریف کنیم. این فایل مشخص می‌کند که چگونه کانتینر Flask ساخته و اجرا شود.

version: "3.9"
services:
  web:
    build: .
    ports:
      - "5000:5000"
    volumes:
      - .:/app
    depends_on:
      - redis
  redis:
    image: redis:latest

توضیح فایل docker-compose.yml:

  • version: نسخه Docker Compose را مشخص می‌کند.
  • services: لیستی از سرویس‌های موجود در برنامه را تعریف می‌کند.
  • web: نام سرویس Flask است.
  • build: مسیر به دایرکتوری حاوی Dockerfile را مشخص می‌کند. در این مورد، دایرکتوری فعلی (.) است.
  • ports: پورت‌های کانتینر را به پورت‌های میزبان نگاشت می‌کند. در این مورد، پورت 5000 کانتینر به پورت 5000 میزبان نگاشت می‌شود.
  • volumes: دایرکتوری‌های میزبان را به دایرکتوری‌های کانتینر نگاشت می‌کند. این کار به شما امکان می‌دهد تغییرات کد را بدون نیاز به ساخت مجدد کانتینر مشاهده کنید.
  • depends_on: مشخص می‌کند که سرویس web به سرویس redis وابسته است. Docker Compose اطمینان حاصل می‌کند که سرویس redis قبل از سرویس web شروع شود.
  • redis: نام سرویس Redis است.
  • image: نام ایمیج Docker را مشخص می‌کند. در این مورد، ایمیج رسمی Redis از Docker Hub استفاده می‌شود.

ایجاد Dockerfile

برای ساخت ایمیج Docker برای سرویس Flask، یک فایل Dockerfile ایجاد می‌کنیم.

FROM python:3.9-slim-buster

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

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

توضیح فایل Dockerfile:

  • FROM: ایمیج پایه را مشخص می‌کند. در این مورد، ایمیج رسمی پایتون 3.9 بر اساس Debian Buster استفاده می‌شود.
  • WORKDIR: دایرکتوری کاری را در کانتینر تنظیم می‌کند.
  • COPY: فایل‌ها و دایرکتوری‌ها را از میزبان به کانتینر کپی می‌کند.
  • RUN: دستورات را در کانتینر اجرا می‌کند. در این مورد، وابستگی‌های پایتون را نصب می‌کند.
  • CMD: دستوری را که هنگام شروع کانتینر اجرا می‌شود، مشخص می‌کند. در این مورد، برنامه پایتون را اجرا می‌کند.

اجرای برنامه با Docker Compose

برای اجرای برنامه، به دایرکتوری حاوی فایل docker-compose.yml بروید و دستور زیر را اجرا کنید:

docker-compose up --build

این دستور کانتینرها را می‌سازد (اگر قبلاً ساخته نشده باشند) و سپس آن‌ها را اجرا می‌کند. پس از اجرای برنامه، می‌توانید به آدرس http://localhost:5000 در مرورگر خود بروید تا پیام “Hello, Docker Compose!” را مشاهده کنید.

مدیریت برنامه با Docker Compose

Docker Compose دستورات مختلفی را برای مدیریت برنامه ارائه می‌دهد. برخی از دستورات مهم عبارتند از:

  • docker-compose down: کانتینرها را متوقف و حذف می‌کند.
  • docker-compose ps: وضعیت کانتینرها را نمایش می‌دهد.
  • docker-compose logs: لاگ‌های کانتینرها را نمایش می‌دهد.
  • docker-compose exec: دستوری را در یک کانتینر اجرا می‌کند.
  • docker-compose scale: تعداد کانتینرها را افزایش یا کاهش می‌دهد.

افزودن پایگاه داده

برای افزودن یک پایگاه داده به برنامه، می‌توانید سرویس دیگری را به فایل docker-compose.yml اضافه کنید. به عنوان مثال، برای افزودن یک پایگاه داده PostgreSQL، می‌توانید از کد زیر استفاده کنید:

version: "3.9"
services:
  web:
    build: .
    ports:
      - "5000:5000"
    volumes:
      - .:/app
    depends_on:
      - redis
      - db
  redis:
    image: redis:latest
  db:
    image: postgres:13
    environment:
      POSTGRES_USER: your_user
      POSTGRES_PASSWORD: your_password
      POSTGRES_DB: your_db
    volumes:
      - db_data:/var/lib/postgresql/data

volumes:
  db_data:

این کد یک سرویس جدید به نام db را اضافه می‌کند که از ایمیج رسمی PostgreSQL استفاده می‌کند. متغیرهای محیطی POSTGRES_USER، POSTGRES_PASSWORD و POSTGRES_DB را برای پیکربندی پایگاه داده تنظیم می‌کند. همچنین یک حجم (volume) به نام db_data را برای ذخیره داده‌های پایگاه داده ایجاد می‌کند.

نتیجه‌گیری

Docker Compose ابزاری قدرتمند برای دیپلوی و مدیریت برنامه‌های پایتون چندکانتینری است. با استفاده از Docker Compose، می‌توانید فرآیند دیپلوی را ساده‌تر، قابل تکرارتر و مقیاس‌پذیرتر کنید. این مقاله یک معرفی جامع به Docker Compose و نحوه استفاده از آن برای دیپلوی برنامه‌های پایتون ارائه داد. با تمرین و آزمایش، می‌توانید از تمام قابلیت‌های Docker Compose برای بهبود فرآیند توسعه و دیپلوی خود استفاده کنید.

بدون دیدگاه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *