You are currently viewing آموزش داکر Docker – شروع کار

آموزش داکر Docker – شروع کار

آموزش کامل Docker: از صفر تا دیپلوی حرفه‌ای

داکر چیست و چرا مهم است؟

Docker پلتفرمی برای ساخت، بسته‌بندی و اجرای اپلیکیشن‌ها در قالب کانتینر است. کانتینرها سبک، سریع و قابل‌انتقال‌اند و مشکل «روی سیستم من کار می‌کند!» را حل می‌کنند.

  • مزایا: سرعت راه‌اندازی، تکرارپذیری، مقیاس‌پذیری، سازگاری محیط توسعه و تولید، هزینه کمتر نسبت به VMها.

مفاهیم کلیدی

  • Image (ایمیج): قالب فقط‌خواندنی که شامل اپ و وابستگی‌هاست.
  • Container (کانتینر): نمونهٔ در حال اجرای ایمیج.
  • Registry: مخزن ایمیج‌ها (مانند Docker Hub).
  • Dockerfile: دستورالعمل ساخت ایمیج.
  • Volume: ذخیره‌سازی پایدار داده‌ها خارج از لایهٔ کانتینر.
  • Network: اتصال کانتینرها به هم و به بیرون.

نصب Docker روی لینوکس (Ubuntu/Debian)

sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo usermod -aG docker $USER

تست:

docker run --rm hello-world

اولین تجربه: اجرای یک کانتینر

docker run -d --name web -p 80:80 nginx:alpine
docker logs -f web
docker ps

مدیریت ایمیج و کانتینر

docker images
docker ps -a
docker stop web
docker start web
docker rm web
docker rmi nginx:alpine
docker system prune -af

Volumes: ذخیره‌سازی پایدار

docker volume create web_data
docker run -d --name web -p 80:80 -v web_data:/usr/share/nginx/html nginx:alpine

Networking: اتصال سرویس‌ها

docker network create app_net
docker run -d --name db --network app_net \
-e POSTGRES_PASSWORD=secret \
-e POSTGRES_DB=app postgres:16-alpine

docker run -d --name app --network app_net \
-e DATABASE_URL=postgres://postgres:secret@db:5432/app youruser/yourapp:latest

Dockerfile: ساخت ایمیج سفارشی

# مرحله ساخت
FROM node:20-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
# مرحله اجرا
FROM node:20-alpine
ENV NODE_ENV=production
WORKDIR /app
COPY --from=build /app /app
EXPOSE 3000
CMD ["node", "server.js"]

Compose: مدیریت چند سرویس

services:
  db:
    image: postgres:16-alpine
    environment:
      POSTGRES_DB: app
      POSTGRES_USER: app
      POSTGRES_PASSWORD: please-change
    volumes:
      - db_data:/var/lib/postgresql/data

  app:
    build: ./app
    environment:
      DATABASE_URL: postgres://app:please-change@db:5432/app
    depends_on:
      - db

  web:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
    depends_on:
      - app

volumes:
  db_data:

سناریوهای آماده

استقرار n8n

services:
  n8n:
    image: n8nio/n8n:latest
    ports:
      - "5678:5678"
    environment:
      - N8N_HOST=n8n.example.com
      - N8N_PORT=5678
      - N8N_PROTOCOL=https
      - GENERIC_TIMEZONE=Asia/Tehran
    volumes:
      - n8n_data:/home/node/.n8n
volumes:
  n8n_data:

ربات تلگرام

services:
  bot:
    build: ./bot
    env_file:
      - .env

وب‌سایت استاتیک

services:
  web:
    image: nginx:alpine
    ports: ["80:80"]
    volumes:
      - ./public:/usr/share/nginx/html:ro

بهترین شیوه‌ها

  • استفاده از تصاویر سبک (Alpine)
  • Multi-stage build
  • اجرای کاربر غیر-ریشه
  • نسخه‌گذاری ایمیج‌ها
  • استفاده از متغیرهای محیطی و Secrets
  • مانیتورینگ و بکاپ ولوم‌ها

امنیت Docker

  • آپدیت منظم Docker و سیستم‌عامل
  • محدودیت منابع برای کانتینرها
  • فعال‌سازی AppArmor/SELinux
  • استفاده از Docker Content Trust

دیپلوی روی سرور (CI/CD)

با GitHub Actions می‌توانید ایمیج بسازید، به رجیستری پوش کنید و روی سرور اجرا کنید.

خطایابی سریع

docker ps -a
docker logs -f 
docker exec -it  sh
docker inspect 
docker compose logs -f

پرسش‌های متداول

  • فرق VM و کانتینر؟ کانتینر سبک‌تر و سریع‌تر است چون کرنل میزبان را استفاده می‌کند.
  • آیا داکر برای تولید مناسب است؟ بله، با رعایت امنیت و مانیتورینگ.
  • چه زمانی به Kubernetes برویم؟ وقتی نیاز به مقیاس‌پذیری و چند سرور دارید.