🐳 داکر
داکر یک پلتفرم برای اجرای برنامهها در کانتینرهای ایزوله است. این برگه تقلب شامل دستورات کار با ایمیجها، کانتینرها، شبکهها، حجمها، و همچنین 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 | حذف ایمیج با تگ  | |
| docker rmi 1a2b3c4d5e6f | حذف ایمیج با شناسه آن | |
| docker rmi $(docker images -q) | حذف همه ایمیجها (با احتیاط استفاده کنید!) | 
🔁 مدیریت کانتینر
| دستور | مثال | توضیح | 
|---|---|---|
| docker container exec | اجرای یک دستور داخل کانتینر در حال اجرا | |
| docker exec -it container bash | اجرای یک شل bash تعاملی داخل کانتینر با نام  | |
| docker exec container ls /app | اجرای دستور  | |
| docker exec -d container touch /tmp/testfile | اجرای یک دستور در کانتینر در حالت detached (بدون انتظار) | |
| docker container logs | مشاهده لاگهای کانتینر | |
| docker logs container | نمایش همه لاگهای کانتینر  | |
| docker logs -f container | دنبال کردن لاگهای کانتینر به صورت زنده | |
| docker logs --tail 50 container | نمایش 50 خط آخر لاگها | |
| docker inspect | بازیابی اطلاعات دقیق JSON درباره یک کانتینر یا ایمیج | |
| docker inspect 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 | تغییر نام کانتینر از  | |
| 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 | نمایش پردازههای کانتینر با نام  | |
| docker container pause | مکث تمام پردازهها در یک کانتینر | |
| docker pause container | مکث کانتینر  | |
| docker container unpause | ازسرگیری کانتینر متوقفشده | |
| docker unpause container | ازسرگیری کانتینر  | |
| docker container update | بروزرسانی تنظیمات کانتینر بدون راهاندازی مجدد | |
| docker update --memory 500m container | محدود کردن استفاده حافظه کانتینر به 500 MB | 
🧱 ایمیجها و Dockerfile
| دستور | مثال | توضیح | 
|---|---|---|
| docker buildx build | ساخت یک ایمیج داکر از Dockerfile | |
| docker build -t my_image . | ساخت یک ایمیج با تگ  | |
| docker build -t my_image:1.0 . | ساخت یک ایمیج با تگ نسخه  | |
| docker build --no-cache -t my_image . | ساخت ایمیج بدون کش برای ساخت تمیز | |
| docker container commit | ایجاد یک ایمیج از وضعیت فعلی یک کانتینر | |
| docker commit container my_img:v1 | ایجاد ایمیج  | |
| 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 به رجیستری  | |
| docker tag my_image:1.0 my_image:stable | ایجاد تگ  | |
| docker tag my_image my_image:backup | افزودن تگ  | |
| docker image push | push یک ایمیج به Docker Hub یا رجیستری دیگر | |
| docker push myrepo/my_image:latest | push ایمیج با تگ  | |
| docker push myrepo/my_image:1.0 | push ایمیج با تگ  | |
| docker push myrepo/my_image | push ایمیج با تگ پیشفرض  | |
| 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 | نمایش فقط شبکهها با درایور  | |
| docker network ls --format '{{.Name}}' | نمایش فقط نام شبکهها | |
| docker network create | ایجاد یک شبکه جدید داکر | |
| docker network create my_net | ایجاد شبکه با نام  | |
| docker network create --driver bridge my_bridge_net | ایجاد شبکه با درایور  | |
| docker network create --subnet=192.168.10.0/24 my_custom_net | ایجاد شبکه با subnet مشخص | |
| docker network connect | اتصال یک کانتینر به شبکه | |
| docker network connect my_net container | اتصال کانتینر  | |
| docker network connect --alias db_net my_net container | اتصال با alias به نام  | |
| docker network disconnect | قطع اتصال کانتینر از شبکه | |
| docker network disconnect my_net container | قطع اتصال کانتینر  | |
| docker volume ls | لیست همه حجمهای داکر | |
| docker volume ls | نمایش همه حجمهای داکر | |
| docker volume ls --filter dangling=true | نمایش حجمهای استفادهنشده | |
| docker volume create | ایجاد یک حجم جدید داکر | |
| docker volume create my_vol | ایجاد حجم با نام  | |
| docker volume create --driver local --opt type=tmpfs my_tmp_vol | ایجاد یک حجم موقت با استفاده از tmpfs | |
| docker volume inspect | نمایش اطلاعات دقیق یک حجم | |
| docker volume inspect my_vol | نمایش جزئیات حجم  | |
| docker volume rm | حذف یک یا چند حجم | |
| docker volume rm 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 | نمایش لاگهای فقط سرویس  | |
| docker compose exec | اجرای یک دستور داخل کانتینر سرویس در حال اجرا | |
| docker compose exec web bash | ورود به شل bash تعاملی داخل کانتینر سرویس  | |
| docker compose exec db ls /var/lib/postgresql | اجرای دستور  | |
| docker compose exec -d worker touch /tmp/done | اجرای دستور در کانتینر  | |
| docker compose build | ساخت یا بازسازی ایمیجهای سرویس | |
| docker compose build | ساخت همه ایمیجهای تعریفشده در  | |
| docker compose build 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 ایمیج فقط برای سرویس  | |
| docker compose pull --ignore-pull-failures | ادامه pull حتی اگر برخی ایمیجها خطا داشته باشند | |
| docker compose restart | راهاندازی مجدد همه یا سرویسهای مشخص | |
| docker compose restart 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 | شروع سرویس  | |
| docker compose start db api | شروع چند سرویس بهطور همزمان | |
| docker compose stop | توقف سرویسها بدون حذف کانتینرها | |
| docker compose stop 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 کانتینر با فلگ  | |
| 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 | حذف پشته  | |
| 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' | نمایش رخدادهای مرتبط با ایمیج  | |
| docker container update | تغییر محدودیت منابع و تنظیمات یک کانتینر در حال اجرا بدون راهاندازی مجدد | |
| docker update --cpus 2 --memory 1g my_container | تنظیم محدودیت به 2 CPU و 1GB RAM | |
| docker update --restart unless-stopped my_container | تنظیم سیاست auto-restart به  | |
| docker update --pids-limit 200 my_container | محدود کردن تعداد پردازهها به 200 | |
| docker container diff | نمایش تغییرات فایلسیستم کانتینر نسبت به ایمیج اصلی. مفید برای اشکالزدایی و ممیزی | |
| docker diff my_container | نمایش همه تغییرات فایلسیستم کانتینر | |
| docker diff my_container | grep '^A' | نمایش فقط فایلهای اضافهشده ( | |
| 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
 
- کوبرنیتس 
 
- داکر 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(withstrace) | ابزار لینوکسی برای ورود به 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 | استفاده از فرمت خروجی جایگزین مثل  | |
| docker top my_container -eo pid,cmd | نمایش فقط PID و فرمان پردازهها | |
| docker diff | نمایش تغییرات فایلسیستم کانتینر نسبت به ایمیج پایه، شامل فایلهای اضافهشده، تغییر یافته یا حذفشده | |
| docker diff my_container | نمایش تغییرات فایلسیستم کانتینر نسبت به ایمیج پایه | |
| docker diff my_container | grep '^A' | نمایش فقط فایلهای اضافهشده ( | |
| docker diff my_container | grep '^C' | نمایش فقط فایلهای تغییر یافته ( | |
| 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 | اجرای فقط سرویسهای  | |
| 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 | ساخت ایمیج فقط برای سرویس  | |
| docker compose pull | دانلود جدیدترین نسخه ایمیجها از رجیستری برای همه یا سرویسهای مشخص | |
| docker compose pull | pull ایمیجها برای همه سرویسها | |
| docker compose pull db | pull ایمیج فقط برای سرویس  | |
| docker compose pull --ignore-pull-failures | ادامه اجرا با نادیده گرفتن خطاها هنگام pull ایمیج | |
| docker compose restart | راهاندازی مجدد همه یا سرویسهای مشخص بدون بازسازی کانتینرها | |
| docker compose restart | راهاندازی مجدد همه سرویسهای پروژه فعلی | |
| docker compose restart worker | راهاندازی مجدد فقط سرویس  | |
| docker compose restart web db | راهاندازی مجدد چند سرویس همزمان | |
| docker compose exec | اجرای دستور داخل کانتینر سرویس در حال اجرا با حالت تعاملی اختیاری | |
| docker compose exec db psql -U user -d database | اجرای psql داخل کانتینر سرویس  | |
| docker compose exec web sh | باز کردن یک شل داخل کانتینر  | |
| docker compose exec api curl http://localhost:8080 | اجرای درخواست curl از کانتینر سرویس  | |
| 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 | حذف کانتینرهای سرویسهای  | |
| docker compose pause | مکث سرویس | |
| docker compose pause api | مکث سرویس  | |
| docker compose unpause | ازسرگیری سرویسهای متوقفشده | |
| docker compose unpause api | ازسرگیری سرویس  | |
| docker compose create | ایجاد کانتینرها بدون شروع آنها | |
| docker compose create web db | ایجاد کانتینرهای  | |
| docker compose images | نمایش لیست ایمیجهای استفادهشده توسط سرویسها | |
| docker compose images | نمایش ایمیجهای همه سرویسها | |
| docker compose top | نمایش پردازههای در حال اجرای داخل کانتینرهای سرویس | |
| docker compose top 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 | باز کردن شل داخل کانتینر سرویس  | |
| docker compose exec db psql -U user -d database | اجرای دستور psql داخل کانتینر سرویس  | |
| docker compose logs | مشاهده لاگهای سرویس برای عیبیابی و پایش | |
| docker compose logs -f db | مشاهده لاگهای سرویس  | |
| docker compose logs --tail=50 api | نمایش 50 خط آخر لاگهای سرویس  | |
| docker compose logs --since=1h web | نمایش لاگهای یک ساعت گذشته برای سرویس  | |
| docker inspect | مشاهده اطلاعات دقیق درباره کانتینر در حال اجرای یک سرویس | |
| docker inspect $(docker compose ps -q web) | گرفتن JSON با اطلاعات دقیق کانتینر سرویس  | |
| docker container stats | پایش مصرف منابع کانتینرهای سرویسها | |
| docker stats $(docker compose ps -q worker) | ردیابی مصرف CPU، حافظه و منابع دیگر کانتینر سرویس  | |
| docker compose run --rm | اجرای کانتینر موقت با تنظیمات سرویس، مفید برای اشکالزدایی | |
| docker compose run --rm web sh | شروع یک کانتینر یکباره برای سرویس  | |
| docker container cp | کپی فایلها بین میزبان و کانتینر | |
| docker cp $(docker compose ps -q db):/dump.sql ./dump.sql | کپی یک فایل از کانتینر سرویس  | 
💡 برای اشکالزدایی راحتتر تنظیمات چندسرویسی، از
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/