فرض کن میخوای یه نرمافزار جدید روی کامپیوترت نصب کنی. دانلودش میکنی، نصبش میکنی، بعد میبینی با ویندوزت سازگار نیست. یا یه برنامهنویس هستی که کدت روی سیستم خودت کار میکنه، ولی روی سرور شرکت کار نمیکنه. یا یه سرور داری و میخوای چند تا سرویس مختلف روش راه بندازی، ولی از ترس بههمریختن سیستم، جرات نمیکنی.
Dockerدقیقاً برای همین مشکلات ساخته شده. تو این مقاله از بایتوتک، اول یاد میگیری Docker چیه و چرا اینقدر محبوبه، بعد با هم قدمبهقدم اولین کانتینرت رو راه میندازی. حتی اگه هیچی از لینوکس و سرور ندونی، این مقاله رو بخون تا آخر.
Docker چیست؟ به زبان خیلی ساده
تصور کن میخوای یه غذای خاص درست کنی. همه مواد اولیه رو داری: برنج، گوشت، ادویه، سبزی. ولی آشپزخانهی خونهت کوچیکه، بعضی وسایل رو نداری، و اگه آشپزی کنی، کل آشپزخانه بههم میریزه.
راهحل چیه؟ میری یه آشپزخانه سیار کرایه میکنی. این آشپزخانه کوچیکه، همه وسایل رو داره، مستقل کار میکنه و وقتی کارت تموم شد، برش میداری و میذاری کنار. آشپزخانهی خودت هم دستنخورده میمونه.
Dockerهم دقیقاً همین کار رو با نرمافزارها میکنه. یه جعبه (کانتینر) میسازه که توش همهچیز نرمافزار هست: کد، کتابخانهها، تنظیمات، همهچیز. این جعبه مستقل کار میکنه، روی هر سیستمی اجرا میشه و به سیستم اصلی کاری نداره.
Docker در مقابل ماشین مجازی (VM)
شاید بگی خب، این که همون ماشین مجازیه. نه، فرق داره. بذار ساده بگم:
ماشین مجازی (VM): مثل اینه که یه خونه کامل بسازی. توش آشپزخانه، حموم، اتاق خواب، همهچیز هست. ولی خونه کامل، سنگین و گرون و پرمصرفه.
کانتینر Docker: مثل اینه که یه اتاق بسازی. فقط تخت و یه میز توشه. سبک، سریع، ارزون.
تفاوتهای اصلی:
سرعت: کانتینر تو چند ثانیه بالا میاد. VMتو چند دقیقه.
حجم: کانتینر چند مگابایته. VMچند گیگابایت.
مصرف منابع: کانتینر خیلی کم RAMو CPUمصرف میکنه. VMخیلی زیاد.
سیستم عامل: هر کانتینر از کرنل سیستم اصلی استفاده میکنه. هر VM یه سیستم عامل کامل جدا داره.
مثال ساده: اگه بخوای ۱۰ تا سرویس مختلف راه بندازی، با VM باید ۱۰ تا سیستم عامل نصب کنی که مثلاً ۲۰ گیگ RAMمیخواد. با Docker، همشون تو یه سیستم عامل اجرا میشن و فقط چند صد مگ RAMمصرف میکنن.
چرا Docker اینقدر محبوبه؟
۱. یکپارچگی محیط (مهمترین دلیل)
کدت روی لپتاپت کار میکنه، ولی روی سرور نه. چرا؟ چون لپتاپت ویندوز داره، سرور لینوکس. یا نسخهی پایتون فرق داره. یا یه کتابخانهی خاص نصبه که روی سرور نیست.
Dockerمیگه: «همهچیز نرمافزار رو تو یه جعبه میذارم. این جعبه روی هر سیستمی همونطور کار میکنه.» پس دیگه مشکل «روی سیستم من کار میکنه، روی سرور نه» نداری.
۲. سبکی و سرعت
کانتینرها تو چند ثانیه بالا میاد و همون چند ثانیه پایین. برای تست و توسعه، این فوقالعادهست.
۳. جداسازی (Isolation)
هر کانتینر مستقل کار میکنه. اگه یه کانتینر خراب بشه، بقیه سالم میمونن. حتی اگه یه کانتینر هک بشه، مهاجم نمیتونه به بقیه دسترسی پیدا کنه.
۴. قابل حمل بودن (Portability)
یه کانتینر رو روی لپتاپت میسازی، میتونی همون رو روی سرور اجرا کنی. حتی روی ابر (Cloud) یا روی گوشیت!
۵. جامعه بزرگ
Dockerمیلیونها کاربر داره. یعنی اگه به مشکل بخوری، جوابش رو تو اینترنت پیدا میکنی.
اصطلاحات پایه Docker
Image: یه قالب آماده که توش نرمافزار و تنظیماتش هست. مثل یه دستور پخت غذا.
Container یا کانتینر: یه نمونهی در حال اجرا از Image. مثل غذای پختهشده.
Dockerfile: یه فایل متنی که میگه Imageچطور ساخته بشه. مثل دستور پخت نوشتهشده.
Docker Hub: یه سایت مثل اپاستور که توش میلیونها Imageآمادهست. میتونی دانلودشون کنی.
Volume: یه فضای ذخیرهسازی که بین کانتینر و سیستم اصلی مشترکه. برای نگهداشتن دادهها.
Registry: یه سرور که Imageها رو نگه میداره. Docker Hub معروفترینشه.
Docker چطور کار میکند؟
وقتی یه کانتینر اجرا میکنی، این اتفاقها میافته:
مرحله ۱: تو به Dockerمیگی «این Imageرو اجرا کن».
مرحله ۲: Dockerچک میکنه که Imageرو سیستم هست یا نه. اگه نباشه، از Docker Hubدانلودش میکنه.
مرحله ۳: Dockerیه کانتینر از روی Imageمیسازه و اجراش میکنه.
مرحله ۴: کانتینر از منابع سیستم اصلی (CPU، RAM، شبکه) استفاده میکنه، ولی جداست.
مرحله ۵: وقتی کارت تموم شد، کانتینر رو حذف میکنی. سیستم اصلی دستنخورده میمونه.
آموزش عملی: نصب Docker
قبل از شروع:
Docker روی ویندوز، مک و لینوکس نصب میشه. بسته به سیستمت، راه نصب فرق داره.
روش اول - نصب روی ویندوز (برای کاربرای عادی):
قدم ۱: برو به سایت داکرَ
docker.com/products/docker-desktopقدم ۲: دکمه Download for Windows رو بزن.
قدم ۳: فایل نصب رو دانلود کن و اجرا کن.
قدم ۴: تو مراحل نصب، گزینه Use WSL 2 instead of Hyper-V رو تیک بزن.
قدم ۵: بعد از نصب، سیستم رو ریاستارت کن.
قدم ۶: Docker Desktopرو باز کن. اگه آیکون نهنگ آبی تو نوار پایین ظاهر شد، یعنی نصب درست بوده.
روش دوم - نصب روی Ubuntu (برای سرور):
این دستورات رو تو ترمینال بزن:
sudo apt update
sudo apt install docker.io
sudo systemctl start docker
sudo systemctl enable dockerخط اول لیست برنامهها رو بهروز میکنه.
خط دوم Dockerرو نصب میکنه.
خط سوم Dockerرو روشن میکنه.
خط چهارم باعث میشه بعد از هر ریاستارت، Docker خودکار روشن بشه.
برای اطمینان از اینکه Docker درست نصب شده، این دستور رو تو ترمینال بزن:
docker --versionاگه نسخهی Docker رو نشون داد، یعنی نصب درست بوده
روش سوم - نصب روی مک:
برو به docker.com/products/docker-desktop، نسخهی Mac رو دانلود کن و نصب کن.
اجرای اولین کانتینر (روی همه سیستمها)
حالا بیا یه کانتینر ساده اجرا کنیم. دستور زیر یه وبسرور کوچیک (Nginx) راهاندازی میکنه:
docker run -d -p 8080:80 nginxتوضیح هر بخش:
docker run یعنی Dockerیه کانتینر جدید اجرا کنه.
-d یعنی تو پسزمینه اجرا بشه.
p 8080:80- یعنی پورت ۸۰ داخل کانتینر، به پورت ۸۰۸۰ سیستم اصلی وصل بشه.
nginx اسم Imageایه که از Docker Hubدانلود میشه.
تست:
برو تو مرورگر و بزن:
http://localhost:8080
اگه صفحهی خوشآمد Nginxرو دیدی، یعنی کانتینرت درست کار میکنه.
برای دیدن هر یک از موارد کد های مربوط به هر بخش رو وارد کن.
دیدن کانتینرهای در حال اجرا:
docker psمتوقف کردن کانتینر:
docker stop <container_id>حذف کانتینر:
docker rm <container_id>دیدن Imageها:
docker images
نرمافزارهای کاربردی که میتونی با Docker اجرا کنی
حالا که Dockerرو نصب کردی، بیا چند تا نرمافزار واقعی رو ببین که کاربرای عادی میتونن اجرا کنن:
۱. Nextcloud - جایگزین شخصی Google Drive:
Nextcloud یه نرمافزار رایگانه که مثل Google Drive کار میکنه، ولی روی سرور خودت اجرا میشه. یعنی فایلهات تو خونه یا شرکت خودت ذخیره میشن، نه تو سرورهای گوگل. برای راهاندازی، این دستور رو تو ترمینال بزن
docker run -d -p 8080:80 nextcloudبعد از اجرای این دستور، برو تو مرورگر و آدرس http://localhost:8080رو باز کن. صفحهی راهاندازی Nextcloud ظاهر میشه. یه نام کاربری و پسورد برای ادمین بساز و تموم. حالا سرور ابری شخصی خودت رو داری.
سرور ابری شخصی خودت. فایلهات رو تو خونه نگه دار، نه تو گوگل.
۲. Jellyfin - سرور مدیای خانگی:
Jellyfin یه نرمافزار رایگانه که فیلمها و موزیکهات رو روی یه سرور شخصی نگه میداره و از هر دستگاهی تو خونه (موبایل، تبلت، تلویزیون) قابل دسترسیه. برای راهاندازی، این دستور رو تو ترمینال بزن.
docker run -d -p 8096:8096 jellyfin/jellyfinبعد از اجرای این دستور، برو تو مرورگر و آدرس http://localhost:8096رو باز کن. صفحهی راهاندازی Jellyfin ظاهر میشه. پوشهی فیلمها و موزیکهات رو بهش معرفی کن و تموم. حالا سرور مدیای شخصی خودت رو داری.
فیلمها و موزیکهات رو از هر دستگاهی تو خونه ببین.
۳. Pi-hole - مسدودکننده تبلیغات
Pi-hole یه نرمافزار رایگانه که تبلیغات رو تو کل شبکه خونه بلاک میکنه. یعنی تو همهی دستگاهها (موبایل، لپتاپ، تلویزیون) تبلیغات نمایش داده نمیشه. برای راهاندازی، این دستور رو تو ترمینال بزن:
docker run -d -p 53:53/tcp -p 53:53/udp -p 80:80 pihole/piholeبعد از اجرای این دستور، برو تو مرورگر و آدرس http://localhost:80/adminرو باز کن. صفحهی مدیریت Pi-hole ظاهر میشه. یه پسورد برای ادمین بذار و تنظیمات DNSرو روی روتر خونهت اعمال کن. از این به بعد، تبلیغات تو کل شبکه خونه بلاک میشن.
۴. Vaultwarden - مدیر پسورد شخصی:
Vaultwarden یه نرمافزار رایگانه که مثل LastPassیا 1Passwordکار میکنه، ولی روی سرور خودت اجرا میشه. یعنی همهی پسوردهای خودت رو تو یه جای امن نگه میداری، بدون اینکه به شرکتهای خارجی اعتماد کنی. برای راهاندازی، این دستور رو تو ترمینال بزن:
docker run -d -p 8080:80 vaultwarden/serverبعد از اجرای این دستور، برو تو مرورگر و آدرس http://localhost:8080رو باز کن. صفحهی راهاندازی Vaultwarden ظاهر میشه. یه حساب کاربری برای خودت بساز و همهی پسوردهای خودت رو توش ذخیره کن. حالا مدیر پسورد شخصی خودت رو داری.
همهی پسوردهای خودت رو امن نگه دار.
۵. Minecraft Server:
اگه به بازی Minecraft علاقه داری، میتونی سرور شخصی خودت رو راه بندازی و با دوستات بازی کنی. برای راهاندازی، این دستور رو تو ترمینال بزن:
docker run -d -p 25565:25565 itzg/minecraft-serverبعد از اجرای این دستور، سرور Minecraft روی سیستم تو راه میافته. دوستات میتونن با وارد کردن IPتو، به سرورت وصل بشن و با هم بازی کنین. برای تنظیمات بیشتر (مثل نسخه بازی، تعداد بازیکنها و...)، به سایت itzg/minecraft-server تو Docker Hub سر بزن.
بخش پیشرفته: ساخت Image با Dockerfile (برای کاربران حرفهای)
اگه یه برنامهنویس هستی، میتونی برای برنامهی خودت Image بسازی. این بخش برای کاربرای عادیه که فقط میخوان نرمافزار نصب کنن، اختیاریه.
بیا یه Dockerfileساده برای یه برنامهی پایتون بسازیم.
قدم ۱ - ساخت یه فایل پایتون:
nano app.pyاین کد رو توش بذار:
print("Hello from Docker!")ذخیره کن.
قدم ۲ - ساخت Dockerfile:
nano Dockerfile
این محتوا رو توش بذار:
FROM python:3.11-slim
WORKDIR /app
COPY app.py .
CMD ["python", "app.py"]توضیح:
FROM python:3.11-slim یعنی از Imageپایهی پایتون نسخه ۳.۱۱ استفاده کن.
WORKDIR /app یعنی پوشهی کاری داخل کانتینر رو /appبذار.
COPY app.py یعنی فایل app.py رو از سیستم اصلی به کانتینر کپی کن.
CMD ["python", "app.py"] یعنی وقتی کانتینر اجرا شد، این دستور رو اجرا کن.
قدم ۳ - ساخت Image:
docker build -t my-python-app .قدم ۴ - اجرای Image:
docker run my-python-appباید پیام Hello from Docker! رو ببینی.
بخش پیشرفته: Docker Compose (برای کاربران حرفهای)
اگه بخوای چند تا کانتینر رو با هم راه بندازی، Docker Compose به کارت میاد.
یه فایل docker-compose.yml میسازی:
version: '3'
services:
web:
image: nginx
ports:
- "8080:80"
db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: secretبا این دستور، هر دو کانتینر راه میافتن:
docker-compose up -dDocker در مقابل Podman
Podman یه ابزار جدیده که مثل Dockerکار میکنه، ولی دو تا مزیت داره:
۱. بدون Daemon :Docker یه سرویس پسزمینه (Daemon) داره که با root اجرا میشه. Podmanاین رو نداره، امنتره.
۲. بدون نیاز به root: میتونی بدون دسترسی ادمین کانتینر اجرا کنی.
ولی Dockerبالغتره، جامعهی بزرگتری داره و ابزارهای بیشتری داره. فعلاً Dockerرایجتره.
اشتباهات رایج در Docker
اشتباه اول - اجرای کانتینر با کاربر root:
Dockerبهصورت پیشفرض با rootکار میکنه. بهتره یه کاربر غیر root بسازی و اون رو به گروه Dockerاضافه کنی.
sudo usermod -aG docker $USERاشتباه دوم - نگهنداشتن دادهها:
اگه کانتینر رو حذف کنی، دادههاش هم میرن. باید از Volumes استفاده کنی:
docker run -v /data/mydata:/app/data nginxاشتباه سوم - استفاده از Imageهای ناشناس:
فقط از Imageهای رسمی یا معتبر استفاده کن. تو Docker Hub، Imageهای رسمی با علامت آبی مشخص میشن.
اشتباه چهارم - نبود مدیریت منابع:
کانتینرها میتونن همهی RAMو CPUسیستم رو بخورن. باید محدودیت بذاری:
docker run -m 512m --cpus=1 nginxاشتباه پنجم - نگهنداشتن لاگها:
اگه کانتینر خراب بشه، باید لاگها رو ببینی:
docker logs <container_id>جمعبندی
تو این مقاله از بایتوتک یاد گرفتی Docker چیه، چطور کار میکنه و چرا اینقدر محبوبه. تفاوتش با ماشین مجازی رو فهمیدی، روی ویندوز و لینوکس نصبش کردی و اولین کانتینرت رو راه انداختی. پنج نرمافزار کاربردی که با Docker میتونی اجرا کنی رو دیدی و با Dockerfile و Docker Compose هم آشنا شدی. مهمترین کاربرد Docker اینه که محیط اجرای نرمافزار رو مستقل و یکپارچه میکنه. یعنی هر چیزی که روی لپتاپت کار میکنه، روی سرور هم کار میکنه. این سادگی و سرعت، دلیل محبوبیت Docker تو همهی حوزههای IT هست. اگه میخوای عمیقتر یاد بگیری، مقالههای ARP Spoofing، راهنمای جامع فایروال و Ransomware رو هم بخون.
نظرات کاربران
هنوز نظری ثبت نشده است. اولین نفری باشید که نظر خود را مینویسد!