استفاده از 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 برای بهبود فرآیند توسعه و دیپلوی خود استفاده کنید.

بدون دیدگاه