داکر
Dockerاین مسیر یک هدف دارد: بتوانی نرمافزارت را طوری بستهبندی کنی که روی هر ماشینی دقیقاً همانطور اجرا شود که روی لپتاپ خودت اجرا میشد — و بعد آن را روی یک سرور واقعی بگذاری و شب راحت بخوابی.
قبل از شروعBefore you start
برای این مسیر به دانش قبلی داکر نیاز نداری. اما سه چیز کمک میکند.
You need no prior Docker knowledge. Three things will help, though.
آشنایی مقدماتی با ترمینال
Basic terminal comfort
اینکه بدانی cd و ls چه میکنند کافی است. بقیه را در راه یاد میگیری.
Knowing what cd and ls do is enough. The rest you pick up on the way.
یک ماشین برای تمرین
A machine to practise on
ویندوز با WSL2، یا هر توزیع لینوکس، یا مک. فصل ۲ هر سه را پوشش میدهد.
Windows with WSL2, any Linux distribution, or a Mac. Chapter 2 covers all three.
یک پروژهٔ واقعی خودت
A real project of your own
هرچه داری — یک اسکریپت پایتون، یک اپ Node، یک سایت PHP. از فصل ۴ رویش کار میکنیم.
Whatever you have — a Python script, a Node app, a PHP site. From chapter 4 we work on it.
اینجا چیزی «تماشا» نمیکنی. متن را میخوانی، دستور را در ترمینال خودت اجرا میکنی، خروجیات را با خروجی نوشتهشده مقایسه میکنی. اگر فقط بخوانی و اجرا نکنی، هفتهٔ بعد چیزی یادت نمیماند. این تهدید نیست، توصیف واقعیت است.
You do not watch anything here. You read, you run the command in your own terminal, you compare your output with the one printed. If you only read and never run, none of it survives the week. That is not a threat, it is a description.
قوس این مسیرThe arc of this track
پانزده فصل زیاد به نظر میرسد، اما در واقع چهار حرکت است.
Fifteen chapters sounds like a lot; it is really four movements.
-
فهمیدن و راه انداختن — فصل ۱ تا ۳
Understand and run it — chapters 1 to 3
داکر چه دردی را درمان میکند، چطور نصبش کنیم، و چطور با یک کانتینر زنده کار کنیم. در پایان فصل ۳ میتوانی هر نرمافزار آمادهای را بدون نصب اجرا کنی.
What pain Docker treats, how to install it, and how to work with a live container. By the end of chapter 3 you can run any packaged software without installing it.
-
ساختن ایمیج خودت — فصل ۴ و ۵
Build your own image — chapters 4 and 5
از مصرفکننده به سازنده.
Dockerfile، لایهها، کش، و کوچککردن ایمیج.From consumer to producer: the
Dockerfile, layers, cache, and slimming images down. -
چند سرویس کنار هم — فصل ۶ تا ۱۱
Many services together — chapters 6 to 11
داده، شبکه، Compose، پیکربندی، سلامت و انتشار. اینجا از «یک کانتینر» به «یک سامانه» میرسیم.
Data, networking, Compose, configuration, health and publishing. This is where one container becomes a system.
-
تولید واقعی — فصل ۱۲ تا ۱۵
Real production — chapters 12 to 15
عیبیابی وقتی خراب شد، امنیت، استقرار روی VPS، و پروژهٔ نهایی که همهچیز را به هم وصل میکند.
Debugging when it breaks, security, deploying to a VPS, and the capstone that ties it all together.
در پایان چه چیزی ساختهای؟
What will you have built?
یک سامانهٔ سهسرویسه روی یک سرور واقعی: اپ وب، پایگاهدادهٔ PostgreSQL با دادهای که با
حذف کانتینر از بین نمیرود، و یک reverse proxy جلوی هر دو. بهاضافهٔ پشتیبانگیری خودکار
شبانه، healthcheck روی هر سرویس، و سیاست ریاستارت طوری که با ریبوت سرور
همهچیز خودش بالا بیاید. کل توصیف سامانه در یک فایل compose.yml جا میشود
که میتوانی به کسی بدهی و او دقیقاً همان را بالا بیاورد.
A three-service system on a real server: a web app, a PostgreSQL database whose data survives
the container being deleted, and a reverse proxy in front of both. Plus a nightly automated
backup, a healthcheck on every service, and restart policies so that a server
reboot brings everything back on its own. The whole system fits in one compose.yml
that you can hand to someone else who will get exactly the same thing.
پیشرفت تو
درصد هر فصل از دو چیز میآید: چقدر از بخشهایش را خواندهای (۵۵٪) و چند تمرینش را تیک زدهای (۴۵٪). همهچیز داخل مرورگر خودت میماند.
فصل
فصلها به هم وابستهاند و ترتیبشان معنا دارد. هر مسیر با پروژههای نهایی تمام میشود: ساده، متوسط، پیچیده.
مسئلهای که داکر حل میکند
درد محیطهای ناهمگون، و مدل ذهنی درست از image / container / volume.
نصب روی ویندوز، لینوکس و WSL2
Engine در برابر Desktop، راهاندازی WSL2 و رفع خطاهای رایج نصب.
اجرا، لاگ، exec و پورت
چرخهٔ کامل کار با یک کانتینر زنده: run، ps، logs، exec، stop، rm.
نوشتن Dockerfile؛ لایهها و کش
هر دستور یک لایه است. ترتیب دستورها یعنی تفاوت بیلد ۲ ثانیهای و ۲ دقیقهای.
multi-stage build و کوچککردن ایمیج
جدا کردن محیط build از runtime و سنجش اندازهٔ واقعی artifact.
داده: volume، bind mount و پشتیبانگیری
writable layer، named volume، bind mount و backup را با آزمایش واقعی و یک لَب PostgreSQL از هم جدا کن.
شبکه: bridge، DNS داخلی و publish
localhost، network مشترک، DNS داخلی و تفاوت traffic داخل Docker با publish روی host را با دو container عیبیابی کن.
Docker Compose: چند سرویس، یک مدل
با ساخت تدریجی compose.yaml، ارتباط web و PostgreSQL، شبکهٔ داخلی، volume ماندگار و عیبیابی چرخهٔ عمر آشنا شو.
متغیرهای محیطی و secretها
یک image را میان محیطها بهکار ببر؛ تنظیمات را جدا کن و رمز را از image، Git و خروجیهای ناامن دور نگه دار.
healthcheck، restart policy و لاگ
فرق زندهبودن با آمادگی برنامه؛ بازیابی بعد از crash و پیدا کردن علت از روی log.
registry و push
از image محلی تا انتشار در registry؛ نامگذاری repository، tag و digest، ورود امن، push، pull و اثبات اجرای image بازیابیشده.
عیبیابی: exit code، OOM، پر شدن دیسک
از Exited 137 و خطای no space left تا مدرک، علت و اصلاح؛ بدون حدس یا پاکسازی پرخطر.
امنیت: non-root، read-only، محدودیت منابع
از کاربر غیرریشه و فایلسیستم فقطخواندنی تا سقف حافظه، CPU و پردازه؛ هر تغییر با آزمون و مدرک.
استقرار روی VPS
از انتشار image نسخهدار تا reverse proxy، بررسی سلامت و rollback؛ با توضیح صادقانهٔ وقفهٔ ممکن.
پروژهٔ ۱ — یک سرویس، یک ایمیج
یک API کوچک را خودت به image نسخهدار تبدیل کن، به registry بفرست و از نو pull و اجرا کن.
پروژهٔ ۲ — اپ + پایگاهداده با Compose
دو سرویس، یک شبکهٔ داخلی، والیوم ماندگار، secret فایلمحور و مدرک ماندگاری داده.
پروژهٔ ۳ — استقرار سهسرویسه روی سرور واقعی
Caddy، برنامه و PostgreSQL روی VPS؛ backup شبانه، آزمون restore، انتشار blue/green و rollback با شواهد.