یک نمونهی واقعیتر
حالا یک docker-compose.yml کاملتر میسازیم که یک برنامهی وب را به یک پایگاهدادهی پستگرس متصل میکند و از volume برای ماندگاری داده و متغیر محیطی برای پیکربندی استفاده میکند:
version: "3.9"
services:
web:
build: .
ports:
- "8000:8000"
environment:
- DATABASE_URL=postgres://appuser:apppass@db:5432/appdb
depends_on:
- db
db:
image: postgres:16
environment:
- POSTGRES_USER=appuser
- POSTGRES_PASSWORD=apppass
- POSTGRES_DB=appdb
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:
در سرویس web، بهجای image از کلید build: . استفاده شده که یعنی داکر بهجای دانلود یک image آماده، از Dockerfile موجود در همان پوشه، image بسازد. depends_on ترتیب راهاندازی را کنترل میکند تا سرویس db پیش از web شروع شود، هرچند نکتهی مهم این است که این تنها ترتیب راهاندازی کانتینر را تضمین میکند، نه آماده بودن کامل پایگاهداده برای پذیرش اتصال.
بلوک volumes سطح بالا
در انتهای فایل، بخش volumes در سطح بالا، volume نامگذاریشدهی pgdata را تعریف میکند که در سرویس db استفاده شده است. این ساختار به شما اجازه میدهد کل معماری چندسرویسی برنامه را با یک دستور docker compose up راهاندازی کنید.