ویرگول
ورودثبت نام
Sedali
Sedaliیه پسری که کل عمرش دنبال این بود که یه Div رو center کنه:)
Sedali
Sedali
خواندن ۵ دقیقه·۶ ماه پیش

یه راهنمای خودمونی و حسابی درباره داکر: از صفر تا صد برای تازه‌کارا و حرفه‌ای‌ها

داکر چیه اصلاً؟

داکر (Docker) یه ابزار باحاله که توی دنیای برنامه‌نویسی و DevOps حسابی سر و صدا کرده. فکر کن یه جعبه جادویی داری که می‌تونی برنامه‌ت، همه کتابخونه‌ها، تنظیمات و هر چیزی که برای اجراش نیازه رو بندازی توش و هر جا بخوای ببری و اجرا کنی، بدون اینکه نگران این باشی که "آخ، این چرا اینجا کار نمی‌کنه؟". این جعبه جادویی اسمش کانتینره و داکر کارش اینه که این کانتینرها رو برات درست کنه و مدیریتشون کنه.

داکر مثل یه ماشین مجازی (VM) نیست که بخواد کل یه سیستم‌عامل رو با خودش بکشه. سبک و سریع کار می‌کنه چون از هسته سیستم‌عامل خودت (مثلاً لینوکس یا ویندوز) استفاده می‌کنه. حالا بیا یه کم عمیق‌تر بشیم توش و ببینیم داستان چیه.

چرا داکر این‌قدر باحاله؟

- هر جا می‌خوای ببر: کانتینر داکر رو می‌تونی رو لپ‌تاپ خودت، سرور شرکت یا حتی یه سرور ابری اجرا کنی، بدون دردسر.

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

- همه‌چیز جدا جداست: هر کانتینر انگار یه دنیای کوچیک برای خودش داره. پس برنامه‌ها نمی‌تونن همدیگه رو خراب کنن.

- وابستگی‌ها رو جمع و جور می‌کنه: دیگه لازم نیست بشینی تک‌تک کتابخونه‌ها رو نصب کنی. همه‌چیز تو کانتینر آماده‌ست.

داکر چطور کار می‌کنه؟

داکر یه معماری کلاینت-سرور داره. یعنی یه بخشش (کلاینت) دستورات تو رو می‌گیره و یه بخش دیگه (داکر دیمن) کارای اصلی رو انجام می‌ده. حالا بیایم اجزای اصلی داکر رو بشناسیم:

1. داکر دیمن (Docker Daemon): این مغز داکره. رو سرور اجرا می‌شه و کارای سنگین مثل ساختن، اجرا کردن و مدیریت کانتینرها رو انجام می‌ده.

2. داکر کلاینت (Docker Client): این چیزیه که باهاش حرف می‌زنی. مثلاً وقتی تو ترمینال می‌زنی docker run، کلاینت به دیمن می‌گه چیکار کنه.

3. ایمیج‌ها (Images): ایمیج مثل یه قالب آماده‌ست. فکر کن یه فایل زیپ داری که همه‌چیز برنامه‌ت توشه. از روی این ایمیج، کانتینرها ساخته می‌شن.

4. کانتینرها (Containers): اینا نسخه‌های در حال اجرای ایمیج‌ها هستن. مثل یه برنامه که داره اجرا می‌شه، با همه تنظیمات و وابستگی‌هاش.

5. رجیستری (Registry): یه جایی مثل Docker Hub که ایمیج‌ها رو اونجا ذخیره می‌کنن. می‌تونی ایمیج‌های آماده رو ازش بکشی یا ایمیج خودت رو آپلود کنی.

حالا بریم سراغ یه مثال واقعی

فرض کن می‌خوای یه وب‌اپلیکیشن ساده با Node.js بسازی و بذاریش تو داکر. بیایم قدم به قدم این کار رو انجام بدیم:

1. یه پروژه ساده Node.js بساز

اول یه پوشه درست کن و برو توش:

docker build -t my-node-app .

- docker build: می‌گه یه ایمیج جدید بساز.

- -t my-node-app: اسم ایمیج رو می‌ذاره my-node-app.

- .: یعنی از فایل‌های همین پوشه استفاده کن.

### 4. کانتینر رو اجرا کن

حالا که ایمیجت آماده‌ست، بیا یه کانتینر از روش اجرا کنیم:

docker run -p 3000:3000 my-node-app

- -p 3000:3000: پورت 3000 روی سیستم خودت رو به پورت 3000 توی کانتینر وصل می‌کنه.

حالا اگه بری به http://localhost:3000 تو مرورگرت، باید ببینی که نوشته: سلام دنیا! این یه اپلیکیشن Node.js توی داکره!

یه کم پیشرفته‌تر: چند تا کانتینر با هم

حالا فرض کن اپلیکیشنت یه دیتابیس هم لازم داره، مثلاً MongoDB. می‌تونی چند تا کانتینر رو با هم ترکیب کنی. برای این کار از Docker Compose استفاده می‌کنیم که یه ابزار برای مدیریت چند کانتینره.

یه فایل Docker Compose بساز

یه فایل به اسم docker-compose.yml درست کن و اینا رو توش بنویس:

yaml

version: '3.8'

services:

app:

build: .

ports:

- "3000:3000"

depends_on:

- db

environment:

- MONGO_URL=mongodb://db:27017/myapp

db:

image: mongo:latest

ports:

- "27017:27017"

این فایل می‌گه:

- یه سرویس به اسم app داریم که از Dockerfile خودمون ساخته می‌شه.

- یه سرویس دیگه به اسم db داریم که از ایمیج رسمی MongoDB استفاده می‌کنه.

- اپلیکیشن ما به دیتابیس وصل می‌شه با متغیر محیطی MONGO_URL.

### کد اپلیکیشن رو آپدیت کن

حالا فایل index.js رو یه کم تغییر بده که به MongoDB وصل بشه:

javascript

const express = require('express');

const mongoose = require('mongoose');

const app = express();

mongoose.connect(process.env.MONGO_URL, { useNewUrlParser: true, useUnifiedTopology: true })

.then(() => console.log('به MongoDB وصل شدیم!'))

.catch(err => console.error('خطا:', err));

app.get('/', (req, res) => {

res.send('سلام دنیا! این اپلیکیشن به MongoDB وصله!');

});

app.listen(3000, () => {

console.log('اپلیکیشن روی پورت 3000 اجرا شد');

});

و تو package.json یه وابستگی جدید اضافه کن:

json

{

"name": "my-node-app",

"version": "1.0.0",

"dependencies": {

"express": "^4.17.1",

"mongoose": "^6.0.12"

}

}

اجرا کن

حالا با این دستور همه‌چیز رو با هم اجرا کن:

bash

docker-compose up

این دستور هم اپلیکیشن Node.js رو اجرا می‌کنه و هم یه کانتینر MongoDB راه می‌ندازه. حالا اگه بری به http://localhost:3000، می‌بینی که اپلیکیشنت داره کار می‌کنه و به دیتابیس هم وصله.

نکات حرفه‌ای برای کار با داکر

1. بهینه‌سازی ایمیج‌ها: سعی کن ایمیج‌هات سبک باشن. مثلاً از ایمیج‌های پایه مثل node:16-alpine استفاده کن که کوچیک‌ترن.

2. کش کردن درビルد: تو Dockerfile، دستوراتی که کمتر تغییر می‌کنن (مثل COPY package.json و npm install) رو بالاتر بذار تا داکر از کش استفاده کنه وビルد سریع‌تر بشه.

3. مدیریت لاگ‌ها: می‌تونی لاگ‌های کانتینر رو با docker logs <container_id> ببینی.

4. شبکه‌سازی: داکر بهت امکان می‌ده شبکه‌های مجازی درست کنی تا کانتینرها بتونن باهم حرف بزنن.

5. داکر هاب: از Docker Hub برای پیدا کردن ایمیج‌های آماده استفاده کن، مثلاً برای Redis، MySQL یا هر چی لازم داری.

## یه مثال واقعی‌تر: استقرار روی سرور

فرض کن می‌خوای اپلیکیشنت رو روی یه سرور ابری (مثل AWS یا دیجیتال اوشن) مستقر کنی. مراحلش اینه:

1. ایمیجت رو بساز و تست کن روی سیستم خودت.

2. ایمیج رو به یه رجیستری (مثل Docker Hub یا Amazon ECR) آپلود کن:

bash

docker tag my-node-app username/my-node-app

docker push username/my-node-app

3. روی سرور، داکر رو نصب کن و کانتینرت رو اجرا کن:

bash

docker pull username/my-node-app

docker run -d -p 80:3000 username/my-node-app

چالش‌های داکر و راه‌حل‌ها

- مدیریت فضای دیسک: کانتینرها و ایمیج‌ها می‌تونن دیسکت رو پر کنن. با docker system prune چیزای اضافی رو پاک کن.

- امنیت: همیشه از ایمیج‌های رسمی و معتبر استفاده کن و دسترسی‌های کانتینر رو محدود کن.

- دیباگ کردن: اگه کانتینرت کار نکرد، با docker logs یا docker exec -it <container_id> bash برو توش و ببین چی به چیه.

داکر یه ابزار قدرتمنده که کار توسعه و استقرار رو خیلی راحت‌تر کرده. با یه کم تمرین و بازی کردن با کانتینرها، می‌تونی پروژه‌های پیچیده‌ت رو به‌راحتی مدیریت کنی. از مثال‌های ساده مثل اپلیکیشن Node.js تا پروژه‌های بزرگ با چندین سرویس، داکر بهت کمک می‌کنه همه‌چیز رو مرتب و قابل‌حمل نگه داری. حالا برو یه پروژه کوچیک راه بنداز و خودت امتحان کن! اگه سوالی داشتی، تو کامنت‌ها بپرس، خودم برات توضیح می‌دم 😎

داکربرنامه نویسی
۰
۰
Sedali
Sedali
یه پسری که کل عمرش دنبال این بود که یه Div رو center کنه:)
شاید از این پست‌ها خوشتان بیاید