مقدمه
Docker ابزاری سبک و قدرتمند برای اجرای برنامهها در container هاست که اجرای فرایندها را ایزوله، قابلانتقال و قابلتکرار میکند. برخلاف ماشینهای مجازی، کانتینرها منابع کمتری مصرف کرده و سریعتر راهاندازی میشوند، بنابراین مناسب توسعه، تست و استقرار برنامهها در هر محیطی هستند.
این مقاله گامبهگام به نصب Docker روی Ubuntu 22.04، کار با images و container ها، ساخت و انتشار image، پشتیبانی GPU، و نکات امنیتی و عیبیابی میپردازد تا بتوانید از صفر تا اجرای برنامههای کانتینری شده را بهصورت عملیاتی انجام دهید.
سرور مجازی لینوکس در داکر بهمعنای اجرای ماشینهای مجازی سبک یا سرویسهای مبتنی بر لینوکس است که میزبان کانتینرها میشوند؛ این سرورها منابع سختافزاری را بین چندین محیط ایزولهشده تقسیم میکنند و با ترکیبپذیری Docker، توسعهدهندگان میتوانند تصاویر آماده بسازند، کانتینرها را سریع راهاندازی کنند و محیطهای مشابه تولید را روی یک ماشین مجازی شبیهسازی کنند.
سرور ابری و داکر یک ترکیب قدرتمند برای استقرار برنامهها فراهم میکنند: با اجرای کانتینرها روی سرورهای ابری، میتوانید بهسرعت مقیاسبندی افقی انجام دهید، هزینهها را بهینه کنید و با استفاده از رجیستریها و ارکستراتورها مانند Docker Compose یا Kubernetes، چرخهٔ توسعه تا تولید را خودکار و قابلاعتماد سازید.
این مقاله یک راهنمای جامع و قدمبهقدم برای نصب، پیکربندی، استفاده پایهای و نکات پیشرفتهٔ Docker (نسخهٔ Community Edition) روی Ubuntu 22.04 است.
فهرست مطالب
- معرفی خلاصه
- پیشنیازها
- نصب Docker از مخزن رسمی
- اجرای docker بدون sudo (تنظیم گروه docker)
- مفاهیم پایه: image(Image)، کانتینر (Container)، رجیستری
- کار با images و کانتینرها: pull, run, ps, exec, stop, rm
- ساخت image: docker commit و Dockerfile (نمونهٔ Dockerfile)
- انتشار imageبه Docker Hub (login, tag, push)
- نصب Docker با پشتیبانی GPU (NVIDIA)
- Docker Compose — معرفی و نمونهٔ فایل-compose
- پاکسازی و حذف Docker
- نکات امنیتی و بهترین روشها
- عیبیابی رایج و رفع خطاها
- منابع مفید و پیوندهای مرتبط
معرفی خلاصه
Docker به شما امکان میدهد برنامهها را در container هایی اجرا کنید که فرایندها را جدا و ایزوله میکنند؛ سبکتر و سریعتر از ماشینهای مجازی و مناسب برای نشر، توسعه و تست.

پیشنیازها
– سیستم عامل: Ubuntu 22.04 (Jammy Jellyfish).
– کاربری با دسترسی sudo (غیر-root ترجیحاً).
– اتصال اینترنت.
– برای استفاده از GPU: کارت NVIDIA و درایور مناسب نصبشده.
نصب Docker از مخزن رسمی (گامبهگام)
توصیه میشود Docker را از مخزن رسمی Docker نصب کنید تا آخرین نسخه را دریافت کنید.
گام 1 — بهروزرسانی بستهها
sudo apt update
گام 2 — نصب پیشنیازها برای استفاده از مخازن HTTPS
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common gnupg
گام 3 — اضافه کردن کلید GPG رسمی Docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
گام 4 — افزودن مخزن Docker
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
گام 5 — بهروزرسانی و اطمینان از منبع صحیح
sudo apt update apt-cache policy docker-ce
خروجی apt-cache policy باید نشان دهد candidate از https://download.docker.com باشد.
گام 6 — نصب Docker Engine و اجزای لازم
sudo apt install -y docker-ce docker-ce-cli containerd.io
گام 7 — فعالسازی و بررسی سرویس
sudo systemctl enable --now docker sudo systemctl status docker --no-pager
اگر Active (running) مشاهده شود، نصب موفق بوده است.
اجرای docker بدون sudo (گروه docker)
بهصورت پیشفرض دستور docker نیاز به دسترسی ریشه دارد. برای اجرای بدون sudo:
sudo usermod -aG docker $USER
سپس از سیستم خارج و مجدداً وارد شوید یا `su – $USER` را اجرا کنید. با دستور `groups` تأیید کنید که گروه docker در فهرست شما هست.
هشدار امنیتی: افزودن کاربر به گروه docker عملاً دسترسی root به آن کاربر میدهد؛ در محیطهای حساس دقت کنید.
مفاهیم پایه
– Image: قالبی فقط خواندنی که شامل سیستمعامل پایه و نرمافزارهاست.
– Container: نمونهٔ درحالاجرای یک Image؛ میتواند ایزوله و کوتاهمدت باشد.
– Registry: مخزنی مانند Docker Hub که images در آن نگهداری میشوند.

کار با images و container ها — دستورات پرکاربرد
– اطمینان از کار کردن Docker:
docker run hello-world
– جستجوی image در Docker Hub:
docker search ubuntu
– دانلود image :
docker pull ubuntu
– فهرست images محلی:
docker images
– اجرای یک کانتینر تعاملی با اوبونتو:
docker run -it --name my-ubuntu ubuntu bash
درون کانتینر شما root هستید؛ پس از کار `exit` کنید.
– فهرست کانتینرهای درحال اجرا:
docker ps
– فهرست همه container ها (فعال و غیرفعال):
docker ps -a
– شروع و توقف کانتینر:
docker start CONTAINER_ID_OR_NAME docker stop CONTAINER_ID_OR_NAME
– اجرای دستور در container در حال اجرا:
docker exec -it CONTAINER_ID_OR_NAME bash
– حذف container :
docker rm CONTAINER_ID_OR_NAME
– حذف image :
docker rmi IMAGE_NAME_OR_ID
ساخت image: docker commit و Dockerfile
روش الف — ذخیرهٔ تغییرات یک container به عنوان image:
فرض کنید درون یک container اوبونتو nodejs نصب کردهاید، آیدی کانتینر d9b100f…
docker commit -m "added Node.js" -a "yourname" d9b100f youruser/ubuntu-nodejs
روش ب — بهتر و قابل تکرار: Dockerfile
نمونهٔ ساده Dockerfile که اوبونتو و Node.js نصب میکند:
# Dockerfile FROM ubuntu:22.04 ENV DEBIAN_FRONTEND=noninteractive RUN apt update && apt install -y curl ca-certificates gnupg && \ curl -fsSL https://deb.nodesource.com/setup_18.x | bash - && \ apt install -y nodejs && \ apt clean && rm -rf /var/lib/apt/lists/* CMD ["bash"]
ساخت image از Dockerfile:
docker build -t youruser/ubuntu-nodejs:1.0 .
انتشار image به Docker Hub
– ورود به حساب Docker Hub:
docker login -u your_dockerhub_username
– برچسبگذاری image (در صورت لزوم):
docker tag youruser/ubuntu-nodejs:1.0 your_dockerhub_username/ubuntu-nodejs:1.0
– آپلود image :
docker push your_dockerhub_username/ubuntu-nodejs:1.0
پس از push image در داشبورد Docker Hub قابل مشاهده خواهد بود.
نصب Docker با پشتیبانی GPU (NVIDIA)
پیشنیاز: کارت NVIDIA، درایور مناسب نصبشده روی سیستم (مثلاً از بستههای nvidia-driver از مخازن Ubuntu).
گامها:
1) اضافه کردن مخزن NVIDIA Docker:
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list sudo apt update
2) نصب nvidia-docker2 و ریاستارت داکر:
sudo apt install -y nvidia-docker2 sudo systemctl restart docker
3) بررسی در دسترس بودن runtime:
sudo docker info | grep -i runtime -A 5
یا اجرا برای تست:
docker run --gpus all --rm nvidia/cuda:11.8-base nvidia-smi
اگر خروجی nvidia-smi را دیدید، موفق بودهاید.
نکته: در توزیعهای جدید nvidia-docker از طریق پیکربندی runtime پیشفرض یا استفاده از –gpus مدیریت میشود.
Docker Compose — اجرای چند سرویس
نصب سریع (نسخهٔ جدید Compose بهصورت پلاگین یا باینری):
sudo apt install -y docker-compose-plugin
مثال ساده docker-compose.yml برای یک برنامه Node + Mongo:
version: "3.8" services: app: build: . ports: - "3000:3000" depends_on: - db db: image: mongo:6.0 volumes: - db-data:/data/db volumes: db-data:
اجرای stack:
docker compose up -d docker compose logs -f docker compose down
پاکسازی و حذف Docker
حذف بستهها:
sudo apt remove -y docker-ce docker-ce-cli containerd.io sudo apt autoremove -y
حذف دادهها (هشدار: این کار همهٔ images، کانتینرها، وولومها را پاک میکند):
sudo rm -rf /var/lib/docker sudo rm -rf /var/lib/containerd
حذف مخزن/کلید:
sudo rm /etc/apt/sources.list.d/docker.list sudo rm /usr/share/keyrings/docker-archive-keyring.gpg
نکات امنیتی و بهترین روشها
– اصل حداقل امتیاز (least privilege): کانتینرها را فقط با مجوزهای لازم اجرا کنید.
– از کاربران غیر-root در داخل کانتینر استفاده کنید (در Dockerfile با USER).
– از images رسمی و تاییدشده و از Docker Content Trust استفاده کنید.
– بهروزرسانی منظم Docker و سیستمعامل برای وصلههای امنیتی.
– محدود کردن منابع کانتینر با flags مثل –memory و –cpus.
– استفاده از اسکنینگ images (مثلاً ابزارهایی مانند Trivy) برای یافتن آسیبپذیریها:
trivy image youruser/ubuntu-nodejs:1.0
– احتیاط در افزودن کاربران به گروه docker؛ این کار عملاً دسترسی root میدهد.
عیبیابی رایج و رفع خطاها
Docker daemon استارت نمیشود:
– بررسی وضعیت:
sudo systemctl status docker sudo journalctl -u docker --no-pager -n 200
خطای دسترسی به داکر از طرف کاربر:
– اضافه کردن به گروه docker و خروج/ورود مجدد:
sudo usermod -aG docker $USER
خطاهای storage یا space:
– بررسی فضای دیسک و پاکسازی:
docker system df docker system prune -a --volumes
برای یافتن لاگها و خطای بیشتر از journalctl و لاگ سرویسها استفاده کنید.
مثالها و سناریوهای عملی
(۱) — اجرای وبسرور ساده
– اجرای nginx بهصورت سریع:
docker run -d --name web -p 8080:80 nginx:stable
سپس مرورگر را باز کرده و به http://localhost:8080 بروید.
(۲) — ساخت و اجرای اپلیکیشن Node.js
Dockerfile نمونه بالا را بسازید، سپس:
docker build -t mynodeapp:1.0 . docker run -d --name mynode -p 3000:3000 mynodeapp:1.0
نکات عملی برای تولید (production)
– از orchestrator (مثل Kubernetes) برای بار بالا و مقیاسپذیری استفاده کنید.
– لاگبرداری متمرکز و مانیتورینگ را تنظیم کنید (ELK/Prometheus).
– شبکهبندی مناسب (شبکه Bridge، Overlay در swarm/k8s).
– مدیریت اسرار (Secrets) را با ابزارهای مناسب انجام دهید؛ محیطها را مستقیم در Dockerfile قرار ندهید.






قوانین ارسال دیدگاه
لطفاً در ارسال دیدگاه از کلمات مناسب استفاده کنید. ارسال اسپم ممنوع است.