🐳 داکر

Multilingual DevOps cheat sheet: Linux, Docker, Git, Kubernetes, Helm, Terraform, practical scenarios & templates.
منتشرشده

August 31, 2025

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

📦 دستورات پایه

دستور

مثال

توضیح

docker دستور اصلی CLI داکر برای اجرای زیردستورات و مدیریت کانتینرها، ایمیج‌ها، شبکه‌ها و حجم‌ها
docker version نمایش نسخه نصب‌شده داکر (کلاینت و سرور). مفید برای بررسی نصب
docker version --format '{{.Client.APIVersion}}'

نمایش فقط نسخه API کلاینت داکر

docker version --format '{{.Server.Version}}'

نمایش فقط نسخه سرور (Engine) داکر

docker version --format '{{json .}}'

خروجی اطلاعات کامل نسخه در فرمت JSON

docker system info نمایش اطلاعات کلی سیستم داکر: تعداد کانتینرها، ایمیج‌ها و منابع
docker info

نمایش داده‌های داکر: نسخه‌ها، شبکه‌ها، تعداد کانتینرها و ایمیج‌ها

docker info --format '{{json .}}'

خروجی اطلاعات در JSON — مفید برای خودکارسازی

docker info --format '{{.NCPU}} CPUs, {{.MemTotal}} bytes RAM'

نمایش تعداد CPUها و حافظه کل

docker info --format '{{.Driver}}'

نمایش درایور ذخیره‌سازی مورد استفاده توسط داکر

docker image pull دانلود یک ایمیج از Docker Hub یا رجیستری دیگر. کانتینرها بدون ایمیج اجرا نمی‌شوند
docker pull ubuntu

دانلود آخرین ایمیج Ubuntu

docker pull nginx:alpine

دانلود ایمیج سبک Nginx بر پایه Alpine Linux

docker pull redis:7

دانلود ایمیج Redis نسخه 7

docker container run ایجاد و اجرای یک کانتینر جدید از یک ایمیج
docker run -it ubuntu bash

اجرای Ubuntu با ترمینال Bash تعاملی

docker run -d nginx

اجرای Nginx در حالت detached (پس‌زمینه)

docker run -p 8080:80 nginx

اجرای Nginx و اتصال پورت 80 کانتینر به پورت 8080 میزبان

docker container ls لیست کانتینرهای در حال اجرا
docker ps

نمایش فقط کانتینرهای در حال اجرا

docker ps -a

نمایش همه کانتینرها، شامل متوقف‌شده‌ها

docker ps --format '{{.Names}}'

خروجی فقط نام کانتینرها

docker container start شروع یک یا چند کانتینر متوقف‌شده
docker start container_name

شروع یک کانتینر با نام

docker start $(docker ps -aq)

شروع همه کانتینرها

docker start -ai container_name

شروع کانتینر و اتصال ترمینال تعاملی

docker container stop توقف یک کانتینر در حال اجرا
docker stop container_name

توقف یک کانتینر با نام

docker stop $(docker ps -q)

توقف همه کانتینرهای در حال اجرا

docker stop -t 5 container_name

توقف یک کانتینر با دادن 5 ثانیه برای پایان پردازه‌ها

docker container restart راه‌اندازی مجدد یک کانتینر
docker restart container_name

راه‌اندازی مجدد یک کانتینر مشخص

docker restart $(docker ps -q)

راه‌اندازی مجدد همه کانتینرهای در حال اجرا

docker restart -t 10 container_name

راه‌اندازی مجدد یک کانتینر با تأخیر 10 ثانیه‌ای

docker container rm حذف یک کانتینر
docker rm container_name

حذف یک کانتینر متوقف‌شده خاص

docker rm $(docker ps -aq)

حذف همه کانتینرهای متوقف‌شده

docker rm -f container_name

حذف اجباری یک کانتینر در حال اجرا

docker image ls لیست ایمیج‌های دانلودشده
docker images

نمایش همه ایمیج‌ها روی میزبان

docker images -a

نمایش همه ایمیج‌ها شامل لایه‌های میانی

docker images --format '{{.Repository}}:{{.Tag}}'

خروجی فقط نام‌ها و تگ‌های ایمیج

docker image rm حذف یک یا چند ایمیج از حافظه محلی
docker rmi test1:latest

حذف ایمیج با تگ latest از مخزن test1

docker rmi 1a2b3c4d5e6f

حذف ایمیج با شناسه آن

docker rmi $(docker images -q)

حذف همه ایمیج‌ها (با احتیاط استفاده کنید!)

🔁 مدیریت کانتینر

دستور

مثال

توضیح

docker container exec اجرای یک دستور داخل کانتینر در حال اجرا
docker exec -it container bash

اجرای یک شل bash تعاملی داخل کانتینر با نام container

docker exec container ls /app

اجرای دستور ls در دایرکتوری /app داخل کانتینر

docker exec -d container touch /tmp/testfile

اجرای یک دستور در کانتینر در حالت detached (بدون انتظار)

docker container logs مشاهده لاگ‌های کانتینر
docker logs container

نمایش همه لاگ‌های کانتینر container

docker logs -f container

دنبال کردن لاگ‌های کانتینر به صورت زنده

docker logs --tail 50 container

نمایش 50 خط آخر لاگ‌ها

docker inspect بازیابی اطلاعات دقیق JSON درباره یک کانتینر یا ایمیج
docker inspect container

نمایش جزئیات کانتینر container

docker inspect --format '{{.NetworkSettings.IPAddress}}' container

نمایش آدرس IP کانتینر

docker container stats نمایش آمار مصرف منابع کانتینرها در زمان واقعی
docker stats

نمایش CPU، حافظه، شبکه و دیسک برای همه کانتینرها

docker stats container_name

نمایش آمار فقط یک کانتینر مشخص

docker stats --no-stream

نمایش یک عکس فوری از آمار و خروج

docker container rename تغییر نام یک کانتینر
docker rename old_name new_name

تغییر نام کانتینر از old_name به new_name

docker container cp کپی فایل‌ها بین کانتینر و میزبان
docker cp container:/src/file.txt ./file.txt

کپی یک فایل از کانتینر به دایرکتوری میزبان

docker cp ./config.yaml container:/app/config.yaml

کپی یک فایل از میزبان به کانتینر

docker cp CONTAINER:/var/logs/app.log - | tar x -O | grep "ERROR"

جریان فایل لاگ از کانتینر و فیلتر خطوط «ERROR» بدون ذخیره روی دیسک

docker container top نمایش پردازه‌های در حال اجرای داخل یک کانتینر
docker top container

نمایش پردازه‌های کانتینر با نام container

docker container pause مکث تمام پردازه‌ها در یک کانتینر
docker pause container

مکث کانتینر container

docker container unpause ازسرگیری کانتینر متوقف‌شده
docker unpause container

ازسرگیری کانتینر container

docker container update بروزرسانی تنظیمات کانتینر بدون راه‌اندازی مجدد
docker update --memory 500m container

محدود کردن استفاده حافظه کانتینر به 500 MB

🧱 ایمیج‌ها و Dockerfile

دستور

مثال

توضیح

docker buildx build ساخت یک ایمیج داکر از Dockerfile
docker build -t my_image .

ساخت یک ایمیج با تگ my_image از دایرکتوری جاری

docker build -t my_image:1.0 .

ساخت یک ایمیج با تگ نسخه 1.0

docker build --no-cache -t my_image .

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

docker container commit ایجاد یک ایمیج از وضعیت فعلی یک کانتینر
docker commit container my_img:v1

ایجاد ایمیج my_img با تگ v1 از کانتینر container

docker commit -m "Added config" container my_img:v2

ایجاد ایمیج با پیام commit

docker commit -a "John Doe" container my_img:latest

ایجاد ایمیج با مشخص کردن نویسنده

docker image tag افزودن یا تغییر یک تگ ایمیج
docker tag my_image myrepo/my_image:latest

افزودن یک تگ برای push به رجیستری myrepo

docker tag my_image:1.0 my_image:stable

ایجاد تگ stable برای ایمیج با تگ 1.0

docker tag my_image my_image:backup

افزودن تگ backup به یک ایمیج محلی

docker image push push یک ایمیج به Docker Hub یا رجیستری دیگر
docker push myrepo/my_image:latest

push ایمیج با تگ latest به مخزن myrepo

docker push myrepo/my_image:1.0

push ایمیج با تگ 1.0

docker push myrepo/my_image

push ایمیج با تگ پیش‌فرض latest

docker login احراز هویت در Docker Hub یا رجیستری دیگر
docker login

ورود تعاملی با نام کاربری و رمز عبور به Docker Hub

docker login myregistry.local:5000

ورود به رجیستری خصوصی

docker login -u username -p password

ورود با نام کاربری و رمز عبور (توصیه نمی‌شود)

docker logout خروج از Docker Hub یا رجیستری دیگر
docker logout

خروج از Docker Hub

docker logout myregistry.local:5000

خروج از رجیستری خصوصی

HEALTHCHECK دستور Dockerfile برای بررسی خودکار وضعیت سلامت کانتینر
HEALTHCHECK --interval=30s --timeout=5s --retries=3 CMD curl -f http://localhost/ || exit 1

افزودن بررسی سلامت برای اطمینان از سرویس هر 30 ثانیه

docker inspect --format='{{json .State.Health}}' container_name

بررسی وضعیت healthcheck یک کانتینر در حال اجرا

🔌 شبکه‌ها و حجم‌ها

دستور

مثال

توضیح

docker network ls لیست همه شبکه‌های داکر
docker network ls

نمایش همه شبکه‌های ایجادشده داکر

docker network ls --filter driver=bridge

نمایش فقط شبکه‌ها با درایور bridge

docker network ls --format '{{.Name}}'

نمایش فقط نام شبکه‌ها

docker network create ایجاد یک شبکه جدید داکر
docker network create my_net

ایجاد شبکه با نام my_net با تنظیمات پیش‌فرض

docker network create --driver bridge my_bridge_net

ایجاد شبکه با درایور bridge

docker network create --subnet=192.168.10.0/24 my_custom_net

ایجاد شبکه با subnet مشخص

docker network connect اتصال یک کانتینر به شبکه
docker network connect my_net container

اتصال کانتینر container به شبکه my_net

docker network connect --alias db_net my_net container

اتصال با alias به نام db_net

docker network disconnect قطع اتصال کانتینر از شبکه
docker network disconnect my_net container

قطع اتصال کانتینر container از شبکه my_net

docker volume ls لیست همه حجم‌های داکر
docker volume ls

نمایش همه حجم‌های داکر

docker volume ls --filter dangling=true

نمایش حجم‌های استفاده‌نشده

docker volume create ایجاد یک حجم جدید داکر
docker volume create my_vol

ایجاد حجم با نام my_vol

docker volume create --driver local --opt type=tmpfs my_tmp_vol

ایجاد یک حجم موقت با استفاده از tmpfs

docker volume inspect نمایش اطلاعات دقیق یک حجم
docker volume inspect my_vol

نمایش جزئیات حجم my_vol در JSON

docker volume rm حذف یک یا چند حجم
docker volume rm my_vol

حذف حجم با نام my_vol

docker volume rm $(docker volume ls -qf dangling=true)

حذف همه حجم‌های استفاده‌نشده

🧩 افزونه‌های داکر

دستور

مثال

توضیح

docker plugin ls لیست افزونه‌های نصب‌شده داکر
docker plugin ls

نمایش همه افزونه‌ها و وضعیتشان

docker plugin install نصب یک افزونه داکر از رجیستری
docker plugin install vieux/sshfs

نصب افزونه حجم SSHFS

docker plugin install store/weaveworks/net-plugin:latest_release

نصب افزونه شبکه Weave

docker plugin disable غیرفعال کردن یک افزونه نصب‌شده
docker plugin disable vieux/sshfs

غیرفعال کردن افزونه SSHFS

docker plugin enable فعال‌سازی یک افزونه غیرفعال‌شده
docker plugin enable vieux/sshfs

فعال‌سازی افزونه SSHFS

docker plugin rm حذف یک افزونه داکر
docker plugin rm vieux/sshfs

حذف افزونه SSHFS

📋 داکر کامپوز

دستور

مثال

توضیح

docker compose up راه‌اندازی کانتینرهایی که در docker-compose.yml تعریف شده‌اند
docker compose up

راه‌اندازی همه سرویس‌ها در شاخه جاری در حالت تعاملی

docker compose up -d

راه‌اندازی سرویس‌ها در حالت detached (پس‌زمینه)

docker compose up --build

ساخت ایمیج‌ها قبل از راه‌اندازی سرویس‌ها

docker compose down توقف و حذف کانتینرها، شبکه‌ها و حجم‌هایی که توسط up ساخته شده‌اند
docker compose down

توقف همه سرویس‌های در حال اجرا و حذف منابع مرتبط

docker compose down --volumes

حذف حجم‌هایی که توسط Compose ساخته شده‌اند

docker compose down --rmi all

حذف ایمیج‌هایی که توسط Compose ساخته شده‌اند

docker compose logs مشاهده لاگ‌های همه یا سرویس‌های خاص
docker compose logs

نمایش لاگ‌های همه سرویس‌ها

docker compose logs -f

دنبال کردن لاگ‌ها به صورت زنده

docker compose logs web

نمایش لاگ‌های فقط سرویس web

docker compose exec اجرای یک دستور داخل کانتینر سرویس در حال اجرا
docker compose exec web bash

ورود به شل bash تعاملی داخل کانتینر سرویس web

docker compose exec db ls /var/lib/postgresql

اجرای دستور ls داخل کانتینر پایگاه‌داده

docker compose exec -d worker touch /tmp/done

اجرای دستور در کانتینر worker در حالت detached

docker compose build ساخت یا بازسازی ایمیج‌های سرویس
docker compose build

ساخت همه ایمیج‌های تعریف‌شده در docker-compose.yml

docker compose build web

ساخت فقط ایمیج سرویس web

docker compose build --no-cache

ساخت ایمیج‌ها بدون استفاده از کش

docker compose ps نمایش وضعیت همه سرویس‌ها و کانتینرها
docker compose ps -a

نمایش همه کانتینرها شامل متوقف‌شده‌ها

docker compose ps --services

نمایش فقط نام سرویس‌ها

docker compose pull دانلود/بروزرسانی ایمیج‌های سرویس‌ها از رجیستری
docker compose pull web

pull ایمیج فقط برای سرویس web

docker compose pull --ignore-pull-failures

ادامه pull حتی اگر برخی ایمیج‌ها خطا داشته باشند

docker compose restart راه‌اندازی مجدد همه یا سرویس‌های مشخص
docker compose restart db

راه‌اندازی مجدد فقط سرویس db

docker compose restart -t 10

راه‌اندازی مجدد سرویس‌ها با زمان انتظار 10 ثانیه

docker compose config نمایش پیکربندی نهایی Compose در فرمت YAML
docker compose config --services

لیست همه سرویس‌ها در پیکربندی

docker compose config --volumes

لیست همه حجم‌های تعریف‌شده در پیکربندی

docker compose start شروع سرویس‌های متوقف‌شده بدون ایجاد دوباره کانتینرها
docker compose start web

شروع سرویس web

docker compose start db api

شروع چند سرویس به‌طور همزمان

docker compose stop توقف سرویس‌ها بدون حذف کانتینرها
docker compose stop web

توقف سرویس web

docker compose stop -t 5

توقف سرویس‌ها با زمان انتظار 5 ثانیه

📤 صادرات و واردات

دستور

مثال

توضیح

docker image save ذخیره یک یا چند ایمیج داکر در یک آرشیو tar برای واردات یا انتقال بعدی
docker save -o image.tar my_img:tag

ذخیره یک ایمیج داکر در فایل tar

docker save my_image > my_image.tar

روش جایگزین برای ذخیره ایمیج در فایل

docker save -o redis_latest.tar redis:latest

ذخیره ایمیج مشخص Redis در فایل

docker image load بارگذاری ایمیج‌های داکر از آرشیو tar ذخیره‌شده
docker load < image.tar

بارگذاری ایمیج داکر از فایل tar

docker load --input redis_latest.tar

بارگذاری ایمیج با مشخص کردن فایل به عنوان پارامتر

docker load --quiet < my_image.tar

بارگذاری ایمیج بدون نمایش پیشرفت

docker container export صادرات فایل‌سیستم یک کانتینر به صورت آرشیو tar بدون تاریخچه یا متادیتا
docker export container > file.tar

صادرات فایل‌سیستم کانتینر به آرشیو

docker export my_container > my_container_fs.tar

صادرات کانتینر بر اساس نام

docker export -o container_fs.tar container_id

صادرات بر اساس ID کانتینر با فلگ -o

docker image import ایجاد یک ایمیج جدید از آرشیو tar یک فایل‌سیستم
docker import file.tar new_img

وارد کردن فایل آرشیو به عنوان ایمیج جدید داکر

docker import https://example.com/image.tar my_new_image

وارد کردن ایمیج مستقیم از URL

docker import - my_image < file.tar

وارد کردن از ورودی استاندارد

🧹 پاکسازی و عیب‌یابی

دستور

مثال

توضیح

docker system df نمایش استفاده دیسک داکر: حجم‌ها، ایمیج‌ها، کانتینرها و کش ساخت
docker system df -v

خروجی جزئیات هر ایمیج، کانتینر و حجم

docker system df --format '{{json .}}'

خروجی اطلاعات در فرمت JSON

docker system prune حذف همه داده‌های استفاده‌نشده داکر: کانتینرهای متوقف‌شده، شبکه‌های بلااستفاده، ایمیج‌های dangling و کش ساخت
docker system prune -a

حذف ایمیج‌های بلااستفاده شامل لایه‌های میانی

docker system prune --volumes

حذف حجم‌های بلااستفاده به همراه منابع دیگر

docker image prune حذف ایمیج‌های بلااستفاده داکر شامل لایه‌های dangling
docker image prune -a

حذف همه ایمیج‌های بلااستفاده شامل dangling

docker image prune --filter "until=24h"

حذف ایمیج‌های قدیمی‌تر از 24 ساعت

docker container prune حذف کانتینرهای متوقف‌شده بر اساس فیلتر یا همه اگر مشخص نشود
docker container prune --filter "until=24h"

حذف کانتینرهای متوقف‌شده قدیمی‌تر از 24 ساعت

docker container prune --force

حذف بدون درخواست تأیید

🐝 داکر Swarm

دستور

مثال

توضیح

docker swarm init مقداردهی اولیه یک خوشه جدید Docker Swarm روی نود فعلی
docker swarm init --advertise-addr 192.168.1.100

مقداردهی اولیه خوشه با مشخص کردن آدرس IP

docker swarm init --listen-addr 0.0.0.0:2377

مقداردهی اولیه با پورت شنود مشخص

docker service create ایجاد یک سرویس جدید در خوشه Swarm
docker service create --name nginx nginx

ایجاد سرویس Nginx در Swarm

docker service create --replicas 3 --name web webserver

ایجاد سرویس با 3 replica

docker service create --name redis --publish 6379:6379 redis

ایجاد سرویس با نگاشت پورت

docker stack deploy استقرار یک پشته سرویس‌ها در خوشه Swarm بر اساس فایل Compose
docker stack deploy -c docker-compose.yml mystack

استقرار پشته از فایل compose

docker stack deploy --with-registry-auth -c compose.yml mystack

استقرار با ارسال احراز هویت رجیستری

docker stack deploy -c swarm-compose.yml mystack

استفاده از فایل compose جایگزین برای پشته

docker stack rm حذف یک یا چند پشته از خوشه Swarm
docker stack rm mystack

حذف پشته mystack

docker stack rm

حذف همه پشته‌ها (توصیه نمی‌شود)

docker stack rm mystack && docker swarm leave --force

حذف پشته و خروج از Swarm

💼 استفاده پیشرفته از داکر

🚀 دستورات حرفه‌ای داکر

دستور

مثال

توضیح

docker buildx ابزار پیشرفته ساخت ایمیج جایگزین docker build. پشتیبانی از چندسکویی، کش، ساخت موازی و خروجی به فرمت‌های مختلف. مفید برای CI/CD و توسعه چندسکویی
docker buildx build --platform linux/arm64,linux/amd64 -t myimg:multi .

ساخت ایمیج چندسکویی (ARM و x86 همزمان)

docker buildx build --load -t localimg .

ساخت ایمیج و بارگذاری آن در کش موتور محلی داکر

docker buildx build --push --platform linux/amd64,linux/arm64 -t repo/app:latest .

ساخت و push ایمیج چندسکویی به رجیستری

docker context مدیریت contextهای داکر برای کار با محیط‌های راه‌دور یا چندگانه. امکان جابجایی سریع بین موتورهای محلی و راه‌دور داکر
docker context create myremote --docker "host=ssh://user@host"

ایجاد context برای اتصال به میزبان داکر راه‌دور

docker context use myremote

جابجایی به context راه‌دور

docker context ls

لیست contextهای موجود و فعال

docker system events گوش دادن به رخدادهای داکر در زمان واقعی، با فیلتر بر اساس نوع رخداد (مثلاً شروع کانتینر). مفید برای پایش و خودکارسازی
docker events --filter 'event=start'

نمایش فقط رخدادهای شروع کانتینر

docker events --since 1h --until 10m

نمایش رخدادها از یک ساعت گذشته تا 10 دقیقه قبل

docker events --filter 'type=network'

نمایش فقط رخدادهای مرتبط با شبکه

docker events --filter 'image=nginx'

نمایش رخدادهای مرتبط با ایمیج nginx

docker container update تغییر محدودیت منابع و تنظیمات یک کانتینر در حال اجرا بدون راه‌اندازی مجدد
docker update --cpus 2 --memory 1g my_container

تنظیم محدودیت به 2 CPU و 1GB RAM

docker update --restart unless-stopped my_container

تنظیم سیاست auto-restart به unless-stopped

docker update --pids-limit 200 my_container

محدود کردن تعداد پردازه‌ها به 200

docker container diff نمایش تغییرات فایل‌سیستم کانتینر نسبت به ایمیج اصلی. مفید برای اشکال‌زدایی و ممیزی
docker diff my_container

نمایش همه تغییرات فایل‌سیستم کانتینر

docker diff my_container | grep '^A'

نمایش فقط فایل‌های اضافه‌شده (A — Added)

docker image history نمایش تاریخچه لایه‌های ایمیج: دستورات ساخت، اندازه هر لایه و زمان ایجاد. مفید برای بهینه‌سازی و ممیزی
docker history my_image

نمایش تاریخچه لایه‌های یک ایمیج

docker history --no-trunc my_image

نمایش کامل دستورات ساخت بدون کوتاه‌سازی

docker history --format "{{.CreatedBy}}: {{.Size}}" my_image

خروجی فقط دستورات ساخت و اندازه لایه‌ها

🛠 روش‌ها و خودکارسازی مفید داکر

  • کمینه‌سازی اندازه ایمیج
    استفاده از ایمیج‌های پایه مانند alpine یا scratch برای اندازه حداقلی.
    برای ادغام لایه‌ها می‌توانید از --squash در زمان build استفاده کنید (نیازمند فعال‌سازی ویژگی‌های آزمایشی).
    همچنین فایل‌ها و کش‌های موقت را در یک لایه حذف کنید:

    RUN apk add --no-cache curl && rm -rf /var/cache/apk/*
  • کمینه‌سازی تعداد لایه‌ها
    ترکیب دستورات در یک RUN برای کاهش تعداد لایه‌ها و اندازه نهایی ایمیج:

    RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*
  • بهینه‌سازی ساخت Dockerfile
    از ساخت چندمرحله‌ای استفاده کنید تا فقط فایل‌های لازم در ایمیج نهایی باقی بمانند.
    ابتدا وابستگی‌ها را کپی و نصب کنید، سپس کد را کپی کنید — این باعث بهبود کش لایه‌ها و افزایش سرعت ساخت می‌شود.

  • جدا کردن secrets و configs
    هرگز فایل‌های .env، کلیدهای API یا گواهی‌های خصوصی را داخل ایمیج ذخیره نکنید.
    برای پیکربندی استفاده کنید:

    • docker secret (در Swarm)
    • متغیرهای محیطی (-e VAR=value یا .env)
    • حجم‌های خارجی برای configs

  • اسرار زمان ساخت (BuildKit)
    برای عبور امن secrets در زمان ساخت، از فلگ --secret استفاده کنید:

    docker buildx build --secret id=mysecret,src=./secret.txt .

    در Dockerfile، secret در مسیر /run/secrets/mysecret در دسترس خواهد بود:

    RUN --mount=type=secret,id=mysecret cat /run/secrets/mysecret

    🛡 این باعث جلوگیری از ذخیره secrets در لایه‌های ایمیج می‌شود.

  • داکر بدون دسترسی root
    اجرای داکر بدون حقوق root امنیت را افزایش داده و ریسک نفوذ به میزبان را کاهش می‌دهد.
    برای فعال‌سازی:

    dockerd-rootless-setuptool.sh install
    export PATH=/usr/bin:$PATH

    بررسی:

    docker info | grep Rootless

    ⚠ برخی ویژگی‌ها (مانند فوروارد پورت <1024) در دسترس نخواهند بود.

  • اسکن ایمیج‌ها برای آسیب‌پذیری
    استفاده از ابزارهای داخلی:

    docker scan my_image

    یا CLI جدید:

    docker scout cves my_image

    این به شناسایی آسیب‌پذیری‌ها در ایمیج‌های پایه و وابستگی‌ها کمک می‌کند.

  • پایش مصرف منابع
    محدود کردن کانتینرها بر اساس حافظه، CPU و تعداد پردازه‌ها:

    docker run --memory=512m --cpus="1.5" --pids-limit=200 myimage

    این مانع از مصرف بیش از حد منابع می‌شود.
    همچنین می‌توانید I/O را محدود کنید:

    docker run --device-read-bps /dev/sda:1mb --device-write-bps /dev/sda:1mb myimage

    مفید برای کانتینرهایی که نباید زیرسیستم دیسک را بارگذاری کنند.

  • پاکسازی خودکار
    به‌طور منظم ایمیج‌ها، کانتینرها، حجم‌ها و شبکه‌های بلااستفاده را حذف کنید:

    docker system prune -af --volumes

    ⚠ مراقب باشید: این دستور همه منابع بلااستفاده را حذف می‌کند.

    برای پاکسازی انتخابی استفاده کنید:

    docker image prune --filter "until=24h"
  • ادغام با CI/CD
    ساخت، تست و استقرار را در GitHub Actions، GitLab CI، Jenkins بگنجانید.
    نمونه مرحله GitHub Actions:

    - run: docker build -t myapp:${GITHUB_SHA} .
    - run: docker push myapp:${GITHUB_SHA}
  • لاگ‌گیری و پایش
    اتصال راننده‌های لاگ (--log-driver) به سیستم‌های متمرکز: ELK، Loki، Splunk.
    استفاده از Prometheus + cAdvisor برای متریک‌های کانتینر.

  • استقرار در محیط تولید
    جدا کردن configs برای توسعه و تولید با استفاده از docker-compose.override.yml.
    برای دسترس‌پذیری بالا و مقیاس‌پذیری از موارد زیر استفاده کنید:

    • داکر Swarm
    • کوبرنیتس

🐞 اشکال‌زدایی و پروفایل‌گیری کانتینرهای داکر

دستور

مثال

توضیح

docker container exec اجرای یک دستور داخل کانتینر در حال اجرا، با دسترسی تعاملی یا امکان اجرای پردازه‌ها در محیط ایزوله کانتینر
docker exec -it my_container bash

شروع یک ترمینال تعاملی (bash) داخل کانتینر در حال اجرا

docker exec -it my_container sh

شروع یک شل حداقلی داخل کانتینر (اگر bash در دسترس نباشد)

docker exec my_container ls /app

اجرای دستور داخل کانتینر بدون حالت تعاملی

docker container logs نمایش لاگ‌های کانتینر مشخص‌شده، برای مشاهده خروجی و رویدادهای مرتبط با عملکرد آن جهت تشخیص و پایش
docker logs -f --tail 100 my_container

مشاهده آخرین 100 خط لاگ با پخش زنده

docker logs my_container

نمایش همه لاگ‌های موجود کانتینر

docker logs --since 1h my_container

نمایش لاگ‌های یک ساعت گذشته

docker inspect خروجی اطلاعات دقیق درباره یک شیء داکر (کانتینر، ایمیج، شبکه و غیره) در قالب JSON شامل پیکربندی و وضعیت
docker inspect my_container

گرفتن اطلاعات کامل JSON درباره کانتینر

docker inspect --format '{{.State.Pid}}' my_container

نمایش PID پردازه اصلی کانتینر روی میزبان

docker inspect --format '{{.NetworkSettings.IPAddress}}' my_container

نمایش آدرس IP کانتینر

nsenter (with strace) ابزار لینوکسی برای ورود به namespaceهای یک پردازه دیگر (اینجا کانتینر). همراه با strace برای رهگیری syscalls داخل کانتینر جهت اشکال‌زدایی استفاده می‌شود
nsenter --target $(docker inspect --format '{{.State.Pid}}' my_container) --mount --uts --ipc --net --pid strace -p 1

ورود به namespaceهای کانتینر و رهگیری syscalls پردازه 1

nsenter --target $(docker inspect --format '{{.State.Pid}}' my_container) --mount --uts --ipc --net --pid bash

باز کردن شل bash داخل namespaceهای کانتینر

nsenter --target $(docker inspect --format '{{.State.Pid}}' my_container) --net netstat -tulnp

نمایش پورت‌های باز داخل کانتینر

tcpdump (inside container) ابزار خط فرمان برای گرفتن و تحلیل ترافیک شبکه. در کانتینر برای تشخیص مشکلات شبکه، تحلیل بسته‌ها و پایش اتصالات استفاده می‌شود
docker exec -it my_container tcpdump -i any

گرفتن و تحلیل ترافیک شبکه داخل کانتینر

docker exec -it my_container tcpdump -nn port 80

گرفتن ترافیک فقط روی پورت 80

docker exec -it my_container tcpdump -w /tmp/dump.pcap

ذخیره ترافیک در فایل برای تحلیل بعدی

docker container stats نمایش شاخص‌های مصرف منابع فعلی (CPU، حافظه، شبکه، دیسک) برای یک یا چند کانتینر به صورت زنده
docker stats my_container

نمایش مصرف زنده CPU، حافظه، شبکه و دیسک کانتینر

docker stats

نمایش آمار برای همه کانتینرها

docker stats --no-stream

نمایش آمار یک‌باره و خروج

docker container top نمایش لیست پردازه‌های در حال اجرای داخل کانتینر، مشابه ps در لینوکس برای تحلیل فعالیت کانتینر
docker top my_container

نمایش پردازه‌های در حال اجرا در کانتینر

docker top my_container aux

استفاده از فرمت خروجی جایگزین مثل ps aux

docker top my_container -eo pid,cmd

نمایش فقط PID و فرمان پردازه‌ها

docker diff نمایش تغییرات فایل‌سیستم کانتینر نسبت به ایمیج پایه، شامل فایل‌های اضافه‌شده، تغییر یافته یا حذف‌شده
docker diff my_container

نمایش تغییرات فایل‌سیستم کانتینر نسبت به ایمیج پایه

docker diff my_container | grep '^A'

نمایش فقط فایل‌های اضافه‌شده (A — Added)

docker diff my_container | grep '^C'

نمایش فقط فایل‌های تغییر یافته (C — Changed)

docker cp کپی فایل‌ها و شاخه‌ها بین کانتینر و میزبان برای تبادل داده و پشتیبان‌گیری
docker cp my_container:/path/to/file ./file

کپی فایل از کانتینر به میزبان

docker cp ./config.yaml my_container:/app/config.yaml

کپی فایل از میزبان به کانتینر

docker cp my_container:/var/log/app.log - | tar x -O | grep "ERROR"

کپی فایل لاگ و فیلتر خطوط خطا بدون ذخیره روی دیسک

💡 برای اشکال‌زدایی پیشرفته می‌توانید از nsenter، strace، tcpdump، gdb و ابزارهای سطح پایین دیگر استفاده کنید.

💼 استفاده پیشرفته از داکر کامپوز

🚀 دستورات حرفه‌ای Docker Compose

دستور

مثال

توضیح

docker compose up شروع و مدیریت چرخه حیات سرویس‌های مشخص‌شده در فایل docker-compose.yml با قابلیت اجرای پس‌زمینه
docker compose up -d web db

اجرای فقط سرویس‌های web و db در حالت detached

docker compose up --build

بازسازی ایمیج‌ها قبل از شروع سرویس‌ها

docker compose up --remove-orphans

حذف کانتینرهایی که در فایل compose فعلی تعریف نشده‌اند

docker compose build ساخت ایمیج‌های سرویس‌ها طبق فایل compose با کنترل کش و موازی‌سازی
docker compose build --no-cache

بازسازی کامل ایمیج‌ها بدون کش

docker compose build --parallel

ساخت همزمان همه سرویس‌ها برای افزایش سرعت

docker compose build web

ساخت ایمیج فقط برای سرویس web

docker compose pull دانلود جدیدترین نسخه ایمیج‌ها از رجیستری برای همه یا سرویس‌های مشخص
docker compose pull

pull ایمیج‌ها برای همه سرویس‌ها

docker compose pull db

pull ایمیج فقط برای سرویس db

docker compose pull --ignore-pull-failures

ادامه اجرا با نادیده گرفتن خطاها هنگام pull ایمیج

docker compose restart راه‌اندازی مجدد همه یا سرویس‌های مشخص بدون بازسازی کانتینرها
docker compose restart

راه‌اندازی مجدد همه سرویس‌های پروژه فعلی

docker compose restart worker

راه‌اندازی مجدد فقط سرویس worker

docker compose restart web db

راه‌اندازی مجدد چند سرویس همزمان

docker compose exec اجرای دستور داخل کانتینر سرویس در حال اجرا با حالت تعاملی اختیاری
docker compose exec db psql -U user -d database

اجرای psql داخل کانتینر سرویس db

docker compose exec web sh

باز کردن یک شل داخل کانتینر web

docker compose exec api curl http://localhost:8080

اجرای درخواست curl از کانتینر سرویس api

docker compose config خروجی پیکربندی نهایی Compose با درنظر گرفتن همه فایل‌ها و متغیرهای محیطی
docker compose config

نمایش پیکربندی ادغام‌شده در فرمت YAML

docker compose config --services

لیست همه سرویس‌ها

docker compose config --environment

نمایش همه متغیرهای محیطی استفاده‌شده توسط سرویس‌ها

docker compose watch راه‌اندازی خودکار مجدد سرویس‌ها هنگام تغییر فایل‌ها، مفید برای توسعه
docker compose watch

شروع پایش فایل‌ها و راه‌اندازی مجدد سرویس‌ها هنگام تغییر

docker compose events پخش زنده رویدادهای Compose: شروع، توقف، بروزرسانی سرویس
docker compose events --json

دریافت رویدادها در فرمت JSON

docker compose rm حذف کانتینرهای سرویس متوقف‌شده
docker compose rm web db

حذف کانتینرهای سرویس‌های web و db

docker compose pause مکث سرویس
docker compose pause api

مکث سرویس api

docker compose unpause ازسرگیری سرویس‌های متوقف‌شده
docker compose unpause api

ازسرگیری سرویس api

docker compose create ایجاد کانتینرها بدون شروع آن‌ها
docker compose create web db

ایجاد کانتینرهای web و db بدون اجرای آن‌ها

docker compose images نمایش لیست ایمیج‌های استفاده‌شده توسط سرویس‌ها
docker compose images

نمایش ایمیج‌های همه سرویس‌ها

docker compose top نمایش پردازه‌های در حال اجرای داخل کانتینرهای سرویس
docker compose top web

نمایش پردازه‌ها داخل کانتینرهای سرویس web

🛠 روش‌ها و خودکارسازی مفید با Docker Compose

  • جداسازی محیط‌ها
    برای محیط‌های مختلف — development، staging، production — از فایل‌های جداگانه docker-compose.override.yml استفاده کنید. این باعث جداسازی پیکربندی‌ها و جلوگیری از تداخل تنظیمات می‌شود.
    می‌توانید چند فایل پیکربندی را با فلگ -f ترکیب کنید:

    docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d

    از فایل‌های .env مختلف (.env.dev، .env.prod و غیره) برای مدیریت متغیرهای محیطی استفاده کنید.

  • ذخیره امن اسرار
    اطلاعات حساس (رمزها، توکن‌ها) را مستقیماً در فایل‌های Compose قرار ندهید. به جای آن استفاده کنید:

    • فایل‌های .env برای متغیرهای محیطی (توجه داشته باشید که فایل‌های .env رمزنگاری‌شده نیستند و نباید در مخازن عمومی ذخیره شوند)
    • docker secret و docker config برای مدیریت امن secrets و تنظیمات در Docker Swarm
    • حجم‌های خارجی برای فایل‌های پیکربندی حاوی اسرار
    • سیستم‌های مدیریت secrets خارجی (مثل HashiCorp Vault، AWS Secrets Manager)

  • ترتیب راه‌اندازی با depends_on و healthcheck
    برای اطمینان از آماده بودن وابستگی‌ها قبل از اجرای سرویس‌ها:

    services:
      db:
        image: postgres
        healthcheck:
          test: ["CMD-SHELL", "pg_isready -U postgres"]
          interval: 10s
          retries: 5
      api:
        image: my_api
        depends_on:
          db:
            condition: service_healthy
  • کمینه‌سازی زمان قطعی هنگام بروزرسانی
    قبل از بروزرسانی سرویس‌ها اجرا کنید:

    docker compose pull && docker compose up -d --remove-orphans

    گزینه -d کانتینرها را در پس‌زمینه اجرا می‌کند و --remove-orphans کانتینرهایی که در پیکربندی فعلی تعریف نشده‌اند را حذف می‌کند.
    برای توقف کامل و حذف کانتینرهای قدیمی در صورت نیاز:

    docker compose down --remove-orphans

    این تضمین می‌کند ایمیج‌های جدید بارگیری و کانتینرهای بلااستفاده بدون downtime حذف شوند.

  • بارگذاری مجدد کد به‌صورت زنده برای توسعه
    از volumes برای mount شاخه‌های محلی داخل کانتینرها استفاده کنید. این امکان اعمال فوری تغییرات کد بدون بازسازی ایمیج‌ها را می‌دهد.
    مراقب مشکلات مجوز فایل و کش فایل‌سیستم باشید، به‌ویژه روی Windows و macOS، تا از مشکلات کارایی جلوگیری کنید.

  • بارگذاری مجدد کد بدون volume (Compose 2.22+)

    develop:
      watch:
        - path: ./src
          action: sync
          target: /app
  • لاگ‌گیری متمرکز سرویس‌ها
    لاگ‌های کانتینر را به سیستم‌های پایش و جمع‌آوری لاگ مثل ELK Stack، Loki، Prometheus و Fluentd هدایت کنید.
    از درایورهای لاگ داکر (--log-driver) برای فعال‌سازی جمع‌آوری متمرکز استفاده کنید.
    تنظیم درایورهای لاگ برای کانتینرها در Compose:

    services:
      api:
        image: my_api
        logging:
          driver: "json-file"
          options:
            max-size: "10m"
            max-file: "3"
  • راه‌اندازی خودکار سرویس
    سیاست restart را در docker-compose.yml تنظیم کنید:

    restart: unless-stopped

    سیاست‌های دیگر شامل:

    • no — بدون راه‌اندازی مجدد خودکار (پیش‌فرض)
    • always — همیشه کانتینر را راه‌اندازی مجدد کن
    • on-failure — فقط هنگام خطا راه‌اندازی مجدد شود (با شمارش تکرار اختیاری)

    در محیط تولید، unless-stopped بهترین انتخاب برای اطمینان از تاب‌آوری سرویس است.
    این امکان بازیابی خودکار سرویس‌ها بعد از خطا یا ریبوت میزبان را فراهم می‌کند.

  • پروفایل‌های سرویس
    اجازه اجرای فقط گروه‌های خاص سرویس‌ها را می‌دهد:

    services:
      db:
        image: postgres
        profiles: ["backend"]
      web:
        image: nginx
        profiles: ["frontend"]

    برای اجرای فقط پروفایل frontend:

    docker compose --profile frontend up

🐞 اشکال‌زدایی و پروفایل‌گیری سرویس‌ها در Docker Compose

دستور

مثال

توضیح

docker compose exec اجرای دستور داخل کانتینر سرویس در حال اجرا با دسترسی به کانتینر یا اجرای پردازه‌های منفرد
docker compose exec web sh

باز کردن شل داخل کانتینر سرویس web

docker compose exec db psql -U user -d database

اجرای دستور psql داخل کانتینر سرویس db

docker compose logs مشاهده لاگ‌های سرویس برای عیب‌یابی و پایش
docker compose logs -f db

مشاهده لاگ‌های سرویس db به‌صورت زنده

docker compose logs --tail=50 api

نمایش 50 خط آخر لاگ‌های سرویس api

docker compose logs --since=1h web

نمایش لاگ‌های یک ساعت گذشته برای سرویس web

docker inspect مشاهده اطلاعات دقیق درباره کانتینر در حال اجرای یک سرویس
docker inspect $(docker compose ps -q web)

گرفتن JSON با اطلاعات دقیق کانتینر سرویس web

docker container stats پایش مصرف منابع کانتینرهای سرویس‌ها
docker stats $(docker compose ps -q worker)

ردیابی مصرف CPU، حافظه و منابع دیگر کانتینر سرویس worker

docker compose run --rm اجرای کانتینر موقت با تنظیمات سرویس، مفید برای اشکال‌زدایی
docker compose run --rm web sh

شروع یک کانتینر یک‌باره برای سرویس web با شل تعاملی

docker container cp کپی فایل‌ها بین میزبان و کانتینر
docker cp $(docker compose ps -q db):/dump.sql ./dump.sql

کپی یک فایل از کانتینر سرویس db به میزبان

💡 برای اشکال‌زدایی راحت‌تر تنظیمات چندسرویسی، از docker compose run --rm استفاده کنید تا کانتینرهای منفرد با شبکه‌ها و حجم‌های لازم اجرا شوند بدون تأثیر بر سرویس‌های اصلی.

📚 منابع اضافی

🚫 نادیده گرفتن فایل‌ها با .dockerignore

فایل‌ها و شاخه‌هایی که نباید داخل ایمیج قرار بگیرند را به .dockerignore اضافه کنید تا اندازه کاهش یابد و سرعت ساخت بیشتر شود:

node_modules/
*.log
.env

⚡ ساده‌سازی دستورات با نام‌های مستعار

می‌توانید برای دستورات پرکاربرد alias بسازید تا سریع‌تر اجرا شوند:

alias dcu="docker compose up -d"
alias dcd="docker compose down"
alias dcb="docker compose build"

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

  • لازم نیست همه چیز را حفظ کنید — از docker --help یا docker <command> --help برای بررسی دستورات استفاده کنید.
  • به طور منظم تمرین کنید و با پروژه‌های ساده آزمایش کنید.
  • اندازه ایمیج‌ها را زیر نظر بگیرید و فایل‌های غیرضروری را با .dockerignore حذف کنید.

🌐 لینک‌های مفید

📘 مستندات رسمی داکر — راهنماها و مرجع کامل درباره همه موضوعات داکر:
https://docs.docker.com/

📙 برگه تقلب داکر — برگه تقلب رسمی کامل داکر:
https://dockerlabs.collabnix.com/docker/cheatsheet/

📗 Docker Hub — ایمیج‌ها و رجیستری‌ها:
https://hub.docker.com/