Dev Perfects
40 subscribers
9.23K photos
1.26K videos
468 files
13K links
بخوام خیلی خلاصه بگم
این کانال میاد مطالب کانالای خفن تو حوزه تکنولوژی و برنامه نویسی رو جمع میکنه

پست پین رو بخونید
https://t.iss.one/dev_perfects/455


ارتباط:
https://t.iss.one/HidenChat_Bot?start=936082426
Download Telegram
یه چیز دردناکی که الان فهمیدم و هیچ کس بهم نگفته بود این بود که اصلا نیازی به socat نبود
میتونم مستقیم به داکر اجرا شده روی شبکه ی لوکال دسترسی داشته باشم روی پورت مورد نظر😐😂🤦🏻‍♂️
#ai #docker #هوش_مصنوعی #داکر

@PhiloLearn
اگر از داکر استفاده میکنید این افزونه رو حتما نصب داشته باشید

🌐 مشاهده ویدیو

لینک اینستاگراممون برای بچه‌هایی که ندارن 🔻

https://www.instagram.com/coolycode/profilecard

#️⃣ #NEWPost #docker #extension

𝗖𝗛𝗔𝗡𝗡𝗘𝗟  |  𝗚𝗥𝗢𝗨𝗣
Forwarded from Syntax | سینتکس (Daimon)
سوال مصاحبه ای درباره ذاکر با توضیح کامل

چرا وقتی یک کانتینر از یک ایمیجی رو بالا میاریم، نمیتونیم اون ایمیج رو پاک کنیم؟

زمانی که شما یک کانتینر را از یک ایمیج (Image) در Docker بالا می‌آورید، امکان حذف آن ایمیج تا زمانی که کانتینر مرتبط با آن در حال اجرا یا وجود داشته باشد امکان پذیر نیست. این رفتار به دلیل معماری Docker و نحوه مدیریت داده‌ها از طریق مکانیزم‌هایی مانند Copy-on-Write (COW) و UnionFS اتفاق می‌افتد.

در Docker، ایمیج‌ها به‌عنوان قالب‌های فقط خواندنی (Read-Only) عمل می‌کنند که شامل تمام فایل‌ها، نرم‌افزارها و تنظیمات مورد نیاز برای اجرای یک برنامه هستند. وقتی یک کانتینر از یک ایمیج بالا می‌آید:

- ایمیج به‌عنوان پایه (Base) عمل می‌کند.
- کانتینر یک لایه نوشتنی (Writable Layer) به بالای ایمیج اضافه می‌کند.

این لایه نوشتنی به کانتینر اجازه می‌دهد تغییراتی مانند ایجاد فایل‌ها یا تغییر تنظیمات را انجام دهد، بدون اینکه لایه‌های فقط خواندنی ایمیج اصلی تغییر کنند.

Copy-on-Write (COW)
داکر برای مدیریت تغییرات کانتینر از مکانیزم Copy-on-Write (COW) استفاده می‌کند. به این معنا که:

- تا زمانی که نیازی به تغییر داده‌ها نباشد، کانتینر از لایه‌های موجود در ایمیج به‌صورت مستقیم استفاده می‌کند.
- وقتی تغییری در یک فایل لازم باشد، آن فایل از لایه فقط خواندنی ایمیج به لایه نوشتنی کانتینر کپی می‌شود و سپس تغییرات اعمال می‌گردد.

این روش باعث صرفه‌جویی در منابع می‌شود، زیرا تا زمانی که نیازی به تغییر نباشد، ایمیج و کانتینر از همان نسخه داده‌ها استفاده می‌کنند.

UnionFS
سیستم فایل UnionFS (Union File System) برای ترکیب چندین لایه سیستم فایل در یک نمای واحد (Single View) استفاده می‌شود. Docker از UnionFS برای ساخت ایمیج‌ها و کانتینرها استفاده می‌کند. نحوه کار به این صورت است:

- ایمیج‌ها از چندین لایه تشکیل شده‌اند.
- این لایه‌ها فقط خواندنی هستند و هر لایه تغییرات و افزوده‌هایی نسبت به لایه قبلی دارد.
- وقتی یک کانتینر ایجاد می‌شود، یک لایه نوشتنی به بالای این لایه‌های فقط خواندنی اضافه می‌شود.

بنابراین، از دید کانتینر، تمام این لایه‌ها به‌صورت یک سیستم فایل یکپارچه دیده می‌شوند. اما در واقعیت، لایه نوشتنی و لایه‌های فقط خواندنی جدا از هم هستند.
https://en.wikipedia.org/wiki/UnionFS

چرا ایمیج حذف نمی‌شود؟
وقتی یک کانتینر از یک ایمیج ایجاد می‌شود، آن کانتینر به لایه‌های ایمیج وابسته است. به همین دلیل، تا زمانی که کانتینر وجود دارد (حتی اگر متوقف شده باشد):

- لایه‌های فقط خواندنی ایمیج در حال استفاده هستند.
- اگر ایمیج حذف شود، کانتینر نمی‌تواند به لایه‌های مورد نیاز خود دسترسی پیدا کند و در نتیجه خراب می‌شود.

Docker برای جلوگیری از این مشکل، اجازه حذف ایمیج‌هایی که در حال استفاده هستند را نمی‌دهد و در نهایت فقط میتوانید تگ آن را حذف کنید نه بادی ایمیج را.


ارتباط Copy-on-Write و UnionFS
- UnionFS امکان استفاده از چندین لایه سیستم فایل را فراهم می‌کند و باعث می‌شود ایمیج‌ها و کانتینرها به‌صورت مؤثری مدیریت شوند.
- Copy-on-Write تضمین می‌کند که تنها زمانی تغییرات در داده‌ها ایجاد شوند که واقعاً لازم باشد، بدون تغییر لایه‌های اصلی (فقط خواندنی) ایمیج.

این دو مکانیزم با هم کار می‌کنند تا Docker بتواند ایمیج‌ها و کانتینرها را به‌صورت کارآمد مدیریت کند.

چگونه ایمیج را حذف کنیم؟
اگر بخواهید یک ایمیج را حذف کنید، ابتدا باید تمام کانتینرهای وابسته به آن را حذف کنید. مراحل کلی عبارتند از:

1. لیست کانتینرهای وابسته به ایمیج:


   docker ps -a --filter ancestor=<image_name_or_id>

2. حذف کانتینرهای وابسته:


   docker rm <container_id>

3. حذف ایمیج:


   docker rmi <image_name_or_id>


#docker #copy_on_write #union_file_system

@Syntax_fa
👍1
Forwarded from Syntax | سینتکس (Daimon)
در وینوز خبیث چگونه داکر که یک linux container هستش اجرا میشه؟

قبل از 2016:

در ابتدا، Docker فقط برای Linux طراحی شده بود و روی Windows قابل اجرا نبود🫠. در آن زمان، توسعه‌دهندگان Windows برای استفاده از Docker مجبور بودند:
1. یا از یک ماشین مجازی Linux جداگانه استفاده کنند
2. یا از ابزارهایی مثل VirtualBox استفاده کنند
3. یا تصمیم عاقلانه میگرفتن لینوکسی میشدن

2016 - معرفی Docker for Windows:
در سال 2016، Docker یک راهکار رسمی برای Windows ارائه کرد که شامل دو بخش اصلی بود:

1. Docker Desktop for Windows:
- یک نرم‌افزار یکپارچه که شامل تمام اجزای مورد نیاز برای اجرای Docker بود
- از Hyper-V (مجازی‌ساز رسمی Microsoft) استفاده می‌کرد
- یک Moby VM (ماشین مجازی سبک Linux) را به صورت خودکار مدیریت می‌کرد

2. معماری دو لایه:
- لایه Windows: شامل Docker Client که رابط کاربری و CLI را در اختیار کاربر قرار می‌داد
- لایه Linux (Moby VM): شامل Docker Daemon که مسئول اصلی مدیریت کانتینرها بود

نحوه کار:
1. کاربر در Windows دستورات Docker را اجرا می‌کند
2. Docker Client
این دستورات را به Moby VM منتقل می‌کند
3. Docker Daemon
در Moby VM دستورات را پردازش کرده و کانتینرها را مدیریت می‌کند
4. تمام کانتینرهای Linux در این VM اجرا می‌شوند و از kernel آن استفاده می‌کنند

مزایای این معماری:
- کانتینرهای Linux دقیقاً مثل Linux اصلی کار می‌کنند
- مدیریت منابع بهتر و کارایی بالاتر نسبت به استفاده از VirtualBox
- یکپارچگی بهتر با Windows
- نصب و راه‌اندازی ساده‌تر

تغییرات بعدی:
بعد از 2016، Docker قابلیت‌های جدیدی اضافه کرد:
1. Windows Containers:
امکان اجرای کانتینرهای native ویندوزی
2. WSL2 Integration:
یکپارچگی با Windows Subsystem for Linux نسخه 2
3. Hyper-V Isolation:
لایه امنیتی اضافه برای جداسازی بهتر کانتینرها

در نمودار بالا هم دقیقاً همین معماری نشان داده شده:
- سمت چپ: محیط Windows که Docker Client در آن قرار دارد
- سمت راست: Moby VM که Docker Daemon و کانتینرهای Linux را میزبانی می‌کند
- ارتباط بین این دو از طریق یک پروتکل شبکه انجام می‌شود

توضیحات مایکروسافت خبیث

#docker

@Syntax_fa
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Forwarded from Syntax | سینتکس (Daimon)
چند نکته درباره Dockerfile

۱. بدون دسترسی روت:
- اجرای کانتینر با کاربر غیر روت برای امنیت بیشتر

۲. ساخت چند مرحله‌ای (Multistage Build):
- کاهش حجم نهایی ایمیج
- جداسازی محیط build از محیط اجرا
مثال:
FROM golang:1.23 AS build
WORKDIR /src
COPY main.go .
RUN go build -o /bin/hello ./main.go

FROM scratch
COPY --from=build /bin/hello /bin/hello

CMD ["/bin/hello"]


۳. استفاده از Distroless یا From Scratch:
- حذف ابزارهای غیرضروری برای کاهش سطح حمله
- استفاده از ایمیج‌های پایه حداقلی
مثال:
FROM gcr.io/distroless/nodejs
COPY --from=builder /app/dist .
CMD ["app.js"]


۴. استفاده از ایمیج‌های مطمئن:
- استفاده از ایمیج‌های رسمی از Docker Hub
- بررسی منبع و تاریخچه ایمیج‌ها

۵. به‌روزرسانی منظم ایمیج:
- به‌روزرسانی مرتب پایه ایمیج برای دریافت پچ‌های امنیتی
- استفاده از CI/CD برای ساخت خودکار ایمیج‌های جدید

۶. پورت‌های در معرض (Exposed Ports):
- فقط پورت‌های ضروری را expose کنید
- مستندسازی پورت‌های مورد نیاز
مثال:
EXPOSE 8080


۷. عدم قرار دادن کلیدها و رمزها در Dockerfile
- استفاده از secrets یا متغیرهای محیطی
مثال:
# bad idea
ENV DB_PASSWORD=secretpass

# recommended
ARG DB_PASSWORD


۸. مدیریت لایه‌ها (Layer Sanity):
- ترکیب دستورات مرتبط برای کاهش تعداد لایه‌ها
- حذف فایل‌های موقت در همان لایه
مثال:
RUN apt-get update && \
apt-get install -y package1 package2 && \
rm -rf /var/lib/apt/lists/*


۹. برچسب‌های متادیتا:
- افزودن اطلاعات مفید درباره ایمیج
مثال:
LABEL maintainer="[email protected]"
LABEL version="1.0"
LABEL description="Application description"


نکات تکمیلی:
- همیشه از .dockerignore برای ایگنور شدن فایل‌های غیرضروری استفاده کنید
- دستورات را به ترتیب بهینه قرار دهید (از کمترین تغییر به بیشترین)
- از کش Docker به درستی استفاده کنید

#docker

@Syntax_fa
👍1
Forwarded from Syntax | سینتکس (Daimon)
سوال درباره داکر و داکر کمپوز

سوال:

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

چگونه می‌توانیم چنین محدودیتی اعمال کنیم و اطمینان حاصل کنیم که سرویس‌ها کاملاً ایزوله هستند و فقط در شبکه داخلی داکر قابل دسترسی‌اند؟
(جواب و راه حلی پیشنهادی پست بعدی گذاشته میشه)

#docker #docker_compose

@Syntax_fa
👍1
Forwarded from Syntax | سینتکس (Daimon)
داکیومنت داکر اینو میگه:
internal
By default, Compose provides external connectivity to networks. internal, when set to true, lets you create an externally isolated network.


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

1. ایجاد شبکه داخلی در فایل `docker-compose.yml`:

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

مثال:

   version: '3.9'
services:
service1:
image: my-image-1
networks:
- internal_network
service2:
image: my-image-2
networks:
- internal_network

networks:
internal_network:
internal: true


توضیحات:
- در بخش networks`، یک شبکه به نام `internal_network تعریف شده و ویژگی internal: true به آن اضافه شده است.
- این شبکه فقط برای ارتباط داخلی بین سرویس‌های تعریف‌شده در Docker Compose در دسترس است.
- هیچ پورت خارجی (حتی اگر در بخش ports تعریف شده باشد) از خارج شبکه داکر قابل دسترسی نخواهد بود.

#docker #docker_compose

@Syntax_fa
👍1
Forwarded from Syntax | سینتکس (Daimon)
فایل داکر کمپوز «ساختار پروژه سینتکس» رو آپدیت کردیم:
https://github.com/syntaxfa/django-structure/blob/main/compose.yml

میشه بعضی قسمت هارو خیلی کوتاه ترش کرد مثل تعریف والیوم ها ولی از وربوس بودن بیشتر خوشم میاد و با چند خط بیشتر کد زدن مشکلی ندارم.
همچنین بعضی ویژگی هایی که تعریف شده جنبه آموزشی داره مثل lables هایی که برای سرویس ها تعریف شده.
میشه داخل Dockerfile هم اینکار رو انجام داد.

#docker

@Syntax_fa
👍1
Forwarded from Syntax | سینتکس (Daimon)
ران کردن پرایوت داکر رجیستری بصورت سلف هاست خیلی ساده و راحت:
https://github.com/syntaxfa/docker-registry

#docker

@Syntax_fa
Forwarded from Syntax | سینتکس (Daimon)
چند تا کامند داکر برای پاکسازی و آزاد کردن فضا

پاک کردن فضای بلا استفاده داکر هر چند وقت یبار نیازه وگرنه اگه مثل من از داکر زیاد استفاده کنید ممکنه کلی فضا بگیره.

1. حذف همه چیزهای استفاده نشده (Containers, Images, Networks, Volumes)
این دستور جامع‌ترین راه برای آزاد کردن فضاست و تمام آبجکت‌های داکر که در حال استفاده نیستن (کانتینرهای متوقف شده، ایمیج‌های بدون استفاده، شبکه‌های بدون اتصال و والیوم های بدون کاربرد) رو حذف می‌کنه:
docker system prune

اگه می‌خواید والیوم های بدون استفاده هم حذف بشن، از فلگ —volumes استفاده کنید:
docker system prune --volumes


2. حذف کانتینرهای متوقف شده
این دستور فقط کانتینرهایی رو حذف می‌کنه که در حال اجرا نیستن:
docker container prune


3. حذف ایمیج‌های بدون استفاده (Dangling Images)
ا. Dangling Images ایمیج‌هایی هستن که تگ ندارن و توسط هیچ کانتینری استفاده نمی‌شن:
docker image prune


برای حذف تمام ایمیج‌های استفاده نشده (حتی اونایی که توسط کانتینری استفاده نمی‌شن ولی تگ دارن)، از سوییچ —all یا -a استفاده کنید:
Bash
docker image prune -a


4. حذف ولوم‌های بدون استفاده
این دستور ولوم‌هایی رو حذف می‌کنه که به هیچ کانتینری متصل نیستن:
docker volume prune


5. حذف شبکه‌های بدون استفاده
این دستور شبکه‌هایی رو حذف می‌کنه که هیچ کانتینری بهشون متصل نیست:
docker network prune

حذف کش بیلد(این یکی ممکنه فضای زیادی گرفته باشه):
docker builder prune


نمایش فضای اشغال شده: 
برای مشاهده فضای کلی اشغال شده توسط داکر و جزئیات مربوط به ایمیج‌ها، کانتینرها و والیوم ها، می‌تونید از دستور زیر استفاده کنید:
docker system df

#docker

@Syntax_fa
Forwarded from Gopher Academy
🔵 عنوان مقاله
Why I Ditched Docker for Podman (And You Should Too)

🟢 خلاصه مقاله:
مهاجرت از Docker به Podman برای من بیشتر یک انتخاب عملی بود تا بحث سلیقه؛ به‌ویژه در جریان‌های کاری مرتبط با Go که در Golang Weekly هم زیاد دیده می‌شود. دلیل اصلی، معماری ساده‌تر و امن‌تر Podman است: بدون daemon و با اجرای rootless به‌صورت پیش‌فرض، پس سطح حمله و دردسرهای دسترسی کاهش می‌یابد و سرویس پرامتیازِ دائمی لازم نیست. مهاجرت هم کم‌اصطکاک است؛ چون Podman با CLI و فرمت OCI سازگار است و دستورات رایج مثل podman build/run عملاً جایگزین مستقیم می‌شوند. برای Compose، ابزار Podman Compose و برای رابط گرافیکی، Podman Desktop وجود دارد؛ روی macOS و Windows هم podman machine تجربه‌ای سبک و قابل‌اتکا می‌دهد. ادغام بومی با systemd، مدیریت لاگ‌ها و قابلیت‌هایی مثل pods و podman generate kube، راه را برای استفاده در CI/CD و حتی انتقال به Kubernetes هموار می‌کند. در پروژه‌های Go، ساخت چندمرحله‌ای، ایمیج‌های کم‌حجم، و mountهای rootless بدون مشکل دسترسی، چرخه توسعه و تست را سریع و قابل‌اعتماد می‌کند. هرچند تفاوت‌هایی مثل مسیر socket و جزئیات volumes نسبت به Docker وجود دارد، اما راهکارهای روشن و مستندی برایشان هست. نتیجه: اگر Docker جواب‌گو است، خوب؛ اما Podman در اکثر سناریوهای روزمره توسعه و CI تجربه‌ای امن‌تر، ساده‌تر و سازگار ارائه می‌دهد.

#Podman #Docker #Containers #DevOps #Go #GolangWeekly #Kubernetes #Security

🟣لینک مقاله:
https://golangweekly.com/link/174075/web


👑 @gopher_academy
Forwarded from Gopher Academy
🔵 عنوان مقاله
PG Back Web 0.5: A Postgres Backup System with Web Interface

🟢 خلاصه مقاله:
** PG Back Web 0.5 یک ابزار مبتنی بر Go برای مدیریت پشتیبان‌گیری‌های Postgres از طریق یک رابط وب ساده و کاربرپسند است. این برنامه امکان زمان‌بندی پشتیبان‌ها، پایش وضعیت و مشاهده تاریخچه را فراهم می‌کند و با webhooks می‌تواند اعلان‌ها را به سامانه‌های بیرونی ارسال کند. استقرار آن به‌صورت Docker image بسیار ساده است و در نسخه 0.5 پشتیبانی از Postgres 18 نیز اضافه شده تا با آخرین نسخه Postgres سازگار باشد.

#Postgres #Backup #Go #Docker #Database #DevOps #Webhooks #Monitoring

🟣لینک مقاله:
https://golangweekly.com/link/175372/web


👑 @gopher_academy
Docker یک ابزار بسیار محبوب برای مدیریت پروژه‌های Django است. بسیاری از توسعه‌دهندگان حرفه‌ای از آن استفاده می‌کنند، اما به نظرم هنوز برای بسیاری از تازه‌واردها گیج‌کننده است. در این مطلب تلاش می‌کنم توضیح دهم Docker چیست و چرا چنین افزودهٔ قدرتمندی برای کار با ‏Django محسوب می‌شود.

Docker چیست؟
ساده‌ترین راه برای درک Docker این است که آن را مانند یک محیط مجازی بزرگ در نظر بگیریم که همه‌چیز لازم برای پروژهٔ Django ما را در خود دارد: وابستگی‌ها، پایگاه‌های داده، سرویس‌های کش، و هر ابزار دیگری که نیاز باشد.

این موضوع با یک محیط مجازی (virtual environment) فرق دارد. محیط مجازی تنها به ایزوله‌کردن پکیج‌های نرم‌افزاری کمک می‌کند؛ مثل اینکه از چه نسخه‌ای از Django استفاده می‌کنید یا دیگر پکیج‌های پایتون. اما محیط مجازی نمی‌تواند سرویس‌های خارجی مثل پایگاه‌داده PostgreSQL را شامل شود. Docker می‌تواند. Docker یک محیط توسعهٔ کاملاً مستقل است که هم به صورت محلی و هم در محیط عملیاتی (production) قابل استفاده است.

پایگاه‌های داده در محیط عملیاتی

‏Django به طور پیش‌فرض با SQLite عرضه می‌شود و این انتخاب خوبی برای نمونه‌سازی سریع است. اما… شما هرگز نمی‌خواهید در محیط عملیاتی از SQLite استفاده کنید؛ در عوض معمولاً از PostgreSQL یا MySQL استفاده می‌شود. هرچند می‌توانید از SQLite در محیط توسعه و از یک پایگاه‌داده دیگر در محیط عملیاتی استفاده کنید، اما این کار توصیه نمی‌شود. زیرا تفاوت بین محیط توسعه و محیط عملیاتی می‌تواند باعث بروز باگ‌های زیادی شود.

راه‌حل این است که یک نسخهٔ محلی از PostgreSQL یا مشابه آن اجرا کنید. اما این کار چالش‌های خاص خودش را دارد. باید PostgreSQL را درست نصب و اجرا کنید، سپس آن را به Django متصل کنید. شدنی است، اما مستعد خطا است.

و اگر سرویس‌های دیگری مثل Redis هم در محیط عملیاتی دارید، تنظیم آن‌ها در محیط محلی هم سخت است اما با Docker بسیار ساده‌تر می‌شود. Docker به شما اجازه می‌دهد محیط محلی را دقیقاً مشابه محیط عملیاتی بسازید؛ که این آرزوی هر توسعه‌دهندهٔ وب است.

تیم‌ها
حالا تصور کنید عضو یک تیم توسعه هستید. چطور مطمئن می‌شوید که همهٔ اعضای تیم روی یک محیط محلی یکسان کار می‌کنند؟ مخصوصاً وقتی پایگاه‌دادهٔ محلی و تنظیمات آن ممکن است در سیستم هر توسعه‌دهنده متفاوت باشد؟

اینجاست که Docker واقعاً می‌درخشد. با Docker می‌توانید مطمئن باشید که هر عضو تیم دقیقاً روی همان محیط توسعهٔ محلی که شما استفاده می‌کنید کار می‌کند، که مزیت بسیار بزرگی است. اگر این مسئله را از تجربهٔ شخصی نیاموخته‌اید، شانس آورده‌اید.

Docker، Docker، Docker
پس چرا باید از Docker استفاده کنیم؟ زیرا تنظیم کردن محیط توسعهٔ محلی را بسیار ساده می‌کند. زیرا نصب Postgres، Redis و دیگر وابستگی‌ها به صورت محلی کابوس است. و چون Docker تضمین می‌کند که دقیقاً روی همان مشخصاتی کار کنید که دیگر اعضای تیم دارند.

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

اگر دوست دارید یاد بگیرید چگونه با Docker و Django برنامه‌های آمادهٔ محیط عملیاتی بسازید، کتاب Django for Professionals این موضوع را به شکل مفصل پوشش می‌دهد.

منبع (ترجمه با هوش مصنوعی)

#Django #Docker #وب_توسعه #برنامه_نویسی_پایتون #DevOps

@PhiloLearn