همهی دستورهای دورهی داکر از صفر تا حرفهای در یک صفحه: ۳۸۸ دستور از ۴۳ درس، به ترتیب درسها. هر دستور در درس خودش با خروجی واقعی اجرا و توضیح داده شده است؛ روی اسم درس بزن تا توضیح کامل و مثالها را ببینی.
پیشنیاز
مرور سریع لینوکس برای داکر
| دستور | کاری که میکند |
|---|---|
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 images | image های روی سیستم |
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 IMAGE | hostname دلخواه برای کانتینر |
docker top NAME | پروسههای داخل کانتینر از دید میزبان |
docker inspect --format "{{.State.Pid}}" NAME | PID واقعی کانتینر در میزبان |
معماری داکر
| دستور | کاری که میکند |
|---|---|
docker version | نسخهی Client و Server و اجزا |
docker version --format "{{.Server.Version}}" | فقط نسخهی daemon |
docker info | اطلاعات کامل daemon |
docker info --format "{{.DefaultRuntime}}" | runtime پیشفرض (runc) |
docker context ls | daemon های قابل اتصال |
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 bash | shell تعاملی یکبارمصرف |
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 sh | shell تعاملی داخل کانتینر |
docker exec -u USER -w DIR NAME CMD | اجرا با کاربر و پوشهی مشخص |
docker inspect NAME | JSON کامل |
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" IMG | bind mount (مسیر مطلق) |
docker run -v "$(pwd)/dir:/path:ro" IMG | bind mount فقطخواندنی |
docker run --tmpfs /path IMG | tmpfs در حافظه |
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 image | image پایه |
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 img | init کوچک بهعنوان 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_modules | node_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 IMG | init کوچک بهعنوان 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:2 | registry محلی |
curl localhost:5000/v2/_catalog | فهرست repository ها |
curl localhost:5000/v2/NS/REPO/tags/list | tag های یک 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 db | IP که DNS میدهد |
docker exec app getent hosts db | resolve مثل برنامهها |
docker exec app cat /etc/resolv.conf | nameserver (127.0.0.11) |
docker run --network N --network-alias A IMG | alias در شبکه |
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:ro | bind mount فقطخواندنی |
volumes: - data:/var/lib/x | named 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 IMG | healthcheck موقع 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 alpine | pull از 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 / 28 | DNS / اتصال رد شد / 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 docker | drop-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:2 | registry بهعنوان 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-slim | base متوسط و سازگار |
FROM python:3.12-alpine | base کوچک (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 scratch | image خالی برای باینری استاتیک |
امنیت پایه
| دستور | کاری که میکند |
|---|---|
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 IMG | Docker 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 IMG | driver فشرده با چرخش پیشفرض |
{"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 -d | rollback به نسخهی قبل |
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 | تنظیم مشترک بین سرویسها |
دستوری با این عبارت پیدا نشد.