🐳 داکر
داکر یک پلتفرم برای اجرای برنامهها در کانتینرهای ایزوله است. این برگه تقلب شامل دستورات کار با ایمیجها، کانتینرها، شبکهها، حجمها، و همچنین 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 (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 |
استفاده از فرمت خروجی جایگزین مثل |
|
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/