رفتن به محتوا
LoopX

دستورات داکر: برگه‌ی تقلب کامل

همه‌ی دستورهای دوره‌ی داکر از صفر تا حرفه‌ای در یک صفحه: ۳۸۸ دستور از ۴۳ درس، به ترتیب درس‌ها. هر دستور در درس خودش با خروجی واقعی اجرا و توضیح داده شده است؛ روی اسم درس بزن تا توضیح کامل و مثال‌ها را ببینی.

پیش‌نیاز

مرور سریع لینوکس برای داکر

دستورکاری که می‌کند
whoami · hostname · pwdکاربر، اسم کامپیوتر و پوشه‌ی فعلی
head -2 /etc/os-releaseاسم و نسخه‌ی توزیع
ls -laفهرست بلند همه‌ی فایل‌ها (با مخفی‌ها)
mkdir -p a/b/cساختن پوشه‌ها همراه مسیر بین‌راه
cd .. · cd ~ · cd -یک پوشه بالا · home · پوشه‌ی قبلی
chmod +x fileاجازه‌ی اجرا
chmod 600 fileفقط مالک می‌خواند و می‌نویسد
stat -c "%A %a %U %G %n" fileدسترسی (نمادین و عددی)، مالک و گروه
sudo commandاجرا با اختیارات مدیر
ps auxهمه‌ی پروسه‌ها
kill PIDدرخواست بستن پروسه
ss -tulpnپورت‌های listen و پروسه‌ی هر کدام
curl -s -o /dev/null -w "%{http_code}\n" URLفقط کد HTTP یک آدرس

WSL2 برای کاربرهای ویندوز

دستورکاری که می‌کند
wsl --installنصب WSL و Ubuntu (PowerShell ادمین، بعدش ری‌استارت)
wsl --list --onlineفهرست توزیع‌های قابل نصب
wsl --install -d Ubuntu-24.04نصب یک توزیع مشخص
wsl -l -vتوزیع‌ها، وضعیت و نسخه (VERSION باید 2 باشد)
wsl --set-version Ubuntu 2ارتقای Ubuntu به WSL 2
wsl --set-default-version 2نسخه‌ی پیش‌فرض توزیع‌های تازه
wsl --updateبه‌روزرسانی WSL
wsl --shutdownخاموش کردن همه‌ی توزیع‌ها
wsl <command>اجرای یک دستور لینوکسی از PowerShell
explorer.exe .باز کردن پوشه‌ی فعلی Ubuntu در File Explorer
cd ~ && mkdir -p projects/myappساختن پروژه داخل فایل‌سیستم لینوکس
pwdمطمئن شدن مسیر با /home شروع می‌شود، نه /mnt

مبانی داکر

داکر چیست؟

دستورکاری که می‌کند
docker --versionنسخه‌ی docker CLI
docker versionنسخه‌ی CLI و daemon (Client و Server)
docker infoاطلاعات کلی daemon (هسته، runtime، ...)
docker run IMAGEساخت و اجرای کانتینر (و pull اگر image نباشد)
docker run -d -p 8099:80 --name NAME IMAGEاجرا در پس‌زمینه، با پورت و اسم
docker run --rm IMAGE CMDاجرای یک دستور و پاک شدن خودکار کانتینر
docker run --memory 100m IMAGEسقف حافظه برای کانتینر
docker psکانتینرهای در حال اجرا
docker ps -aهمه‌ی کانتینرها (حتی متوقف‌شده)
docker imagesimage های روی سیستم
docker logs NAMEلاگ کانتینر
docker top NAMEپروسه‌های داخل کانتینر
docker diff NAMEتغییرات لایه‌ی قابل‌نوشتن (A، C، D)
docker history IMAGEلایه‌های image و دستور ساخت هر کدام
docker image inspect IMAGEجزئیات کامل image (مثلاً تعداد لایه‌ها)
docker stop NAMEتوقف کانتینر
docker rm NAMEحذف کانتینر
docker rmi IMAGEحذف image

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

دستورکاری که می‌کند
docker run --rm alpine uname -aاجرای uname داخل کانتینر Alpine (و پاک شدن)
uname -srسیستم‌عامل و کرنل میزبان
docker info --format "{{.KernelVersion}}"کرنل موتور داکر
docker run --rm --cpus 0.5 IMAGEسقف CPU نصف هسته
docker run --rm --memory 100m IMAGEسقف حافظه ۱۰۰ مگابایت
docker run --rm --hostname NAME IMAGEhostname دلخواه برای کانتینر
docker top NAMEپروسه‌های داخل کانتینر از دید میزبان
docker inspect --format "{{.State.Pid}}" NAMEPID واقعی کانتینر در میزبان

معماری داکر

دستورکاری که می‌کند
docker versionنسخه‌ی Client و Server و اجزا
docker version --format "{{.Server.Version}}"فقط نسخه‌ی daemon
docker infoاطلاعات کامل daemon
docker info --format "{{.DefaultRuntime}}"runtime پیش‌فرض (runc)
docker context lsdaemon های قابل اتصال
docker context inspectجزئیات یک context (آدرس سوکت)
docker eventsجریان رویدادهای daemon
curl --unix-socket SOCK http://localhost/_pingتست مستقیم API
DOCKER_HOST=tcp://host:port docker psاجرای یک دستور روی daemon دیگر

نصب داکر

دستورکاری که می‌کند
docker --versionنسخه‌ی docker CLI
docker compose versionنسخه‌ی Compose
docker run hello-worldتست نصب
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-pluginنصب بسته‌های Engine روی Ubuntu
sudo groupadd dockerساخت گروه docker (اگر نبود)
sudo usermod -aG docker $USERاضافه کردن کاربر به گروه docker
newgrp dockerفعال کردن گروه در نشست فعلی
idگروه‌های نشست فعلی
sudo systemctl enable docker.service containerd.serviceشروع خودکار با بوت
ls -l /var/run/docker.sockمالک و گروه سوکت daemon

تنظیم میرور برای دانلود image در ایران

دستورکاری که می‌کند
sudo nano /etc/docker/daemon.jsonویرایش تنظیمات daemon (لینوکس)
{"registry-mirrors":["https://HOST"]}کلید میرور در daemon.json
sudo dockerd --validate --config-file /etc/docker/daemon.jsonاعتبارسنجی فایل
sudo systemctl restart dockerاعمال تغییرات (لینوکس)
docker info | grep -A3 Mirrorsدیدن میرورهای فعال
curl -s -o /dev/null -w "%{http_code}\n" https://registry-1.docker.io/v2/تست دسترسی به Docker Hub
python3 -m json.tool FILEبررسی صحت JSON

image و container

دستورکاری که می‌کند
docker pull nginx:alpineگرفتن image با tag مشخص
docker imagesفهرست image های محلی
docker tag SRC NEWاسم (tag) تازه برای یک image
docker image inspect IMGجزئیات image (لایه‌ها، digest، دستور)
docker create --name N IMGساخت کانتینر بدون شروع
docker start N / docker stop Nشروع و توقف
docker pause N / docker unpause Nفریز و ادامه
docker psکانتینرهای در حال اجرا
docker ps -aهمه‌ی کانتینرها
docker rm N / docker rm -f Nحذف کانتینر (force برای در حال اجرا)
docker rmi IMGحذف image (یا فقط یک tag)

دستورات پایه

دستورکاری که می‌کند
docker run -d --name web nginxاجرا در پس‌زمینه با اسم
docker run -it --rm ubuntu bashshell تعاملی یک‌بار‌مصرف
docker run --rm IMG CMDاجرای یک دستور و پاک شدن
docker stop webتوقف مؤدبانه (TERM بعد KILL)
docker stop -t 1 webمهلت ۱ ثانیه
docker start webروشن کردن دوباره
docker restart webتوقف و شروع
docker rm webحذف کانتینر متوقف‌شده
docker rm -f webحذف اجباری
docker exec CONTAINER CMDاجرای دستور در کانتینر در حال اجرا
docker ps -aهمه‌ی کانتینرها

لاگ، exec و inspect

دستورکاری که می‌کند
docker logs NAMEلاگ کانتینر
docker logs -f --tail 50 NAMEادامه‌ی زنده از ۵۰ خط آخر
docker logs --since 10m NAMEلاگ ۱۰ دقیقه‌ی اخیر
docker exec -it NAME shshell تعاملی داخل کانتینر
docker exec -u USER -w DIR NAME CMDاجرا با کاربر و پوشه‌ی مشخص
docker inspect NAMEJSON کامل
docker inspect --format "{{.State.ExitCode}}" NAMEیک فیلد مشخص
docker stats --no-streamعکس لحظه‌ای مصرف منابع
docker top NAMEپروسه‌های کانتینر
docker cp NAME:/path ./کپی فایل از کانتینر

پورت‌ها

دستورکاری که می‌کند
docker run -p 8080:80 nginxپورت 8080 میزبان ← 80 کانتینر
docker run -p 127.0.0.1:8080:80 nginxفقط روی localhost
docker run -P nginxپورت‌های EXPOSE روی پورت‌های تصادفی
docker run -p 5353:53/udp IMGپروتکل UDP
docker port NAMEنقشه‌ی پورت‌های کانتینر
docker ps --format "table {{.Names}}\t{{.Ports}}"پورت‌های همه‌ی کانتینرها
curl -i localhost:8080تست سرویس

volume و bind mount

دستورکاری که می‌کند
docker volume create NAMEساخت volume
docker volume lsفهرست volume ها
docker volume inspect NAMEجزئیات و Mountpoint
docker volume rm NAMEحذف volume
docker run -v NAME:/path IMGاتصال named volume
docker run -v "$(pwd)/dir:/path" IMGbind mount (مسیر مطلق)
docker run -v "$(pwd)/dir:/path:ro" IMGbind mount فقط‌خواندنی
docker run --tmpfs /path IMGtmpfs در حافظه
docker run --mount type=volume,src=N,dst=/p IMGشکل بلند و خواناتر
docker run -v data:/var/lib/mysql mysqlماندگار کردن داده‌ی دیتابیس

متغیرهای محیطی

دستورکاری که می‌کند
docker run -e KEY=value IMGیک متغیر
docker run -e KEY IMGمقدار از shell میزبان
docker run --env-file .env IMGمتغیرها از فایل
docker run -e MYSQL_ROOT_PASSWORD=secret mysqlرمز root برای MySQL
docker exec N envمتغیرهای کانتینر
docker inspect --format "{{.Config.Env}}" Nمتغیرها در پیکربندی
printf "KEY=value\n" > .envساختن فایل env

پاک‌سازی و مدیریت فضا

دستورکاری که می‌کند
docker system dfخلاصه‌ی فضای اشغال‌شده
docker system df -vجزئیات هر image/کانتینر/volume
docker container prune -fحذف کانتینرهای متوقف
docker image prune -fحذف image های dangling
docker image prune -a -fحذف همه‌ی image های بدون کانتینر
docker volume prune -fحذف volume های ناشناس بی‌کانتینر
docker volume prune -a -fحذف همه‌ی volume های بی‌کانتینر (خطرناک!)
docker builder prune -fپاک کردن کش build
docker system prune -fپاک‌سازی عمومی (بدون volume)
docker system prune --filter "until=24h"فقط چیزهای قدیمی‌تر از ۲۴ ساعت

ساختن image

اولین Dockerfile

دستورکاری که می‌کند
docker build -t myapp .ساخت image با اسم از context فعلی
docker build -t myapp:1.0 -t myapp:latest .چند tag
docker build -f path/Dockerfile .Dockerfile دیگر
docker run --rm myappاجرای image ساخته‌شده
docker images myappفهرست image های یک اسم
docker history myappلایه‌های image
FROM imageimage پایه
COPY src dstکپی فایل از context
CMD ["cmd","arg"]دستور پیش‌فرض

دستورات Dockerfile

دستورکاری که می‌کند
FROM alpine:3.20پایه‌ی مشخص (به‌جای latest)
RUN apk add --no-cache curlاجرای دستور هنگام build
COPY src dstکپی ساده از context
ADD archive.tar.gz /dir/کپی + باز کردن tar
WORKDIR /appپوشه‌ی کار
ENV APP_ENV=productionمتغیر build و اجرا
ARG VERSION=1.0متغیر فقط build
EXPOSE 8080مستندسازی پورت
USER appuserکاربر غیر root
docker build --build-arg K=V -t img .دادن مقدار به ARG
docker history --no-trunc imgدستورهای ساخت هر لایه

CMD در برابر ENTRYPOINT

دستورکاری که می‌کند
CMD ["app","arg"]دستور پیش‌فرض (فرم exec)
ENTRYPOINT ["app"]برنامه‌ی ثابت
docker run img X Yجایگزین CMD (یا اضافه به ENTRYPOINT)
docker run --entrypoint sh -it imgعوض کردن ENTRYPOINT
docker image inspect img --format "{{.Config.Entrypoint}} {{.Config.Cmd}}"دیدن هر دو
docker run --init imginit کوچک به‌عنوان PID 1
docker stop -t 30 Nمهلت بیشتر برای خاموش شدن تمیز
docker top Nپروسه‌های کانتینر (PID 1 کیست؟)

لایه‌ها و کش

دستورکاری که می‌کند
docker history IMGلایه‌ها و دستور ساخت هر کدام
docker image inspect IMG --format "{{len .RootFS.Layers}}"تعداد لایه‌های فایلی
docker build --progress=plain .خروجی کامل و CACHED/DONE
docker build --no-cache .build بدون کش
COPY package*.json ./اول فقط فایل‌های وابستگی
RUN npm ciنصب وابستگی (کش می‌شود)
COPY . .کد برنامه در آخر
RUN a && b && rm tmpساخت و پاک کردن در یک لایه

فایل .dockerignore

دستورکاری که می‌کند
node_modulesپوشه‌ی node_modules در ریشه
**/node_modulesnode_modules در هر عمق
.envفایل رازها
.gitتاریخچه‌ی git
*.logلاگ‌های ریشه
**/*.logلاگ‌ها در هر عمق
!keep.txtاستثنا (بعد از الگوی کلی)
docker build --progress=plain .دیدن اندازه‌ی context
COPY . /ctx + find /ctxبررسی اینکه چه چیزی وارد شد

multi-stage build

دستورکاری که می‌کند
FROM node:22-alpine AS buildشروع مرحله‌ی build با اسم
COPY --from=build /app/dist /usr/share/nginx/htmlبردن نتیجه به مرحله‌ی نهایی
FROM nginx:alpineمرحله‌ی نهایی کوچک
docker build --target build -t dbg .توقف در مرحله‌ی build
COPY --from=nginx:alpine /etc/nginx/nginx.conf /xکپی از image بیرونی
docker imagesمقایسه‌ی حجم

داکرایز کردن اپ Node.js

دستورکاری که می‌کند
npm ci --omit=devنصب دقیق مطابق lock بدون dev
docker build -t node-app .ساخت image
docker run -d -p 3000:3000 node-appاجرا با پورت
USER nodeغیر root
ENV NODE_ENV=productionحالت production
COPY --chown=node:node . .مالکیت فایل‌ها برای کاربر node
process.on("SIGTERM", ...)خاموش شدن تمیز در برنامه
docker run --init IMGinit کوچک به‌عنوان PID 1

داکرایز کردن اپ Python

دستورکاری که می‌کند
pip install --no-cache-dir -r requirements.txtنصب بدون کش pip
pip freeze > requirements.txtساخت فایل وابستگی‌ها
ENV PYTHONUNBUFFERED=1لاگ بدون بافر
ENV PYTHONDONTWRITEBYTECODE=1نساختن .pyc
gunicorn --bind 0.0.0.0:8000 app:appسرور production
flask --app app run --host 0.0.0.0سرور توسعه که از بیرون در دسترس است
docker build -t py-app .ساخت image
docker run -d -p 8000:8000 py-appاجرا با پورت

tag و push به registry

دستورکاری که می‌کند
docker tag SRC REG/NS/REPO:TAGاسم کامل به image می‌دهد
docker login ghcr.io -u USER --password-stdinورود با توکن از stdin
docker push REG/NS/REPO:TAGارسال به registry
docker pull REG/NS/REPO:TAGدریافت
docker pull REG/NS/REPO@sha256:...دریافت با digest
docker run -d -p 5000:5000 registry:2registry محلی
curl localhost:5000/v2/_catalogفهرست repository ها
curl localhost:5000/v2/NS/REPO/tags/listtag های یک repository
docker logoutپاک کردن اعتبار ورود

شبکه و Compose

شبکه در داکر

دستورکاری که می‌کند
docker network lsفهرست شبکه‌ها
docker network create NAMEساخت شبکه‌ی سفارشی
docker network inspect NAMEجزئیات شبکه
docker run --network NAME IMGاجرا روی یک شبکه
docker network connect NAME CONTAINERوصل کردن کانتینر
docker network disconnect NAME CONTAINERجدا کردن
docker network rm NAMEحذف شبکه (باید خالی باشد)
docker run --network none IMGبدون شبکه
docker run --network host IMGشبکه‌ی میزبان

DNS بین کانتینرها

دستورکاری که می‌کند
docker exec app ping dbتست ارتباط با اسم
docker exec app nslookup dbIP که DNS می‌دهد
docker exec app getent hosts dbresolve مثل برنامه‌ها
docker exec app cat /etc/resolv.confnameserver (127.0.0.11)
docker run --network N --network-alias A IMGalias در شبکه
docker network inspect Nکانتینرها و IP ها

معرفی Docker Compose

دستورکاری که می‌کند
docker compose up -dساخت و اجرا در پس‌زمینه
docker compose downحذف کانتینرها و شبکه
docker compose psوضعیت سرویس‌ها
docker compose logs -fلاگ زنده
docker compose configپیکربندی نهایی/اعتبارسنجی
docker compose lsپروژه‌های Compose
docker compose -p NAME up -dاسم پروژه
docker compose -f FILE up -dفایل دیگر
docker compose versionنسخه‌ی Compose

سرویس‌ها، volumeها و شبکه‌ها در Compose

دستورکاری که می‌کند
docker compose up -d --buildساخت image ها و اجرا
docker compose logs -f SERVICEلاگ زنده‌ی یک سرویس
docker compose downحذف کانتینرها و شبکه (volume می‌ماند)
docker compose down -vحذف volume ها هم (داده می‌رود!)
docker compose config --volumesفهرست volume های تعریف‌شده
build: ./dirساخت از Dockerfile
volumes: - ./src:/app:robind mount فقط‌خواندنی
volumes: - data:/var/lib/xnamed volume
restart: unless-stoppedری‌استارت خودکار
networks: [front, back]عضویت در چند شبکه

متغیرها و فایل env در Compose

دستورکاری که می‌کند
docker compose configنمایش فایل بعد از جایگزینی و ادغام
docker compose --env-file prod.env configاستفاده از فایل env دیگر
docker compose --profile dev up -dاجرا با پروفایل dev
docker compose -f a.yaml -f b.yaml upادغام صریح فایل‌ها
${VAR:-x}مقدار پیش‌فرض
${VAR:?msg}اجباری، با پیام خطا
env_file: [app.env]ریختن متغیرها داخل کانتینر
docker compose config --servicesفهرست سرویس‌های فعال

healthcheck و ترتیب اجرا

دستورکاری که می‌کند
docker inspect --format '{{.State.Health.Status}}' Cوضعیت سلامت
docker run --health-cmd CMD --health-interval 5s IMGhealthcheck موقع run
docker run --no-healthcheck IMGخاموش کردن healthcheck image
HEALTHCHECK --interval=5s CMD cmd || exit 1در Dockerfile
healthcheck: {test: [CMD, redis-cli, ping]}در Compose
depends_on: {db: {condition: service_healthy}}منتظر سالم شدن db
docker compose up -d --waitصبر تا آماده شدن سرویس‌ها
restart: on-failure:5حداکثر ۵ تلاش دوباره

دستورات کاربردی Compose

دستورکاری که می‌کند
docker compose pull [svc]گرفتن image های آماده
docker compose build [svc]ساخت image ها
docker compose up -d --buildساخت و اجرا
docker compose stop / start / restart [svc]مکث و ادامه
docker compose down [-v]برچیدن پروژه
docker compose exec svc shشل داخل کانتینر در حال اجرا
docker compose run --rm svc cmdکانتینر یک‌بارمصرف (migration)
docker compose up -d --scale web=3سه نمونه از web
docker compose ps -aهمه‌ی کانتینرهای پروژه
docker compose config --servicesفهرست سرویس‌ها

پروژه: وب‌اپ + دیتابیس + Nginx

دستورکاری که می‌کند
docker compose up -d --build --waitساخت، اجرا و صبر تا آماده شدن
docker compose psوضعیت و سلامت سرویس‌ها
docker compose logs -f appلاگ زنده‌ی اپ
docker compose exec db psql -U shop -d shopورود به PostgreSQL
docker compose exec nginx nginx -tبررسی تنظیم nginx
docker compose exec nginx nginx -s reloadبارگذاری دوباره‌ی تنظیم بدون ریستارت
docker compose downبرچیدن (داده می‌ماند)
docker compose down -vبرچیدن همراه داده

داکر در ایران

محدودیت Docker Hub و راه‌حل‌ها

دستورکاری که می‌کند
docker pull alpinepull از Docker Hub (نام کامل: docker.io/library/alpine:latest)
docker pull alpine@sha256:…pull با digest (محتوای ثابت)
docker image inspect IMG --format '{{index .RepoDigests 0}}'digest یک image محلی
curl -s -o /dev/null -w "%{http_code}" https://REGISTRY/v2/تست دسترسی؛ ۴۰۱ یعنی سالم
curl rc 6 / 7 / 28DNS / اتصال رد شد / timeout
docker info | grep -A2 Mirrorsمیرورهای فعال
{"insecure-registries":["host:5000"]}فقط برای registry داخلی بدون TLS

proxy و registryهای جایگزین

دستورکاری که می‌کند
docker info | grep -iE "proxy|mirror"تنظیم proxy و میرور فعال
{"proxies":{"http-proxy":"…","https-proxy":"…","no-proxy":"…"}}proxy daemon در daemon.json (با restart)
sudo systemctl edit dockerdrop-in برای Environment (سرور systemd)؛ بعدش restart
systemctl show --property=Environment dockerدیدن متغیرهای سرویس
docker build --build-arg HTTP_PROXY=URL .proxy در زمان build
DOCKER_CONFIG=DIR docker run …کلاینت با config.json دیگر
-e REGISTRY_PROXY_REMOTEURL=https://registry-1.docker.io registry:2registry به‌عنوان pull-through cache
curl -x http://PROXY:PORT https://registry-1.docker.io/v2/تست proxy از بیرون داکر

انتقال image بدون اینترنت

دستورکاری که می‌کند
docker save -o app.tar myapp:1.0ذخیره‌ی image در فایل
docker save myapp:1.0 | gzip > app.tar.gzذخیره‌ی فشرده
docker load -i app.tar.gzبازگرداندن image از فایل
docker save myapp | gzip | ssh host 'gunzip | docker load'انتقال مستقیم بدون فایل میانی
scp app.tar.gz user@host:/path/کپی فایل به سرور
docker save -o pack.tar a bچند image در یک فایل
docker image inspect IMG --format '{{.Architecture}}'معماری image
docker pull --platform linux/amd64 IMGگرفتن نسخه‌ی معماری مشخص
docker export C -o f.tarفایل‌سیستم کانتینر (نه برای انتقال image)

حرفه‌ای‌تر

کوچک کردن image

دستورکاری که می‌کند
docker image lsفهرست و حجم image ها
docker history IMGحجم و دستور هر لایه
docker image inspect IMG --format '{{.Size}}'حجم دقیق (بایت)
FROM python:3.12-slimbase متوسط و سازگار
FROM python:3.12-alpinebase کوچک (musl)
pip install --no-cache-dir -r requirements.txtبدون کش pip
apt-get install -y --no-install-recommends X && rm -rf /var/lib/apt/lists/*نصب و پاک‌کردن در یک لایه
COPY --from=build /out /outبرداشتن فقط نتیجه از مرحله‌ی build
FROM scratchimage خالی برای باینری استاتیک

امنیت پایه

دستورکاری که می‌کند
USER appاجرای پروسه با کاربر غیر root
COPY --chown=app:app . .فایل‌ها مال کاربر اپ
docker run --user 10001:10001 IMGکاربر در زمان اجرا
docker run --read-only --tmpfs /tmp IMGفایل‌سیستم فقط‌خواندنی
docker run --cap-drop ALL --cap-add CHOWN IMGحداقل capability
docker run --security-opt no-new-privileges IMGجلوگیری از افزایش دسترسی
RUN --mount=type=secret,id=t …راز زمان build (در image نمی‌ماند)
docker build --secret id=t,src=file .دادن راز به build
docker run --pids-limit 100 --memory 128m IMGحد پروسه و حافظه

اسکن آسیب‌پذیری

دستورکاری که می‌کند
docker save -o app.tar myapp:1.0ذخیره‌ی image برای اسکن
trivy image --input app.tarاسکن image
trivy image --severity CRITICAL,HIGH IMGفقط شدت‌های بالا
trivy image --ignore-unfixed IMGبدون موارد بی‌رفع
trivy image --exit-code 1 --severity CRITICAL IMGشکستن CI
trivy config DIRاسکن Dockerfile و Compose
--db-repository ghcr.io/aquasecurity/trivy-db:2آدرس پایگاه داده
docker scout cves IMGDocker Scout (نیاز به login) — نمونه

عیب‌یابی کانتینرها

دستورکاری که می‌کند
docker ps -aهمه‌ی کانتینرها با وضعیت
docker logs --tail 50 -f NAMEلاگ (آخر و زنده)
docker inspect NAME --format '{{.State.ExitCode}}'کد خروج
docker inspect NAME --format '{{.State.OOMKilled}}'آیا OOM کشته؟
docker exec NAME shشل داخل کانتینر در حال اجرا
docker run --rm --entrypoint sh IMG -c 'ls /'نگاه به image بدون فرمان اصلی
docker diff NAMEتغییرهای فایل‌سیستم
docker cp NAME:/path ./کپی فایل از کانتینر (حتی متوقف)
docker events --since 10mرویدادهای اخیر
docker port NAMEپورت‌های publish‌شده

محدودیت منابع

دستورکاری که می‌کند
docker run --memory 512m --cpus 1 IMGسقف حافظه و CPU
docker run --memory 512m --memory-swap 512m IMGبدون swap
docker run --pids-limit 100 IMGسقف تعداد پروسه
docker stats [--no-stream]مصرف زنده/یک‌باره
docker inspect C --format '{{.State.OOMKilled}}'آیا OOM کشته؟
docker update --memory 1g Cتغییر سقف در لحظه
cat /sys/fs/cgroup/memory.maxسقف واقعی حافظه داخل کانتینر
mem_limit / cpus / pids_limitمعادل در Compose

لاگ‌ها در داکر

دستورکاری که می‌کند
docker run --log-opt max-size=10m --log-opt max-file=3 IMGچرخش لاگ برای یک کانتینر
docker run --log-driver local IMGdriver فشرده با چرخش پیش‌فرض
{"log-driver":"json-file","log-opts":{"max-size":"10m","max-file":"3"}}تنظیم سراسری در daemon.json (با restart)
docker logs --tail 100 -f -t NAMEآخرین خط‌ها، زنده، با زمان
docker logs --since 30m NAMEلاگ نیم‌ساعت اخیر
docker inspect NAME --format '{{.LogPath}}'مسیر فایل لاگ
truncate -s 0 $(docker inspect --format '{{.LogPath}}' NAME)تهی کردن لاگ در اورژانس
docker info --format '{{.LoggingDriver}}'driver پیش‌فرض

داکر در production

دستورکاری که می‌کند
docker run --restart unless-stopped IMGبازگشت بعد از کرش و ریبوت
sudo systemctl enable dockerسرویس docker با بوت
docker compose pull && docker compose up -dبه‌روزرسانی بدون از دست رفتن داده
TAG=1.0 docker compose up -drollback به نسخه‌ی قبل
docker run --rm -v V:/data:ro -v $PWD:/b alpine tar czf /b/v.tgz -C /data .بکاپ volume
docker run --rm -v V2:/data -v $PWD:/b:ro alpine tar xzf /b/v.tgz -C /dataبازیابی در volume تازه
docker exec DB pg_dump -U user db > db.sqlبکاپ منطقی Postgres
docker exec nginx nginx -s reloadجابه‌جایی نرم ترافیک
docker system dfمصرف دیسک داکر

بهترین شیوه‌ها و چک‌لیست نهایی

دستورکاری که می‌کند
docker run --rm -i hadolint/hadolint < Dockerfileلینت Dockerfile
hadolint --failure-threshold warning -شکست فقط از warning به بالا
# hadolint ignore=DL3008استثنای آگاهانه برای خط بعد
docker compose -f f.yaml config --quietاعتبارسنجی Compose
docker compose config --format jsonخروجی ماشین‌خوان برای چک‌کننده
trivy config DIRاسکن اشتباهات امنیتی Dockerfile/Compose
docker build --progress=plain …دیدن CACHED و transferring context
FROM python:3.12-slim@sha256:…ثابت کردن base با digest

پروژه‌ی پایانی

دستورکاری که می‌کند
docker compose up -d --waitبالا آوردن و صبر تا سالم
docker save IMG … | gzip | ssh S 'gunzip | docker load'ارسال image ها بدون registry
scp / tar | ssh S 'tar xf - -C DIR'ارسال فایل‌های پروژه
ssh S "cd DIR && docker compose up -d --wait"استقرار روی سرور
sed -i s/^APP_TAG=.*/APP_TAG=X/ .envتغییر نسخه (به‌روزرسانی/rollback)
docker compose exec -T db pg_dump -U u dbبکاپ منطقی
secrets: + *_FILE=/run/secrets/…رمز از فایل
x-common: &common + <<: *commonتنظیم مشترک بین سرویس‌ها