آموزش داکر از صفر تا اجرای اولین کانتینر
مشکل قدیمی برنامهنویسها: «روی سیستم من کار میکرد!»
هر برنامهنویسی این جمله را شنیده است: کد روی لپتاپ توسعهدهنده بینقص کار میکند، اما روی سرور با خطا روبهرو میشود. علت اصلی، تفاوت محیط اجراست — نسخههای متفاوت زبان برنامهنویسی، کتابخانهها و تنظیمات سیستمعامل. داکر (Docker) دقیقاً برای حل همین مشکل ساخته شده است.
داکر چیست؟
داکر یک پلتفرم متنباز برای ساخت، انتشار و اجرای اپلیکیشنها داخل واحدهایی به نام «کانتینر» است. کانتینر بستهای سبک و ایزوله است که کد شما را همراه تمام وابستگیهایش — کتابخانهها، تنظیمات و فایلهای موردنیاز — در یک واحد قابلحمل قرار میدهد. نتیجه: اپلیکیشن هرجا اجرا شود، دقیقاً یکسان کار میکند.
تفاوت کانتینر با ماشین مجازی
ماشین مجازی یک سیستمعامل کامل را شبیهسازی میکند: سنگین، کند و حجیم (چند گیگابایت).
کانتینر از کرنل سیستمعامل میزبان استفاده میکند: سبک (چند مگابایت)، سریع و در چند ثانیه آمادهی اجراست.
مفاهیم کلیدی داکر
Image (ایمیج): قالب آماده و فقطخواندنی برای ساخت کانتینر؛ مثل یک اسنپشات از محیط اپلیکیشن.
Container (کانتینر): نمونهی در حال اجرای یک ایمیج.
Dockerfile: فایل متنی شامل دستورات ساخت ایمیج.
Docker Hub: مخزن عمومی ایمیجهای آماده.
Volume: فضای ذخیرهسازی دائمی برای دادهها، مستقل از چرخهی عمر کانتینر.
Network: شبکهی ارتباطی بین کانتینرها.
دستورات پرکاربرد داکر
# دانلود یک ایمیج
docker pull nginx
# اجرای کانتینر در پسزمینه با نگاشت پورت
docker run -d -p 8080:80 nginx
# لیست کانتینرهای در حال اجرا
docker ps
# توقف و حذف کانتینر
docker stop <container-id>
docker rm <container-id>
# مشاهده لاگها
docker logs <container-id>
# اجرای دستور داخل کانتینر در حال اجرا
docker exec -it <container-id> bashمثال عملی: ساخت اولین Dockerfile
برای یک اپلیکیشن Node.js ساده، فایلی به نام Dockerfile بسازید:
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install --production
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]سپس ایمیج را بسازید و کانتینر را اجرا کنید:
docker build -t myapp:1.0 .
docker run -d -p 3000:3000 myapp:1.0داکر کامپوز: مدیریت چند کانتینر با یک دستور
وقتی اپلیکیشن به چند سرویس نیاز دارد (مثلاً اپ + دیتابیس)، فایل docker-compose.yml همه را یکجا مدیریت میکند:
services:
app:
build: .
ports:
- "3000:3000"
db:
image: postgres:15
environment:
POSTGRES_PASSWORD: secretdocker compose up -dچرا داکر برای تیمهای توسعه حیاتی است؟
یکسانسازی محیط: توسعه، تست و پروداکشن دقیقاً یک محیط دارند.
استقرار سریع: فاصلهی کامیت تا پروداکشن به چند دقیقه میرسد.
مقیاسپذیری: اجرای دهها نمونه از یک سرویس تنها با یک دستور.
ایزولیشن: هر سرویس در کانتینر خودش اجرا میشود، بدون تداخل وابستگیها.
جمعبندی
داکر امروز استاندارد بستهبندی و اجرای نرمافزار است. اگر هنوز با «روی سیستم من کار میکرد» دستوپنجه نرم میکنید، همین امروز اولین Dockerfile خود را بنویسید.
