نحوه استفاده از داکر کامپوز

https://negarnovin.com/docs/how-to-use-docker-compose/ · آخرین به‌روزرسانی: · نویسنده: نگارنوین · سایت: نگارنوین · 9 دقیقه مطالعه

📌 خلاصه (TL;DR)

استفاده از داکر کامپوز How To Use Docker Compose یاد بگیرید چگونه برنامه‌های چند کانتینری را با Docker Compose با استفاده از compose.yam

📊 حقایق کلیدی

URLhttps://negarnovin.com/docs/how-to-use-docker-compose/
تاریخ انتشار2025-09-13
آخرین به‌روزرسانی2025-09-13
نویسندهنگارنوین
ناشرنگارنوین
زبانفارسی (fa-IR)
تعداد کلمات1638
نوع صفحهبرگه

📄 محتوای کامل

نحوه استفاده از داکر کامپوز یاد بگیرید که چگونه برنامه‌های چند کانتینری را با Docker Compose با استفاده از compose.yaml، پروفایل‌های سرویس و دستورات ضروری CLI مدیریت کنید.

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

این مقاله نحوه استفاده از Docker Compose برای ایجاد و مدیریت کانتینرها را توضیح می‌دهد. اصول اولیه دستور docker composeو نحوه ایجاد compose.yamlمانیفست را پوشش می‌دهد. همچنین پروفایل Docker Compose را برای اجرای کانتینرها بسته به محیط شما بررسی می‌کند.

توضیحات کوتاه

در زیر چند دستور اساسی Docker Compose که روی یک فایل compose.yamlor عمل می‌کنند، آورده شده است.docker-compose.yaml

# Create/build and start all services in the background.
$ docker compose up -d

# Stop and remove all service containers, networks, and volumes.
$ docker compose down

# Stop all services.
$ docker compose stop

# Start and run stopped services.
$ docker compose start

# View the status of running services.
$ docker compose ps

# Check the logs of all services.
$ docker compose logs

یک فایل Docker Compose ایجاد کنید

این بخش به ایجاد یک فایل نمونه Docker Compose compose.yamlبرای یک برنامه نمونه flask می‌پردازد.

  1. نمونه برنامه را دانلود کنید. consoleکپی
    $ git clone https://github.com/ndlrfz/flask-redis-postgresql
  2. به flask-redis-postgresqlدایرکتوری پروژه بروید. consoleکپی
    $ cd flask-redis-postgresql
  3. این دایرکتوری حاوی فایلی compose.yamlبا محتوای زیر است. consoleکپی
    $ cat compose.yml

    مانیفست Docker Compose زیر را مشاهده خواهید کرد:

    yamlکپی
    name: myproject
    
    services:
      redis:
        image: "redis:alpine"
        restart: always
        ports:
          - 6379:6379
        volumes:
          - redis:/data
    
      postgresql:
        image: "postgres:16-alpine"
        ports:
          - "5432:5432"
        volumes:
          - pgdata:/var/lib/postgresql/data
        environment:
          POSTGRES_USER: ${DATABASE_USER}
          POSTGRES_PASSWORD: ${DATABASE_PASSWORD}
          POSTGRES_DB: ${DATABASE_NAME}
    
      flask:
        build: .
        restart: always
        env_file:
          - ".env"
        depends_on:
          - redis
          - postgresql
        ports:
          - "8000:5000"
        volumes:
          - ./:/code
    
    volumes:
      redis:
        driver: "local"
      pgdata:
        driver: "local"

    در این فایل،

    • name: نام پروژه را روی تنظیم می‌کند myproject.
    • services: کانتینرهای منفردی را که برنامه شما را تشکیل می‌دهند، تعریف می‌کند.
    • redisسرویس را با این جزئیات تعریف کنید :
      • image: سرویس را از روی redis:alpineتصویر ایجاد می‌کند.
      • restart: always: سیاستی را تنظیم می‌کند که در صورت توقف، این کانتینر همیشه مجدداً راه‌اندازی شود.
      • portsپورت 6379روی میزبان را به پورت 6379داخل کانتینر نگاشت می‌کند.
      • volumes: برای داده‌های ماندگار، والیوم نامگذاری شده را redisبه /dataدایرکتوری داخل کانتینر متصل می‌کند.
    • postgresqlسرویس را با موارد زیر تعریف کنید :
      • image: سرویس را از روی postgres:16-alpineتصویر ایجاد می‌کند.
      • portsپورت 5432روی میزبان را به پورت 5432داخل کانتینر نگاشت می‌کند.
      • volumes: برای داده‌های ماندگار، والیوم نامگذاری شده را pgdataدر دایرکتوری نصب می‌کند./var/lib/postgresql/data
      • environmentمتغیرهای محیطی داخل کانتینر را تنظیم می‌کند. مقادیر مربوط به ${DATABASE_USER}، ${DATABASE_PASSWORD}، و ${DATABASE_NAME}از محیط پوسته شما جایگزین می‌شوند (که اغلب از یک .envفایل بارگذاری می‌شود).
    • سرویس برنامه را flaskبا موارد زیر تعریف کنید:
      • build: .: یک تصویر داکر در دایرکتوری فعلی از فایل Dockerfile. می‌سازد.
      • restart: always: سیاستی را تنظیم می‌کند که در صورت توقف، این کانتینر همیشه مجدداً راه‌اندازی شود.
      • env_fileمتغیرهای محیطی سرویس را مستقیماً از یک .envفایل بارگذاری می‌کند.
      • depends_on: ترتیب راه‌اندازی را کنترل می‌کند. flaskسرویس فقط پس از شروع سرویس‌های redisو شروع می‌شود.postgresql
      • portsپورت 8000روی میزبان را به پورت 5000داخل کانتینر نگاشت می‌کند.
      • volumes: دایرکتوری پروژه فعلی روی میزبان را به /codeدایرکتوری داخل کانتینر متصل می‌کند.
    • volumes: دو volume نامگذاری شده تعریف می‌کند، redisو pgdata، با استفاده از localدرایور. اینها توسط Docker مدیریت شده و در دستگاه میزبان ذخیره می‌شوند.
  4. یک فایل ایجاد کنید .env. consoleکپی
    $ nano .env

    متغیرهای محیطی زیر را برای اعتبارنامه‌های PostgreSQL اضافه کنید. می‌توانید جزئیات زیر را با اعتبارنامه‌های خود جایگزین کنید.

    iniکپی
    DATABASE_USER=app_user
    DATABASE_PASSWORD=app_password
    DATABASE_NAME=appdb
    DATABASE_HOST=postgresql
    DATABASE_PORT=5432

    فایل را ذخیره کرده و از آن خارج شوید.

  5. خدمات خود را بسازید و شروع کنید. consoleکپی
    $ docker compose up -d

    این گزینه -dبه شما امکان می‌دهد کانتینرها را در پس‌زمینه اجرا کنید.

  6. دستور زیر را اجرا کنید تا کانتینرها یا سرویس‌های در حال اجرا را بررسی کنید. consoleکپی
    $ docker compose ps

    خروجی:

    NAME                     IMAGE                COMMAND                  SERVICE      CREATED              STATUS              PORTS
    myproject_flask-1        myproject_flask      "flask run --debug"      flask        About a minute ago   Up About a minute   0.0.0.0:8000->5000/tcp, [::]:8000->5000/tcp
    myproject_postgresql-1   postgres:16-alpine   "docker-entrypoint.s…"   postgresql   About a minute ago   Up About a minute   0.0.0.0:5432->5432/tcp, [::]:5432->5432/tcp
    myproject_redis-1        redis:alpine         "docker-entrypoint.s…"   redis        About a minute ago   Up 32 seconds       0.0.0.0:6379->6379/tcp, [::]:6379->6379/tcp

    توضیح خروجی:

    • flaskسرویس روی پورت 8000روی دستگاه میزبان اجرا می‌شود که بر اساس تصویر داکر است myproject_flask.
    • postgresql5432سرویسی که بر اساس تصویر داکر روی پورت اجرا می‌شود postgres:16-alpine.
    • redis6379سرویس بر اساس تصویر داکر روی پورت اجرا می‌شود redis:alpine.
  7. لیست تصاویری که توسط سرویس‌های شما استفاده می‌شوند را بررسی کنید. کنسولکپی
    $ docker compose images

    خروجی:

    CONTAINER                REPOSITORY          TAG                 IMAGE ID            SIZE
    myproject_flask-1        myproject_flask     latest              1c3d151b6276        254MB
    myproject_postgresql-1   postgres            16-alpine           b56133b65cd3        275MB
    myproject_redis-1        redis               alpine              d470ca4bc10c        60.5MB
  8. یک مرورگر وب باز کنید و http://<SERVER-IP>:8000/برای تأیید اجرای برنامه خود، به این آدرس مراجعه کنید.

مدیریت Docker Compose

جدول زیر docker composeدستورات رایج برای مدیریت پشته برنامه شما را شرح می‌دهد.

فرمان توضیحات مثال
build ساخت یا بازسازی کانتینرها docker compose build
up ایجاد و شروع کانتینرها docker compose up -d
down ظروف را متوقف کرده و بردارید docker compose down
start شروع کانتینرهای موجود docker compose start app
stop ظروف را متوقف کنید docker compose stop app
kill ظروف توقف اجباری docker compose kill app
ps بررسی کانتینرهای در حال اجرا docker compose ps
logs لاگ‌ها را برای کانتینرها بررسی کنید docker compose logs app
exec اجرای دستور در کانتینر docker compose exec app bash
images فهرست کردن تصاویر استفاده شده توسط کانتینرها docker compose images
rm ظروف متوقف شده را بردارید docker compose rm

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

پروفایل‌ها به برنامه‌ها یا سرویس‌های انتخابی اجازه می‌دهند تا بر اساس محیط یا موارد استفاده، مانند توسعه و تولید، اجرا شوند.

  1. فایل را ویرایش کنید compose.yml. consoleکپی
    $ nano compose.yml
  2. پیکربندی زیر را در زیر flaskسرویس اضافه کنید. yamlکپی
    adminer:
        image: adminer
        restart: always
        depends_on: [postgresql]
        profiles: [dev]
        ports:
          - 8080:8080
      redis-insight:
          image: redis/redisinsight:latest
          restart: always
          profiles: [dev]
          depends_on: [redis]
          ports:
            - "8001:8001"

    فایل را ذخیره کنید و ببندید.

    در این پیکربندی:

    • adminer: سرویسی با نام را تعریف می‌کند adminerکه از adminerتصویر داکر استفاده می‌کند.
      • restart: always: سیاستی را تنظیم می‌کند که در صورت توقف، کانتینر همیشه مجدداً راه‌اندازی شود.
      • depends_on: تضمین می‌کند که adminerسرویس فقط پس از postgresqlشروع سرویس، شروع به کار کند.
      • profiles: devنمایه را به سرویس اختصاص می‌دهد.
      • portsپورت 8080روی میزبان را به پورت 8080داخل کانتینر نگاشت می‌کند.
    • redis-insight: سرویسی با نام را تعریف می‌کند redis-insightکه از redis/redisinsight:latestتصویر داکر استفاده می‌کند.
      • restart: always: سیاستی را تنظیم می‌کند که در صورت توقف، کانتینر همیشه مجدداً راه‌اندازی شود.
      • depends_on: تضمین می‌کند که redis-insightسرویس فقط پس از redisشروع سرویس، شروع به کار کند.
      • profiles: devنمایه را به سرویس اختصاص می‌دهد.
      • portsپورت 8001روی میزبان را به پورت 8001داخل کانتینر نگاشت می‌کند.
  3. سرویس را شروع کنید adminer. consoleکپی
    $ docker compose --profile dev up -d

    از این --profile devگزینه برای فعال‌سازی و شروع سرویس‌های اختصاص داده شده به devپروفایل استفاده کنید. این به Docker Compose می‌گوید که adminerسرویس را که به طور پیش‌فرض نادیده گرفته می‌شود، لحاظ کند.

  4. با دستور زیر کانتینر در حال اجرا را بررسی کنید. consoleکپی
    $ docker compose ps

    خواهید دید که adminerسرویس در حال اجرا است.

    NAME                        IMAGE                       COMMAND                  SERVICE         CREATED         STATUS         PORTS
    myproject-adminer-1         adminer                     "entrypoint.sh docke…"   adminer         2 seconds ago   Up 1 second    0.0.0.0:8080->8080/tcp, [::]:8080->8080/tcp
    myproject-flask-1           myproject-flask             "flask run --debug"      flask           2 seconds ago   Up 1 second    0.0.0.0:8000->5000/tcp, [::]:8000->5000/tcp
    myproject-postgresql-1      postgres:16-alpine          "docker-entrypoint.s…"   postgresql      3 seconds ago   Up 2 seconds   0.0.0.0:5432->5432/tcp, [::]:5432->5432/tcp
    myproject-redis-1           redis:alpine                "docker-entrypoint.s…"   redis           3 seconds ago   Up 2 seconds   0.0.0.0:6379->6379/tcp, [::]:6379->6379/tcp
    myproject-redis-insight-1   redis/redisinsight:latest   "./docker-entry.sh n…"   redis-insight   3 seconds ago   Up 1 second    5540/tcp, 0.0.0.0:8001->8001/tcp, [::]:8001->8001/tcp
  5. برای متوقف کردن یک سرویس، به عنوان مثال adminer، از کنسولکپی
    $ docker compose stop adminer
  6. سرویس متوقف شده را حذف کنید adminer. consoleکپی
    $ docker compose rm adminer
  7. تمام سرویس‌ها (از جمله devپروفایل) را از بین ببرید. consoleکپی
    $ docker compose --profile dev down

نتیجه‌ گیری

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

🖼️ تصاویر

🏷️ کلمات کلیدی

نحوه استفاده از داکر کامپوز، توضیحات کوتاه، یک فایل Docker Compose ایجاد کنید، مدیریت Docker Compose، خرید نحوه استفاده از داکر کامپوز، قیمت نحوه استفاده از داکر کامپوز، بهترین نحوه استفاده از داکر کامپوز

🧩 JSON-LD

{"@context":"https://schema.org","@type":"WebPage","headline":"نحوه استفاده از داکر کامپوز","url":"https://negarnovin.com/docs/how-to-use-docker-compose/","datePublished":"2025-09-13T08:37:50+03:30","dateModified":"2025-09-13T08:37:50+03:30","author":{"@type":"Person","name":"نگارنوین"},"publisher":{"@type":"Organization","name":"نگارنوین"},"inLanguage":"fa-IR","description":"استفاده از داکر کامپوز How To Use Docker Compose یاد بگیرید چگونه برنامه‌های چند کانتینری را با Docker Compose با استفاده از compose.yam"}