چگونه: یک برنامه جنگو و پستگرس را با داکر کانتینر کنید

Summarize this content to 400 words in Persian Lang
این مقاله در ابتدا در وبلاگ کشتی سازی منتشر شده است.
همانطور که در حال ساختن برنامه جنگو و PostgreSQL خود هستید، احتمالاً به چند جعبه فکر می کنید که می خواهید آن را بررسی کنید:
قابل حمل: آیا می توانم این را بین ماشین ها یا اعضای تیم توزیع کنم؟
مقیاس پذیر: آیا این برنامه می تواند افزایش تعداد کاربران، درخواست ها یا حجم کاری کلی را مدیریت کند؟
بومی ابر: آیا می توانم این برنامه را در محیط های ابری توسعه، زودگذر، مرحله بندی و/یا تولید میزبانی کنم؟
استفاده از Docker و Docker Compose می تواند به آماده سازی برنامه شما برای هر مرحله از چرخه عمر توسعه، از محلی گرفته تا تولید، کمک کند. در این پست، ما برخی از اصول اولیه سفارشی کردن فایل Dockerfile و Compose را برای یک برنامه جنگو با پایگاه داده Postgres پوشش خواهیم داد.
TLDR: کشتی سازی یک برنامه استارتر Django / Postgres دارد که برای ساخت و اجرا با Docker و Docker Compose تنظیم شده است. اینجا چنگالش کن می توانید از آن به عنوان یک الگوی پروژه یا به عنوان مرجع برنامه موجود خود استفاده کنید.
جانگو چیست؟
جنگو یک چارچوب وب منبع باز مبتنی بر پایتون است. این در درجه اول به عنوان پشتیبان برای برنامه های وب استفاده می شود. جنگو از فلسفه “باتری شامل” پیروی می کند – با پشتیبانی از مسیریابی، چارچوب ورود به سیستم، وب سرور، ابزارهای پایگاه داده و بسیاری موارد دیگر کامل می شود. جنگو اغلب با فلاسک مقایسه می شود و تقریباً در همه جبهه ها امتیاز بهتری کسب می کند.
شما هر روز از برنامه های جنگو استفاده می کنید. Spotify، Doordash، Instagram، Eventbrite و Pinterest همگی جنگو را در پشتههای خود دارند – که نشان میدهد چقدر میتواند توسعهپذیر و مقیاسپذیر باشد.
مزایای Dockerizing یک برنامه جنگو
اجرای یک برنامه جنگو با ظروف Docker چندین مورد استفاده جدید را باز می کند. بلافاصله، این یک بهبود برای گردشهای کاری توسعه محلی شما است – راهاندازی را تمیزتر و سادهتر میکند.
اگر میخواهید پروژه خود را به صورت ابری میزبانی کنید، معمولاً به آن نیاز دارید که کانتینری باشد. نکته مهم در مورد کانتینرهای Docker این است که می توان از آنها در تمام مراحل توسعه، از محلی گرفته تا تولید، استفاده کرد. همچنین می توانید تصویر Docker خود را توزیع کنید تا دیگران بتوانند آن را فوراً بدون هیچ گونه نصب یا ساختمانی اجرا کنند.
حداقل، اگر یک Dockerfile را با پروژه خود اضافه کنید، می توانید مطمئن شوید که یکسان ساخته و اجرا می شود. هر بار، روی هر سیستمی
انتخاب یک مدیر بسته پایتون
برنامه پایتون ما به یک مدیر بسته برای ردیابی، نسخهسازی و نصب وابستگیهای آن نیاز دارد. این به ما کمک میکند تا بهجای اجرای جداگانه، ابتدا/بهروزرسانیهای وابستگی را مدیریت کنیم و نسخههای بسته را در سراسر ماشینها حفظ کنیم.
هر دو Pip و Poetry از مدیران وابستگی محبوب پایتون هستند، اگرچه تعداد کمی دیگر در اطراف گردش می کنند (مانند uv، Conda، Rye).
پیپ فوق العاده سرراست است. کاربران می توانند بسته های خود را در یک لیست کنند requirements.txt با نسخه های مربوطه خود فایل کنید و اجرا کنید pip install برای راه اندازی آنها کاربران می توانند وابستگی های موجود و نسخه های آن ها را با اجرا ضبط کنند pip freeze > requirements.txt در ریشه یک پروژه
Poetry یک مدیر بسته بسیار توانمند برای برنامهها در هر مقیاسی است، اما پیکربندی آن کمی سادهتر از Pip است (از یک فایل TOML با جداول، ابردادهها و اسکریپتها استفاده میکند). شعر از فایل قفل نیز استفاده می کند (poetry.lock) برای “قفل کردن” وابستگی ها در نسخه های فعلی آنها (و آنها وابستگی ها بر اساس نسخه). به این ترتیب، اگر پروژه شما در یک زمان خاص در یک ماشین خاص کار کند، این حالت حفظ می شود. در حال دویدن poetry init کاربران را با یک سری گزینه برای ایجاد a pyproject.toml فایل
نوشتن یک Dockerfile برای یک برنامه جنگو
برای Dockerize کردن برنامه جنگو، از ساختار Dockerfile کلاسیک پیروی میکنید (تصویر پایه را تنظیم کنید، دایرکتوری کاری را تنظیم کنید، و غیره) و سپس آن را با دستورالعملهای نصب خاص پروژه، که احتمالاً در README یافت میشود، تغییر دهید.
انتخاب یک تصویر پایه
ما میتوانیم یک تصویر پایتون سبک وزن را انتخاب کنیم تا به عنوان پایه ما برای این Dockerfile عمل کند. برای مرور نسخه ها بر اساس برچسب، صفحه پایتون را در داکر هاب بررسی کنید. من اینجا Alpine را انتخاب کردم زیرا تصویر ما را کوچک نگه میدارد:
FROM python:3.8.8-alpine3.13
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
تنظیم دایرکتوری کاری
در اینجا، دایرکتوری کاری را در ظرف Docker تعریف می کنیم. تمام مسیرهایی که بعد از آن ذکر شد نسبت به این خواهد بود.
WORKDIR /srv
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
نصب وابستگی های سیستم
قبل از اینکه بتوانیم Poetry را پیکربندی کنیم، باید چند کتابخانه اضافه کنیم:
RUN apk add –update –no-cache \
gcc \
libc-dev \
libffi-dev \
openssl-dev \
bash \
git \
libtool \
m4 \
g++ \
autoconf \
automake \
build-base \
postgresql-dev
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
نصب شعر
در مرحله بعد، مطمئن می شویم که از آخرین نسخه Pip استفاده می کنیم، و سپس از آن برای نصب Poetry در ظرف خود استفاده می کنیم:
RUN pip install –upgrade pip
RUN pip install poetry
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
نصب وابستگی های پروژه ما
وابستگی های این برنامه در ما تعریف شده است pyproject.toml و poetry.lock فایل ها بیایید آنها را به دایرکتوری کاری کانتینر بیاوریم و سپس از اعلانهایشان نصب کنیم:
ADD pyproject.toml poetry.lock ./
RUN poetry install
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
اضافه کردن و نصب خود پروژه
اکنون، ما بقیه پروژه را کپی می کنیم و خود پروژه جنگو را در ظرف نصب می کنیم:
ADD src ./src
RUN poetry install
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
اجرای دستور start
در نهایت، دستور شروع پروژه خود را اجرا می کنیم. در این برنامه خاص، این دستوری است که از Poetry برای راه اندازی سرور توسعه جنگو استفاده می کند:
CMD [“poetry”, “run”, “python”, “src/manage.py”, “runserver”, “0:8080”]
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
داکرفایل کامل
وقتی قطعه های بالا را با هم ترکیب می کنیم، این Dockerfile را دریافت می کنیم:
FROM python:3.8.8-alpine3.13
WORKDIR /srv
RUN apk add –update –no-cache \
gcc \
libc-dev \
libffi-dev \
openssl-dev \
bash \
git \
libtool \
m4 \
g++ \
autoconf \
automake \
build-base \
postgresql-dev
RUN pip install –upgrade pip
RUN pip install poetry
ADD pyproject.toml poetry.lock ./
RUN poetry install
ADD src ./src
RUN poetry install
CMD [“poetry”, “run”, “python”, “src/manage.py”, “runserver”, “0:8080”]
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
نوشتن تعریف سرویس Docker Compose برای جنگو
ما قصد داریم این برنامه را به دو سرویس تقسیم کنیم: django و postgres. ما django سرویس از Dockerfile ما ساخته خواهد شد که شامل تمام فایل های محلی برنامه ما است.
تنظیم زمینه ساخت
برای این برنامه، میخواهیم آن را بسازیم django خدمات از Dockerfile واحد ما و از کل دایرکتوری ریشه به عنوان مسیر زمینه ساخت خود استفاده کنید. ما می توانیم خود را تنظیم کنیم build بر این اساس برچسب بزنید:
django:
build: .
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
تنظیم پورت هاست و کانتینر
ما می توانیم بندر را نقشه برداری کنیم 8080 در دستگاه میزبان ما به 8080 داخل ظرف این همچنین پورتی است که ما برای دسترسی به برنامه جنگو خود استفاده می کنیم – که به زودی در آن فعال می شود http://localhost:8080.
ports:
– ‘8080:8080’
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
افزودن یک وابستگی به خدمات
از آنجایی که برنامه جنگو ما به یک پایگاه داده متصل می شود، می خواهیم به Compose دستور دهیم تا ظرف پایگاه داده ما را بچرخاند (postgres) ابتدا ما استفاده خواهیم کرد depends_on برچسب بزنید تا مطمئن شوید که سرویس قبل از ما آماده و در حال اجرا است django سرویس شروع می شود:
depends_on:
– postgres
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
ایجاد پایه اتصال
از آنجایی که فایلها را بین میزبان خود و این کانتینر به اشتراک میگذاریم، میتوانیم با استفاده از volumes برچسب زدن برای تنظیم صدا، یک مسیر محلی، به دنبال آن یک کولون و به دنبال آن یک مسیر در داخل ظرف ارائه می دهیم. را ro flag به کانتینر مجوزهای فقط خواندنی برای این فایل ها می دهد:
volumes:
– ‘./src:/srv/src:ro’
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
نتیجه نهایی
با ترکیب همه گزینه ها/پیکربندی ها از بالا، ما django سرویس باید به شکل زیر باشد:
django:
build: .
ports:
– ‘8080:8080’
depends_on:
– postgres
volumes:
– ‘./src:/srv/src:ro’
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
افزودن پایگاه داده PostgreSQL
برنامه جنگو ما برای اتصال به پایگاه داده PostgreSQL پیکربندی شده است. این در ما تعریف شده است settings.py:
DATABASES = {
‘default’: {
‘ENGINE’: ‘django.db.backends.postgresql’,
‘NAME’: ‘app’,
‘USER’: ‘obscure-user’,
‘PASSWORD’: ‘obscure-password’,
‘HOST’: ‘postgres’,
‘PORT’: 5432,
}
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
کشیدن تصویر Postgres
ما می توانیم پایگاه داده موجود خود را به ظرف Docker خود منتقل کنیم تا آن را از برنامه اصلی جنگو جدا کنیم. ابتدا اجازه دهید a را تعریف کنیم postgres در فایل Compose ما سرویس دهید و آخرین تصویر سبک وزن Postgres را از Docker Hub بکشید:
postgres:
image: ‘postgres:14.13-alpine3.20’
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
عبور در env vars
برای پیکربندی پایگاه داده PostgreSQL، میتوانیم چند متغیر محیطی را برای تنظیم اعتبار و مسیرها ارسال کنیم. ممکن است بخواهید از یک مدیر اسرار برای این کار استفاده کنید.
environment:
– POSTGRES_DB=app
– POSTGRES_USER=obscure-user
– POSTGRES_PASSWORD=obscure-password
– PGDATA=/var/lib/postgresql/data/pgdata
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
تنظیم پورت هاست و کانتینر
ما می توانیم پورت کانتینر خود را با قرار دادن آن روی پورت پیش فرض Postgres در معرض دید قرار دهیم: 5432. برای این سرویس، ما فقط یک پورت را مشخص می کنیم، به این معنی که پورت میزبان تصادفی خواهد بود. اگر چندین نمونه Postgres را اجرا می کنید، از برخورد جلوگیری می کند.
ports:
– ‘5432’
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
افزودن حجم داده با نام
در ما postgres تعریف، می توانیم یک حجم با نام اضافه کنیم. این با اتصال mount که ما برای آن ایجاد کردیم متفاوت است django خدمات پس از چرخش کانتینر Postgres، این داده های ما باقی می ماند.
volumes:
– ‘postgres:/var/lib/postgresql/data’
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
خارج از تعاریف سرویس و در پایین فایل Compose، نام را اعلام می کنیم postgres دوباره حجم با انجام این کار، در صورت نیاز می توانیم آن را از سایر خدمات خود ارجاع دهیم.
volumes:
postgres:
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
همه را کنار هم گذاشتن
و در اینجا تعریف PostgreSQL حاصل در فایل Compose ما آمده است:
postgres:
image: ‘postgres:14.13-alpine3.20’
environment:
– POSTGRES_DB=app
– POSTGRES_USER=obscure-user
– POSTGRES_PASSWORD=obscure-password
– PGDATA=/var/lib/postgresql/data/pgdata
ports:
– ‘5432’
volumes:
– ‘postgres:/var/lib/postgresql/data’
volumes:
postgres:
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
استقرار برنامه ما در یک محیط زودگذر کشتی سازی
ما میتوانیم با استقرار آن در یک برنامه کشتیسازی، تولید برنامه خود را آماده کنیم – این بدان معناست که یک محیط زودگذر برای شعبه پایه خود و همچنین محیطهایی برای هر روابط عمومی که باز میکنیم، دریافت میکنیم.
افزودن برچسبهای Docker Compose
فایلها را در مانیفست Kubernetes بنویسید، بنابراین چند برچسب اضافه میکنیم تا آن را با Kubernetes سازگار کنیم.
زیر ما django خدمات، ما می توانیم دو برچسب سفارشی کشتی سازی اضافه کنیم:
labels:
shipyard.init: ‘poetry run python src/manage.py migrate’
shipyard.route: ‘/’
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
این shipyard.init label یک انتقال پایگاه داده را قبل از ما اجرا می کند django خدمات شروع می شود
این shipyard.route label درخواست های HTTP را به پورت این سرویس ارسال می کند
ایجاد اپلیکیشن کشتی سازی
بعد، می توانید به داشبورد کشتی سازی خود بروید. اگر قبلاً ثبت نام نکرده اید، برای یک دوره آزمایشی رایگان 30 روزه ثبت نام کنید.
را کلیک کنید + برنامه را فشار دهید، سپس مخزن، خدمات خود را انتخاب کرده و env vars خود را وارد کنید.
بازدید از برنامه
پس از اتمام ساخت، می توانید روی سبز کلیک کنید بازدید کنید را فشار دهید تا به محیط کوتاه مدت زودگذر خود دسترسی پیدا کنید. بعدش چی میشه؟
و بس!
اکنون یک برنامه جنگو کاملاً کانتینری با یک پایگاه داده دارید! میتوانید آن را بهصورت محلی با Docker Compose اجرا کنید، آن را در یک محیط زودگذر پیشنمایش و آزمایش کنید و تا زمانی که آماده تولید شود، آن را تکرار کنید.
آیا می خواهید در مرحله بعد یک برنامه Yarn را Dockerize کنید؟ راهنمای ما را بررسی کنید!
این مقاله در ابتدا در وبلاگ کشتی سازی منتشر شده است.
همانطور که در حال ساختن برنامه جنگو و PostgreSQL خود هستید، احتمالاً به چند جعبه فکر می کنید که می خواهید آن را بررسی کنید:
- قابل حمل: آیا می توانم این را بین ماشین ها یا اعضای تیم توزیع کنم؟
- مقیاس پذیر: آیا این برنامه می تواند افزایش تعداد کاربران، درخواست ها یا حجم کاری کلی را مدیریت کند؟
- بومی ابر: آیا می توانم این برنامه را در محیط های ابری توسعه، زودگذر، مرحله بندی و/یا تولید میزبانی کنم؟
استفاده از Docker و Docker Compose می تواند به آماده سازی برنامه شما برای هر مرحله از چرخه عمر توسعه، از محلی گرفته تا تولید، کمک کند. در این پست، ما برخی از اصول اولیه سفارشی کردن فایل Dockerfile و Compose را برای یک برنامه جنگو با پایگاه داده Postgres پوشش خواهیم داد.
TLDR: کشتی سازی یک برنامه استارتر Django / Postgres دارد که برای ساخت و اجرا با Docker و Docker Compose تنظیم شده است. اینجا چنگالش کن می توانید از آن به عنوان یک الگوی پروژه یا به عنوان مرجع برنامه موجود خود استفاده کنید.
جانگو چیست؟
جنگو یک چارچوب وب منبع باز مبتنی بر پایتون است. این در درجه اول به عنوان پشتیبان برای برنامه های وب استفاده می شود. جنگو از فلسفه “باتری شامل” پیروی می کند – با پشتیبانی از مسیریابی، چارچوب ورود به سیستم، وب سرور، ابزارهای پایگاه داده و بسیاری موارد دیگر کامل می شود. جنگو اغلب با فلاسک مقایسه می شود و تقریباً در همه جبهه ها امتیاز بهتری کسب می کند.
شما هر روز از برنامه های جنگو استفاده می کنید. Spotify، Doordash، Instagram، Eventbrite و Pinterest همگی جنگو را در پشتههای خود دارند – که نشان میدهد چقدر میتواند توسعهپذیر و مقیاسپذیر باشد.
مزایای Dockerizing یک برنامه جنگو
اجرای یک برنامه جنگو با ظروف Docker چندین مورد استفاده جدید را باز می کند. بلافاصله، این یک بهبود برای گردشهای کاری توسعه محلی شما است – راهاندازی را تمیزتر و سادهتر میکند.
اگر میخواهید پروژه خود را به صورت ابری میزبانی کنید، معمولاً به آن نیاز دارید که کانتینری باشد. نکته مهم در مورد کانتینرهای Docker این است که می توان از آنها در تمام مراحل توسعه، از محلی گرفته تا تولید، استفاده کرد. همچنین می توانید تصویر Docker خود را توزیع کنید تا دیگران بتوانند آن را فوراً بدون هیچ گونه نصب یا ساختمانی اجرا کنند.
حداقل، اگر یک Dockerfile را با پروژه خود اضافه کنید، می توانید مطمئن شوید که یکسان ساخته و اجرا می شود. هر بار، روی هر سیستمی
انتخاب یک مدیر بسته پایتون
برنامه پایتون ما به یک مدیر بسته برای ردیابی، نسخهسازی و نصب وابستگیهای آن نیاز دارد. این به ما کمک میکند تا بهجای اجرای جداگانه، ابتدا/بهروزرسانیهای وابستگی را مدیریت کنیم و نسخههای بسته را در سراسر ماشینها حفظ کنیم.
هر دو Pip و Poetry از مدیران وابستگی محبوب پایتون هستند، اگرچه تعداد کمی دیگر در اطراف گردش می کنند (مانند uv، Conda، Rye).
پیپ فوق العاده سرراست است. کاربران می توانند بسته های خود را در یک لیست کنند requirements.txt
با نسخه های مربوطه خود فایل کنید و اجرا کنید pip install
برای راه اندازی آنها کاربران می توانند وابستگی های موجود و نسخه های آن ها را با اجرا ضبط کنند pip freeze > requirements.txt
در ریشه یک پروژه
Poetry یک مدیر بسته بسیار توانمند برای برنامهها در هر مقیاسی است، اما پیکربندی آن کمی سادهتر از Pip است (از یک فایل TOML با جداول، ابردادهها و اسکریپتها استفاده میکند). شعر از فایل قفل نیز استفاده می کند (poetry.lock
) برای “قفل کردن” وابستگی ها در نسخه های فعلی آنها (و آنها وابستگی ها بر اساس نسخه). به این ترتیب، اگر پروژه شما در یک زمان خاص در یک ماشین خاص کار کند، این حالت حفظ می شود. در حال دویدن poetry init
کاربران را با یک سری گزینه برای ایجاد a pyproject.toml
فایل
نوشتن یک Dockerfile برای یک برنامه جنگو
برای Dockerize کردن برنامه جنگو، از ساختار Dockerfile کلاسیک پیروی میکنید (تصویر پایه را تنظیم کنید، دایرکتوری کاری را تنظیم کنید، و غیره) و سپس آن را با دستورالعملهای نصب خاص پروژه، که احتمالاً در README یافت میشود، تغییر دهید.
انتخاب یک تصویر پایه
ما میتوانیم یک تصویر پایتون سبک وزن را انتخاب کنیم تا به عنوان پایه ما برای این Dockerfile عمل کند. برای مرور نسخه ها بر اساس برچسب، صفحه پایتون را در داکر هاب بررسی کنید. من اینجا Alpine را انتخاب کردم زیرا تصویر ما را کوچک نگه میدارد:
FROM python:3.8.8-alpine3.13
تنظیم دایرکتوری کاری
در اینجا، دایرکتوری کاری را در ظرف Docker تعریف می کنیم. تمام مسیرهایی که بعد از آن ذکر شد نسبت به این خواهد بود.
WORKDIR /srv
نصب وابستگی های سیستم
قبل از اینکه بتوانیم Poetry را پیکربندی کنیم، باید چند کتابخانه اضافه کنیم:
RUN apk add --update --no-cache \
gcc \
libc-dev \
libffi-dev \
openssl-dev \
bash \
git \
libtool \
m4 \
g++ \
autoconf \
automake \
build-base \
postgresql-dev
نصب شعر
در مرحله بعد، مطمئن می شویم که از آخرین نسخه Pip استفاده می کنیم، و سپس از آن برای نصب Poetry در ظرف خود استفاده می کنیم:
RUN pip install --upgrade pip
RUN pip install poetry
نصب وابستگی های پروژه ما
وابستگی های این برنامه در ما تعریف شده است pyproject.toml
و poetry.lock
فایل ها بیایید آنها را به دایرکتوری کاری کانتینر بیاوریم و سپس از اعلانهایشان نصب کنیم:
ADD pyproject.toml poetry.lock ./
RUN poetry install
اضافه کردن و نصب خود پروژه
اکنون، ما بقیه پروژه را کپی می کنیم و خود پروژه جنگو را در ظرف نصب می کنیم:
ADD src ./src
RUN poetry install
اجرای دستور start
در نهایت، دستور شروع پروژه خود را اجرا می کنیم. در این برنامه خاص، این دستوری است که از Poetry برای راه اندازی سرور توسعه جنگو استفاده می کند:
CMD ["poetry", "run", "python", "src/manage.py", "runserver", "0:8080"]
داکرفایل کامل
وقتی قطعه های بالا را با هم ترکیب می کنیم، این Dockerfile را دریافت می کنیم:
FROM python:3.8.8-alpine3.13
WORKDIR /srv
RUN apk add --update --no-cache \
gcc \
libc-dev \
libffi-dev \
openssl-dev \
bash \
git \
libtool \
m4 \
g++ \
autoconf \
automake \
build-base \
postgresql-dev
RUN pip install --upgrade pip
RUN pip install poetry
ADD pyproject.toml poetry.lock ./
RUN poetry install
ADD src ./src
RUN poetry install
CMD ["poetry", "run", "python", "src/manage.py", "runserver", "0:8080"]
نوشتن تعریف سرویس Docker Compose برای جنگو
ما قصد داریم این برنامه را به دو سرویس تقسیم کنیم: django
و postgres
. ما django
سرویس از Dockerfile ما ساخته خواهد شد که شامل تمام فایل های محلی برنامه ما است.
تنظیم زمینه ساخت
برای این برنامه، میخواهیم آن را بسازیم django
خدمات از Dockerfile واحد ما و از کل دایرکتوری ریشه به عنوان مسیر زمینه ساخت خود استفاده کنید. ما می توانیم خود را تنظیم کنیم build
بر این اساس برچسب بزنید:
django:
build: .
تنظیم پورت هاست و کانتینر
ما می توانیم بندر را نقشه برداری کنیم 8080
در دستگاه میزبان ما به 8080
داخل ظرف این همچنین پورتی است که ما برای دسترسی به برنامه جنگو خود استفاده می کنیم – که به زودی در آن فعال می شود http://localhost:8080
.
ports:
- '8080:8080'
افزودن یک وابستگی به خدمات
از آنجایی که برنامه جنگو ما به یک پایگاه داده متصل می شود، می خواهیم به Compose دستور دهیم تا ظرف پایگاه داده ما را بچرخاند (postgres
) ابتدا ما استفاده خواهیم کرد depends_on
برچسب بزنید تا مطمئن شوید که سرویس قبل از ما آماده و در حال اجرا است django
سرویس شروع می شود:
depends_on:
- postgres
ایجاد پایه اتصال
از آنجایی که فایلها را بین میزبان خود و این کانتینر به اشتراک میگذاریم، میتوانیم با استفاده از volumes
برچسب زدن برای تنظیم صدا، یک مسیر محلی، به دنبال آن یک کولون و به دنبال آن یک مسیر در داخل ظرف ارائه می دهیم. را ro
flag به کانتینر مجوزهای فقط خواندنی برای این فایل ها می دهد:
volumes:
- './src:/srv/src:ro'
نتیجه نهایی
با ترکیب همه گزینه ها/پیکربندی ها از بالا، ما django
سرویس باید به شکل زیر باشد:
django:
build: .
ports:
- '8080:8080'
depends_on:
- postgres
volumes:
- './src:/srv/src:ro'
افزودن پایگاه داده PostgreSQL
برنامه جنگو ما برای اتصال به پایگاه داده PostgreSQL پیکربندی شده است. این در ما تعریف شده است settings.py
:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'app',
'USER': 'obscure-user',
'PASSWORD': 'obscure-password',
'HOST': 'postgres',
'PORT': 5432,
}
}
کشیدن تصویر Postgres
ما می توانیم پایگاه داده موجود خود را به ظرف Docker خود منتقل کنیم تا آن را از برنامه اصلی جنگو جدا کنیم. ابتدا اجازه دهید a را تعریف کنیم postgres
در فایل Compose ما سرویس دهید و آخرین تصویر سبک وزن Postgres را از Docker Hub بکشید:
postgres:
image: 'postgres:14.13-alpine3.20'
عبور در env vars
برای پیکربندی پایگاه داده PostgreSQL، میتوانیم چند متغیر محیطی را برای تنظیم اعتبار و مسیرها ارسال کنیم. ممکن است بخواهید از یک مدیر اسرار برای این کار استفاده کنید.
environment:
- POSTGRES_DB=app
- POSTGRES_USER=obscure-user
- POSTGRES_PASSWORD=obscure-password
- PGDATA=/var/lib/postgresql/data/pgdata
تنظیم پورت هاست و کانتینر
ما می توانیم پورت کانتینر خود را با قرار دادن آن روی پورت پیش فرض Postgres در معرض دید قرار دهیم: 5432
. برای این سرویس، ما فقط یک پورت را مشخص می کنیم، به این معنی که پورت میزبان تصادفی خواهد بود. اگر چندین نمونه Postgres را اجرا می کنید، از برخورد جلوگیری می کند.
ports:
- '5432'
افزودن حجم داده با نام
در ما postgres
تعریف، می توانیم یک حجم با نام اضافه کنیم. این با اتصال mount که ما برای آن ایجاد کردیم متفاوت است django
خدمات پس از چرخش کانتینر Postgres، این داده های ما باقی می ماند.
volumes:
- 'postgres:/var/lib/postgresql/data'
خارج از تعاریف سرویس و در پایین فایل Compose، نام را اعلام می کنیم postgres
دوباره حجم با انجام این کار، در صورت نیاز می توانیم آن را از سایر خدمات خود ارجاع دهیم.
volumes:
postgres:
همه را کنار هم گذاشتن
و در اینجا تعریف PostgreSQL حاصل در فایل Compose ما آمده است:
postgres:
image: 'postgres:14.13-alpine3.20'
environment:
- POSTGRES_DB=app
- POSTGRES_USER=obscure-user
- POSTGRES_PASSWORD=obscure-password
- PGDATA=/var/lib/postgresql/data/pgdata
ports:
- '5432'
volumes:
- 'postgres:/var/lib/postgresql/data'
volumes:
postgres:
استقرار برنامه ما در یک محیط زودگذر کشتی سازی
ما میتوانیم با استقرار آن در یک برنامه کشتیسازی، تولید برنامه خود را آماده کنیم – این بدان معناست که یک محیط زودگذر برای شعبه پایه خود و همچنین محیطهایی برای هر روابط عمومی که باز میکنیم، دریافت میکنیم.
افزودن برچسبهای Docker Compose
فایلها را در مانیفست Kubernetes بنویسید، بنابراین چند برچسب اضافه میکنیم تا آن را با Kubernetes سازگار کنیم.
زیر ما django
خدمات، ما می توانیم دو برچسب سفارشی کشتی سازی اضافه کنیم:
labels:
shipyard.init: 'poetry run python src/manage.py migrate'
shipyard.route: '/'
- این
shipyard.init
label یک انتقال پایگاه داده را قبل از ما اجرا می کندdjango
خدمات شروع می شود - این
shipyard.route
label درخواست های HTTP را به پورت این سرویس ارسال می کند
ایجاد اپلیکیشن کشتی سازی
بعد، می توانید به داشبورد کشتی سازی خود بروید. اگر قبلاً ثبت نام نکرده اید، برای یک دوره آزمایشی رایگان 30 روزه ثبت نام کنید.
را کلیک کنید + برنامه را فشار دهید، سپس مخزن، خدمات خود را انتخاب کرده و env vars خود را وارد کنید.
بازدید از برنامه
پس از اتمام ساخت، می توانید روی سبز کلیک کنید بازدید کنید را فشار دهید تا به محیط کوتاه مدت زودگذر خود دسترسی پیدا کنید. بعدش چی میشه؟
و بس!
اکنون یک برنامه جنگو کاملاً کانتینری با یک پایگاه داده دارید! میتوانید آن را بهصورت محلی با Docker Compose اجرا کنید، آن را در یک محیط زودگذر پیشنمایش و آزمایش کنید و تا زمانی که آماده تولید شود، آن را تکرار کنید.
آیا می خواهید در مرحله بعد یک برنامه Yarn را Dockerize کنید؟ راهنمای ما را بررسی کنید!