آموزش استفاده از Docker Compose

https://negarnovin.com/docs/learning-to-use-docker-compose/ · آخرین به‌روزرسانی: · نویسنده: نگارنوین · سایت: نگارنوین · 21 دقیقه مطالعه

📌 خلاصه (TL;DR)

آموزش استفاده از Docker Compose اموزش کامل داکر کامپوز Learning to use Docker Compose این مقاله توسط تیم نگارنوین تهیه شده است

📊 حقایق کلیدی

URLhttps://negarnovin.com/docs/learning-to-use-docker-compose/
تاریخ انتشار2026-06-14
آخرین به‌روزرسانی2026-07-29
نویسندهنگارنوین
ناشرنگارنوین
زبانفارسی (fa-IR)
تعداد کلمات4010
نوع صفحهبرگه

🛒 محصول و قیمت

نام محصول🚀 Docker Compose در حال اجراست!
قیمت2000 IRR
موجودیInStock
برندنگارنوین
دسته‌بندیserver
SKUVPS-36865

📄 محتوای کامل

# آموزش جامع استفاده از Docker Compose

راهنمای گام به گام و حرفه‌ای

سرور مجازی فرانسه

“`
نگارنوین ارائه دهنده سرور مجازی نامحدود

سرور مجازی ترافیک نامحدود


“`

## مقدمه

Docker Compose یکی از قدرتمندترین ابزارهای مدیریت کانتینرهای Docker است که به توسعه‌دهندگان و مدیران سیستم اجازه می‌دهد چندین سرویس را به صورت همزمان تعریف، پیکربندی و اجرا کنند. با استفاده از یک فایل YAML ساده، می‌توانید کل محیط برنامه‌ی خود را از یک وب‌سرور گرفته تا پایگاه داده و کش تعریف کرده و با یک دستور راه‌اندازی کنید.

در این آموزش جامع، همه چیز را از نصب تا استقرار پروژه‌های واقعی یاد می‌گیرید.

## پیش‌نیازها

قبل از شروع، موارد زیر را آماده کنید:

– **سیستم عامل:** Ubuntu ۲۲.۰۴ یا بالاتر (یا هر توزیع لینوکسی)
– **Docker Engine:** نسخه ۲۰.۱۰ یا بالاتر
– **دسترسی Root یا Sudo**
– **آشنایی پایه با خط فرمان لینوکس**

آموزش استفاده از Docker Compose

> 💡 **توجه:** برای اجرای Docker و Docker Compose به یک سرور با منابع کافی نیاز دارید.

## گام اول: نصب Docker

### ۱.۱ به‌روزرسانی سیستم

“`bash
sudo apt update && sudo apt upgrade -y
“`

### ۱.۲ نصب پیش‌نیازهای Docker

“`bash
sudo apt install -y
ca-certificates
curl
gnupg
lsb-release
“`

### ۱.۳ اضافه کردن کلید GPG رسمی Docker

“`bash
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg |
sudo gpg –dearmor -o /etc/apt/keyrings/docker.gpg
“`

### ۱.۴ اضافه کردن مخزن Docker

“`bash
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
“`

### ۱.۵ نصب Docker Engine

“`bash
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
“`

### ۱.۶ بررسی نصب موفق Docker

“`bash
docker –version
“`

خروجی مورد انتظار:

“`
Docker version 24.0.x, build xxxxxxx
“`

### ۱.۷ اضافه کردن کاربر به گروه Docker (اختیاری اما توصیه می‌شود)

“`bash
sudo usermod -aG docker $USER
newgrp docker
“`

## گام دوم: نصب Docker Compose

Docker Compose از نسخه Docker Desktop به صورت پیش‌فرض همراه با Docker ارائه می‌شود، اما در سرورهای لینوکسی باید جداگانه نصب شود.

### ۲.۱ دانلود آخرین نسخه Docker Compose

“`bash
sudo curl -L
“https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)”
-o /usr/local/bin/docker-compose
“`

### ۲.۲ تنظیم مجوز اجرا

“`bash
sudo chmod +x /usr/local/bin/docker-compose
“`

### ۲.۳ تأیید نصب موفق

“`bash
docker-compose –version
“`

خروجی:

“`
Docker Compose version v2.x.x
“`

> 🔔 **نکته:** در نسخه‌های جدید Docker، می‌توانید از دستور `docker compose` (بدون خط تیره) هم استفاده کنید.

## گام سوم: ساختار فایل docker-compose.yml

فایل `docker-compose.yml` قلب Docker Compose است. این فایل با فرمت YAML نوشته می‌شود و تمام سرویس‌ها، شبکه‌ها و والیوم‌ها را تعریف می‌کند.

### ساختار پایه‌ای

“`yaml
version: ‘3.8’

services:
نام-سرویس:
image: نام-ایمیج
ports:
– “پورت-هاست:پورت-کانتینر”
volumes:
– مسیر-هاست:مسیر-کانتینر
environment:
– VARIABLE=value
networks:
– نام-شبکه

networks:
نام-شبکه:
driver: bridge

volumes:
نام-والیوم:
“`

### توضیح بخش‌های اصلی

| بخش | توضیح |
|—–|——-|
| `version` | نسخه فرمت Compose |
| `services` | تعریف کانتینرها و تنظیمات آن‌ها |
| `networks` | شبکه‌های مجازی بین سرویس‌ها |
| `volumes` | فضای ذخیره‌سازی پایدار |

## گام چهارم: پروژه عملی اول – وب‌سرور Nginx ساده

بیایید با یک مثال ساده شروع کنیم.

### ۴.۱ ایجاد پوشه پروژه

“`bash
mkdir ~/my-nginx-project
cd ~/my-nginx-project
“`

### ۴.۲ ایجاد فایل HTML

“`bash
mkdir html
cat > html/index.html << ‘EOF’

🚀 Docker Compose در حال اجراست!

این صفحه توسط Nginx در داخل Docker سرویس می‌دهد

EOF
“`

### ۴.۳ ایجاد فایل docker-compose.yml

“`bash
cat > docker-compose.yml << ‘EOF’ version: ‘۳.۸’ services: webserver: image: nginx:latest container_name: my-nginx ports: – “۸۰۸۰:۸۰” volumes: – ./html:/usr/share/nginx/html:ro restart: unless-stopped EOF “` ### ۴.۴ اجرای پروژه “`bash docker-compose up -d “` خروجی: “` [+] Running ۲/۲ ✔ Network my-nginx-project_default Created ✔ Container my-nginx Started “` ### ۴.۵ تست وب‌سرور “`bash curl http://localhost:۸۰۸۰ “` یا در مرورگر آدرس `http://IP-سرور:۸۰۸۰` را باز کنید. — ## گام پنجم: پروژه عملی دوم – وردپرس + MySQL این مثال واقعی‌ترین کاربرد Docker Compose را نشان می‌دهد. ### ۵.۱ ایجاد پوشه پروژه “`bash mkdir ~/wordpress-docker cd ~/wordpress-docker “` ### ۵.۲ ایجاد فایل .env (متغیرهای محیطی) “`bash cat > .env << ‘EOF’ # MySQL Configuration MYSQL_ROOT_PASSWORD=RootPass@۲۰۲۴ MYSQL_DATABASE=wordpress_db MYSQL_USER=wp_user MYSQL_PASSWORD=WpPass@۲۰۲۴ # WordPress Configuration WORDPRESS_DB_HOST=db:۳۳۰۶ WORDPRESS_DB_NAME=wordpress_db WORDPRESS_DB_USER=wp_user WORDPRESS_DB_PASSWORD=WpPass@۲۰۲۴ WORDPRESS_TABLE_PREFIX=wp_ EOF “` ### ۵.۳ ایجاد فایل docker-compose.yml “`bash cat > docker-compose.yml << ‘EOF’ version: ‘۳.۸’ services: db: image: mysql:۸.۰ container_name: wordpress-mysql restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} MYSQL_DATABASE: ${MYSQL_DATABASE} MYSQL_USER: ${MYSQL_USER} MYSQL_PASSWORD: ${MYSQL_PASSWORD} volumes: – db_data:/var/lib/mysql networks: – wordpress-network healthcheck: test: [“CMD”, “mysqladmin”, “ping”, “-h”, “localhost”] timeout: 20s retries: ۱۰ wordpress: image: wordpress:latest container_name: wordpress-app restart: unless-stopped depends_on: db: condition: service_healthy ports: – “۸۰۸۰:۸۰” environment: WORDPRESS_DB_HOST: ${WORDPRESS_DB_HOST} WORDPRESS_DB_NAME: ${WORDPRESS_DB_NAME} WORDPRESS_DB_USER: ${WORDPRESS_DB_USER} WORDPRESS_DB_PASSWORD: ${WORDPRESS_DB_PASSWORD} WORDPRESS_TABLE_PREFIX: ${WORDPRESS_TABLE_PREFIX} volumes: – wordpress_data:/var/www/html networks: – wordpress-network phpmyadmin: image: phpmyadmin:latest container_name: wordpress-phpmyadmin restart: unless-stopped depends_on: – db ports: – “۸۰۸۱:۸۰” environment: PMA_HOST: db PMA_PORT: ۳۳۰۶ MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} networks: – wordpress-network volumes: db_data: driver: local wordpress_data: driver: local networks: wordpress-network: driver: bridge EOF “` ### ۵.۴ راه‌اندازی پروژه “`bash docker-compose up -d “` ### ۵.۵ مشاهده وضعیت سرویس‌ها “`bash docker-compose ps “` خروجی: “` NAME IMAGE STATUS PORTS wordpress-mysql mysql:۸.۰ Up (healthy) ۳۳۰۶/tcp wordpress-app wordpress:latest Up ۰.۰.۰.۰:۸۰۸۰->۸۰/tcp
wordpress-phpmyadmin phpmyadmin:latest Up 0.0.0.0:8081->80/tcp
“`

“`
✅ نگارنوین ارائه دهنده سرور مجازی نامحدود
برای اجرای پروژه‌های Docker Compose به سرور پرقدرت نیاز دارید!
👉 https://negarnovin.com/unlimited-traffic-virtual-server/
“`

## گام ششم: پروژه عملی سوم – اپلیکیشن Node.js + Redis + Nginx

### ۶.۱ ساختار پروژه

“`bash
mkdir ~/node-redis-app
cd ~/node-redis-app
mkdir app nginx
“`

### ۶.۲ ایجاد اپلیکیشن Node.js

“`bash
cat > app/package.json << ‘EOF’ { “name”: “docker-compose-demo”, “version”: “1.0.0”, “description”: “Demo App with Redis”, “main”: “server.js”, “scripts”: { “start”: “node server.js” }, “dependencies”: { “express”: “^4.18.0”, “redis”: “^4.6.0” } } EOF “` “`bash cat > app/server.js << ‘EOF’ const express = require(‘express’); const redis = require(‘redis’); const app = express(); const PORT = 3000; const client = redis.createClient({ url: ‘redis://redis:6379’ }); client.connect().catch(console.error); app.get(‘/’, async (req, res) => {
try {
const visits = await client.incr(‘visits’);
res.json({
message: ‘سلام از Docker Compose!’,
visits: visits,
timestamp: new Date().toISOString()
});
} catch (error) {
res.status(500).json({ error: error.message });
}
});

app.get(‘/health’, (req, res) => {
res.json({ status: ‘OK’, service: ‘node-app’ });
});

app.listen(PORT, () => {
console.log(`Server running on port ${PORT}`);
});
EOF
“`

### ۶.۳ ایجاد Dockerfile برای اپلیکیشن

“`bash
cat > app/Dockerfile << ‘EOF’ FROM node:۱۸-alpine WORKDIR /usr/src/app COPY package*.json ./ RUN npm install –production COPY . . EXPOSE ۳۰۰۰ CMD [“npm”, “start”] EOF “` ### ۶.۴ پیکربندی Nginx به عنوان Reverse Proxy “`bash cat > nginx/nginx.conf << ‘EOF’ upstream node_app { server app:۳۰۰۰; } server { listen ۸۰; server_name localhost; location / { proxy_pass http://node_app; proxy_http_version ۱.۱; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection ‘upgrade’; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_cache_bypass $http_upgrade; } location /health { proxy_pass http://node_app/health; } } EOF “` ### ۶.۵ ایجاد docker-compose.yml “`bash cat > docker-compose.yml << ‘EOF’
version: ‘3.8’

services:

app:
build:
context: ./app
dockerfile: Dockerfile
container_name: node-app
restart: unless-stopped
environment:
– NODE_ENV=production
networks:
– app-network
depends_on:
– redis

redis:
image: redis:7-alpine
container_name: app-redis
restart: unless-stopped
volumes:
– redis_data:/data
networks:
– app-network
command: redis-server –appendonly yes

nginx:
image: nginx:alpine
container_name: app-nginx
restart: unless-stopped
ports:
– “80:80”
volumes:
– ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf:ro
networks:
– app-network
depends_on:
– app

volumes:
redis_data:
driver: local

networks:
app-network:
driver: bridge

EOF
“`

### ۶.۶ Build و اجرا

“`bash
docker-compose up -d –build
“`

## گام هفتم: دستورات مهم Docker Compose

### ۷.۱ جدول کامل دستورات

| دستور | کاربرد |
|——-|———|
| `docker-compose up -d` | راه‌اندازی تمام سرویس‌ها در پس‌زمینه |
| `docker-compose up –build` | Build مجدد و راه‌اندازی |
| `docker-compose down` | متوقف کردن و حذف کانتینرها |
| `docker-compose down -v` | متوقف کردن + حذف والیوم‌ها |
| `docker-compose ps` | نمایش وضعیت سرویس‌ها |
| `docker-compose logs` | مشاهده لاگ‌های همه سرویس‌ها |
| `docker-compose logs -f app` | لاگ زنده سرویس مشخص |
| `docker-compose restart` | ری‌استارت همه سرویس‌ها |
| `docker-compose restart app` | ری‌استارت سرویس مشخص |
| `docker-compose stop` | توقف بدون حذف |
| `docker-compose start` | شروع مجدد سرویس‌های متوقف |
| `docker-compose pull` | دانلود آخرین ایمیج‌ها |
| `docker-compose build` | Build کردن سرویس‌ها |
| `docker-compose exec app sh` | ورود به shell کانتینر |
| `docker-compose scale app=۳` | مقیاس‌گذاری سرویس |

### ۷.۲ مدیریت لاگ‌ها

“`bash
# مشاهده لاگ همه سرویس‌ها
docker-compose logs

# لاگ زنده (Follow)
docker-compose logs -f

# لاگ با تعداد خط مشخص
docker-compose logs –tail=100

# لاگ یک سرویس خاص
docker-compose logs -f wordpress

# لاگ با timestamp
docker-compose logs -t
“`

### ۷.۳ اجرای دستور داخل کانتینر

“`bash
# ورود به bash کانتینر
docker-compose exec app bash

# اجرای دستور بدون ورود
docker-compose exec db mysql -u root -p

# اجرای دستور در سرویس Nginx
docker-compose exec nginx nginx -t
“`

## گام هشتم: مدیریت والیوم‌ها و شبکه‌ها

### ۸.۱ انواع والیوم

“`yaml
volumes:
# Named Volume (توصیه شده)
my-data:
driver: local

services:
app:
volumes:
# Named Volume
– my-data:/app/data

# Bind Mount (اتصال مستقیم به هاست)
– ./config:/app/config:ro

# Anonymous Volume
– /app/logs

# tmpfs (حافظه موقت)
– type: tmpfs
target: /tmp
“`

### ۸.۲ انواع شبکه

“`yaml
networks:
# شبکه Bridge (پیش‌فرض)
frontend:
driver: bridge

# شبکه Host
host-network:
driver: host

# شبکه Overlay (برای Swarm)
overlay-network:
driver: overlay

# شبکه خارجی از پیش ساخته شده
existing-network:
external: true
name: my-existing-network
“`

### ۸.۳ جداسازی شبکه‌ها برای امنیت بیشتر

“`yaml
version: ‘3.8’

services:
nginx:
image: nginx
networks:
– frontend # فقط به شبکه frontend دسترسی دارد

app:
image: my-app
networks:
– frontend # ارتباط با nginx
– backend # ارتباط با db

db:
image: mysql
networks:
– backend # فقط به شبکه backend دسترسی دارد

networks:
frontend:
backend:
“`

## گام نهم: متغیرهای محیطی و پیکربندی پیشرفته

### ۹.۱ روش‌های مختلف تعریف متغیر محیطی

“`yaml
services:
app:
environment:
# روش اول: key=value مستقیم
– DATABASE_URL=mysql://user:pass@db/mydb

# روش دوم: key:value
NODE_ENV: production

# روش سوم: از فایل .env
– API_KEY=${API_KEY}

# روش چهارم: env_file
env_file:
– .env
– ./config/production.env
“`

### ۹.۲ استفاده از چند فایل Compose

“`bash
# محیط توسعه
docker-compose -f docker-compose.yml
-f docker-compose.dev.yml
up -d

# محیط تولید
docker-compose -f docker-compose.yml
-f docker-compose.prod.yml
up -d
“`

**docker-compose.dev.yml:**
“`yaml
version: ‘3.8’

services:
app:
build:
target: development
volumes:
– .:/app
– /app/node_modules
environment:
– NODE_ENV=development
ports:
– “9229:9229” # debug port
“`

**docker-compose.prod.yml:**
“`yaml
version: ‘3.8’

services:
app:
build:
target: production
restart: always
environment:
– NODE_ENV=production
deploy:
resources:
limits:
cpus: ‘0.5’
memory: 512M
“`

## گام دهم: Healthcheck و وابستگی‌های سرویس

### ۱۰.۱ تعریف Healthcheck

“`yaml
services:
db:
image: mysql:8.0
healthcheck:
# دستور بررسی سلامت
test: [“CMD”, “mysqladmin”, “ping”, “-h”, “localhost”, “-u”, “root”, “-p${MYSQL_ROOT_PASSWORD}”]
interval: 30s # فاصله بین بررسی‌ها
timeout: 10s # حداکثر زمان انتظار
retries: ۵ # تعداد تلاش مجدد
start_period: 60s # زمان شروع اولیه

redis:
image: redis:alpine
healthcheck:
test: [“CMD”, “redis-cli”, “ping”]
interval: 10s
timeout: 5s
retries: 3

nginx:
image: nginx
healthcheck:
test: [“CMD”, “curl”, “-f”, “http://localhost/health”]
interval: 30s
timeout: 10s
retries: 3
“`

### ۱۰.۲ مدیریت وابستگی‌ها

“`yaml
services:
app:
depends_on:
db:
condition: service_healthy # منتظر سالم شدن DB
redis:
condition: service_healthy # منتظر سالم شدن Redis
migrations:
condition: service_completed_successfully # منتظر تکمیل

migrations:
image: my-app
command: npm run migrate
depends_on:
db:
condition: service_healthy
“`

“`
🌐 نگارنوین ارائه دهنده سرور مجازی نامحدود
سرور مجازی قدرتمند برای اجرای پروژه‌های Docker با پهنای باند نامحدود
👉 https://negarnovin.com/unlimited-traffic-virtual-server/
“`

## گام یازدهم: بهینه‌سازی و نکات امنیتی

### ۱۱.۱ محدود کردن منابع

“`yaml
services:
app:
image: my-app
deploy:
resources:
limits:
cpus: ‘۱.۰’ # حداکثر ۱ هسته CPU
memory: 512M # حداکثر ۵۱۲ مگابایت RAM
reservations:
cpus: ‘۰.۲۵’ # حداقل تضمین شده
memory: 128M
“`

### ۱۱.۲ سیاست ری‌استارت

“`yaml
services:
app:
restart: unless-stopped # توصیه شده برای production

# گزینه‌های دیگر:
# restart: no – هرگز ری‌استارت نشود
# restart: always – همیشه ری‌استارت شود
# restart: on-failure – فقط در صورت خطا
# restart: on-failure:۳ – حداکثر ۳ بار تلاش
“`

### ۱۱.۳ اجرا با کاربر غیر Root

“`yaml
services:
app:
image: my-app
user: “1000:1000” # UID:GID

nginx:
image: nginx:alpine
security_opt:
– no-new-privileges:true
read_only: true
tmpfs:
– /tmp
– /var/run
– /var/cache/nginx
“`

### ۱۱.۴ بهینه‌سازی Dockerfile

“`dockerfile
# استفاده از Multi-Stage Build
FROM node:18-alpine AS builder

WORKDIR /app
COPY package*.json ./
RUN npm ci –only=production

COPY . .
RUN npm run build

# مرحله نهایی – کوچک‌ترین ایمیج
FROM node:18-alpine AS production

RUN addgroup -S appgroup && adduser -S appuser -G appgroup

WORKDIR /app
COPY –from=builder –chown=appuser:appgroup /app/dist ./dist
COPY –from=builder –chown=appuser:appgroup /app/node_modules ./node_modules

USER appuser
EXPOSE 3000

CMD [“node”, “dist/server.js”]
“`

## گام دوازدهم: Scaling و Load Balancing

### ۱۲.۱ مقیاس‌گذاری سرویس‌ها

“`bash
# اجرای ۳ نمونه از سرویس app
docker-compose up -d –scale app=3

# بررسی
docker-compose ps
“`

### ۱۲.۲ پیکربندی Load Balancer با Nginx

“`yaml
version: ‘3.8’

services:
nginx:
image: nginx:alpine
ports:
– “80:80”
volumes:
– ./nginx.conf:/etc/nginx/nginx.conf:ro
depends_on:
– app

app:
build: .
expose:
– “3000”
environment:
– NODE_ENV=production

volumes:
app_logs:
“`

“`nginx
# nginx.conf
upstream app_servers {
least_conn; # الگوریتم Load Balancing
server app_1:3000;
server app_2:3000;
server app_3:3000;
}

server {
listen 80;

location / {
proxy_pass http://app_servers;
}
}
“`

## گام سیزدهم: مانیتورینگ با Docker Compose

“`yaml
version: ‘3.8’

services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
volumes:
– ./prometheus.yml:/etc/prometheus/prometheus.yml
– prometheus_data:/prometheus
ports:
– “9090:9090”
networks:
– monitoring

grafana:
image: grafana/grafana:latest
container_name: grafana
volumes:
– grafana_data:/var/lib/grafana
ports:
– “3000:3000”
environment:
– GF_SECURITY_ADMIN_PASSWORD=admin@secure
depends_on:
– prometheus
networks:
– monitoring

cadvisor:
image: gcr.io/cadvisor/cadvisor:latest
container_name: cadvisor
volumes:
– /:/rootfs:ro
– /var/run:/var/run:ro
– /sys:/sys:ro
– /var/lib/docker/:/var/lib/docker:ro
ports:
– “8080:8080”
networks:
– monitoring

volumes:
prometheus_data:
grafana_data:

networks:
monitoring:
driver: bridge
“`

## گام چهاردهم: رفع اشکال و عیب‌یابی

### ۱۴.۱ دستورات دیباگ

“`bash
# مشاهده لاگ کامل یک سرویس
docker-compose logs –tail=200 -f app

# بررسی کانفیگ نهایی
docker-compose config

# اعتبارسنجی فایل docker-compose.yml
docker-compose config –quiet
echo $? # ۰ = صحیح

# مشاهده اطلاعات کانتینر
docker inspect container-name

# مشاهده مصرف منابع
docker stats

# بررسی شبکه‌ها
docker network ls
docker network inspect project_app-network

# بررسی والیوم‌ها
docker volume ls
docker volume inspect project_db_data
“`

### ۱۴.۲ مشکلات رایج و راه‌حل

**مشکل ۱: Port already in use**
“`bash
# یافتن فرآیند استفاده کننده از پورت
sudo lsof -i :8080
# یا
sudo netstat -tulpn | grep :8080

# کشتن فرآیند
sudo kill -9 PID
“`

**مشکل ۲: Permission denied در والیوم**
“`bash
# تنظیم مجوز صحیح
sudo chown -R 1000:1000 ./data

# یا در docker-compose.yml
volumes:
– type: bind
source: ./data
target: /app/data
“`

**مشکل ۳: سرویس‌ها نمی‌توانند یکدیگر را پیدا کنند**
“`bash
# بررسی شبکه
docker-compose exec app ping db

# بررسی DNS داخلی
docker-compose exec app nslookup db
“`

**مشکل ۴: کمبود فضای دیسک**
“`bash
# پاکسازی کامل Docker
docker system prune -a –volumes

# فقط کانتینرهای متوقف
docker container prune

# فقط ایمیج‌های استفاده نشده
docker image prune -a
“`

## گام پانزدهم: بهترین شیوه‌ها (Best Practices)

### ✅ موارد توصیه شده

“`yaml
version: ‘3.8’

services:
app:
# ۱. همیشه نسخه دقیق ایمیج را مشخص کنید
image: node:18.17.0-alpine

# ۲. نام container را مشخص کنید
container_name: my-app

# ۳. متغیرهای محیطی را از فایل .env بخوانید
env_file: .env

# ۴. محدودیت منابع تعریف کنید
deploy:
resources:
limits:
memory: 256M

# ۵. Healthcheck تعریف کنید
healthcheck:
test: [“CMD”, “curl”, “-f”, “http://localhost:3000/health”]
interval: 30s
timeout: 10s
retries: 3

# ۶. سیاست ری‌استارت مناسب
restart: unless-stopped

# ۷. لاگینگ را پیکربندی کنید
logging:
driver: “json-file”
options:
max-size: “10m”
max-file: “3”
“`

### ❌ موارد اجتناب شده

“`yaml
# ❌ اشتباه – استفاده از latest بدون نسخه
image: node:latest

# ❌ اشتباه – رمزعبور مستقیم در فایل
environment:
– DB_PASSWORD=mypassword

# ❌ اشتباه – mount کامل /
volumes:
– /:/host

# ❌ اشتباه – اجرا با root
user: root
“`

## جمع‌بندی نهایی

### چک‌لیست استقرار در Production

– [ ] فایل `.env` در `.gitignore` قرار دارد
– [ ] نسخه دقیق تمام ایمیج‌ها مشخص شده
– [ ] Healthcheck برای همه سرویس‌ها تعریف شده
– [ ] محدودیت منابع تنظیم شده
– [ ] شبکه‌های جداگانه برای frontend/backend
– [ ] والیوم‌های named برای داده‌های persistent
– [ ] سیاست ری‌استارت مناسب
– [ ] لاگینگ پیکربندی شده
– [ ] کاربر غیر root برای کانتینرها
– [ ] Backup از والیوم‌ها برنامه‌ریزی شده

## منابع بیشتر

– [مستندات رسمی Docker Compose](https://docs.docker.com/compose/)
– [Docker Hub](https://hub.docker.com/)
– [Docker Security Best Practices](https://docs.docker.com/develop/security-best-practices/)

“`
🚀 نگارنوین ارائه دهنده سرور مجازی نامحدود
پروژه‌های Docker Compose خود را روی سرورهای قدرتمند نگارنوین با پهنای باند نامحدود اجرا کنید!
👉 https://negarnovin.com/unlimited-traffic-virtual-server/
“`

*این مقاله توسط تیم نگارنوین تهیه و ترجمه شده است. برای دریافت سرور مجازی با پهنای باند نامحدود و اجرای پروژه‌های Docker، به [نگارنوین](https://negarnovin.com/unlimited-traffic-virtual-server/) مراجعه کنید.*

حالا اینو برای ویرایشگر کلاسیک وردپرس اینجا میذارم:

# 📋 نسخه HTML برای ویرایشگر کلاسیک وردپرس

“`html

مقدمه

Docker Compose یکی از قدرتمندترین ابزارهای مدیریت کانتینرهای Docker است که به توسعه‌دهندگان و مدیران سیستم اجازه می‌دهد چندین سرویس را به صورت همزمان تعریف، پیکربندی و اجرا کنند. با استفاده از یک فایل YAML ساده، می‌توانید کل محیط برنامه‌ی خود را از یک وب‌سرور گرفته تا پایگاه داده و کش تعریف کرده و با یک دستور راه‌اندازی کنید.

🌐 نگارنوین ارائه دهنده سرور مجازی نامحدود
برای اجرای پروژه‌های Docker Compose به سرور پرقدرت با پهنای باند نامحدود نیاز دارید!

پیش‌نیازها

  • سیستم عامل: Ubuntu ۲۲.۰۴ یا بالاتر
  • Docker Engine: نسخه ۲۰.۱۰ یا بالاتر
  • دسترسی Root یا Sudo
  • آشنایی پایه با خط فرمان لینوکس

گام اول: نصب Docker

۱.۱ به‌روزرسانی سیستم

sudo apt update && sudo apt upgrade -y

۱.۲ نصب پیش‌نیازهای Docker

sudo apt install -y 
    ca-certificates 
    curl 
    gnupg 
    lsb-release

۱.۳ اضافه کردن کلید GPG رسمی Docker

sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | 
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

۱.۴ اضافه کردن مخزن Docker

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

۱.۵ نصب Docker Engine

sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io

۱.۶ بررسی نصب موفق Docker

docker --version

۱.۷ اضافه کردن کاربر به گروه Docker

sudo usermod -aG docker $USER
newgrp docker

گام دوم: نصب Docker Compose

۲.۱ دانلود آخرین نسخه

sudo curl -L 
"https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" 
-o /usr/local/bin/docker-compose

۲.۲ تنظیم مجوز اجرا

sudo chmod +x /usr/local/bin/docker-compose

۲.۳ تأیید نصب موفق

docker-compose --version

گام سوم: ساختار فایل docker-compose.yml

version: '3.8'

services:
  نام-سرویس:
    image: نام-ایمیج
    ports:
      - "پورت-هاست:پورت-کانتینر"
    volumes:
      - مسیر-هاست:مسیر-کانتینر
    environment:
      - VARIABLE=value
    networks:
      - نام-شبکه

networks:
  نام-شبکه:
    driver: bridge

volumes:
  نام-والیوم:
بخش توضیح
version نسخه فرمت Compose
services تعریف کانتینرها و تنظیمات آن‌ها
networks شبکه‌های مجازی بین سرویس‌ها
volumes فضای ذخیره‌سازی پایدار

گام چهارم: پروژه عملی – وب‌سرور Nginx ساده

ایجاد پوشه پروژه

mkdir ~/my-nginx-project
cd ~/my-nginx-project

ایجاد فایل docker-compose.yml

version: '3.8'

services:
  webserver:
    image: nginx:latest
    container_name: my-nginx
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html:ro
    restart: unless-stopped

اجرای پروژه

docker-compose up -d

گام پنجم: پروژه عملی – وردپرس + MySQL

فایل .env

MYSQL_ROOT_PASSWORD=RootPass@2024
MYSQL_DATABASE=wordpress_db
MYSQL_USER=wp_user
MYSQL_PASSWORD=WpPass@2024

WORDPRESS_DB_HOST=db:3306
WORDPRESS_DB_NAME=wordpress_db
WORDPRESS_DB_USER=wp_user
WORDPRESS_DB_PASSWORD=WpPass@2024

فایل docker-compose.yml

version: '3.8'

services:

  db:
    image: mysql:8.0
    container_name: wordpress-mysql
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
    volumes:
      - db_data:/var/lib/mysql
    networks:
      - wordpress-network
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      timeout: 20s
      retries: 10

  wordpress:
    image: wordpress:latest
    container_name: wordpress-app
    restart: unless-stopped
    depends_on:
      db:
        condition: service_healthy
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_HOST: ${WORDPRESS_DB_HOST}
      WORDPRESS_DB_NAME: ${WORDPRESS_DB_NAME}
      WORDPRESS_DB_USER: ${WORDPRESS_DB_USER}
      WORDPRESS_DB_PASSWORD: ${WORDPRESS_DB_PASSWORD}
    volumes:
      - wordpress_data:/var/www/html
    networks:
      - wordpress-network

  phpmyadmin:
    image: phpmyadmin:latest
    container_name: wordpress-phpmyadmin
    ports:
      - "8081:80"
    environment:
      PMA_HOST: db
    networks:
      - wordpress-network

volumes:
  db_data:
  wordpress_data:

networks:
  wordpress-network:
    driver: bridge
✅ نگارنوین ارائه دهنده سرور مجازی نامحدود
سرور مجازی قدرتمند با پهنای باند نامحدود برای میزبانی پروژه‌های Docker Compose

گام ششم: دستورات مهم Docker Compose

دستور کاربرد
docker-compose up -d راه‌اندازی در پس‌زمینه
docker-compose down متوقف و حذف کانتینرها
docker-compose ps نمایش وضعیت سرویس‌ها
docker-compose logs -f مشاهده لاگ زنده
docker-compose restart ری‌استارت همه سرویس‌ها
docker-compose exec app sh ورود به shell کانتینر
docker-compose pull دانلود آخرین ایمیج‌ها
docker-compose build Build کردن سرویس‌ها
docker-compose scale app=3 مقیاس‌گذاری سرویس

گام هفتم: مدیریت والیوم‌ها

volumes:
  my-data:
    driver: local

services:
  app:
    volumes:
      # Named Volume
      - my-data:/app/data
      # Bind Mount
      - ./config:/app/config:ro
      # Anonymous Volume
      - /app/logs

گام هشتم: Healthcheck و وابستگی‌ها

services:
  db:
    image: mysql:8.0
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 30s
      timeout: 10s
      retries: 5
      start_period: 60s

  app:
    depends_on:
      db:
        condition: service_healthy

گام نهم: بهینه‌سازی و امنیت

services:
  app:
    image: node:18.17.0-alpine
    container_name: my-app
    env_file: .env
    deploy:
      resources:
        limits:
          cpus: '1.0'
          memory: 512M
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
      interval: 30s
      timeout: 10s
      retries: 3
    restart: unless-stopped
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

گام دهم: رفع اشکال و عیب‌یابی

# مشاهده لاگ کامل
docker-compose logs --tail=200 -f app

# بررسی کانفیگ
docker-compose config

# مشاهده مصرف منابع
docker stats

# پاکسازی کامل
docker system prune -a --volumes

چک‌لیست استقرار در Production

  • ☑ فایل .env در .gitignore قرار دارد
  • ☑ نسخه دقیق تمام ایمیج‌ها مشخص شده
  • ☑ Healthcheck برای همه سرویس‌ها تعریف شده
  • ☑ محدودیت منابع تنظیم شده
  • ☑ شبکه‌های جداگانه frontend/backend
  • ☑ والیوم‌های named برای داده‌های persistent
  • ☑ سیاست ری‌استارت مناسب
  • ☑ لاگینگ پیکربندی شده
  • ☑ کاربر غیر root برای کانتینرها
  • ☑ Backup از والیوم‌ها برنامه‌ریزی شده

🚀 نگارنوین ارائه دهنده سرور مجازی نامحدود

پروژه‌های Docker Compose خود را روی سرورهای قدرتمند نگارنوین با پهنای باند نامحدود اجرا کنید!
👈 مشاهده سرور مجازی نامحدود

این مقاله توسط تیم نگارنوین تهیه شده است. برای دریافت سرور مجازی با پهنای باند نامحدود و اجرای پروژه‌های Docker، به نگارنوین مراجعه کنید.

🖼️ تصاویر

🏷️ کلمات کلیدی

آموزش استفاده از Docker Compose، 🚀 Docker Compose در حال اجراست!، راهنمای گام به گام و حرفه‌ای، مقدمه، خرید آموزش استفاده از Docker Compose، قیمت آموزش استفاده از Docker Compose، بهترین آموزش استفاده از Docker Compose

🧩 JSON-LD

{"@context":"https://schema.org","@type":"WebPage","headline":"آموزش استفاده از Docker Compose","url":"https://negarnovin.com/docs/learning-to-use-docker-compose/","datePublished":"2026-06-14T07:23:41+03:30","dateModified":"2026-07-29T12:32:53+03:30","author":{"@type":"Person","name":"نگارنوین"},"publisher":{"@type":"Organization","name":"نگارنوین"},"inLanguage":"fa-IR","description":"آموزش استفاده از Docker Compose اموزش کامل داکر کامپوز Learning to use Docker Compose این مقاله توسط تیم نگارنوین تهیه شده است"}