اگر قصد اجرای اپلیکیشنهای مختلف روی یک سرور مجازی Ubuntu را داشته باشید، احتمالاً خیلی زود با Docker روبهرو میشوید.
Docker به شما اجازه میدهد برنامه و وابستگیهای آن را داخل محیطی به نام Container بستهبندی و اجرا کنید. به این ترتیب میتوان سرویسهایی مثل Nginx، Redis، PostgreSQL، Node.js یا بسیاری از نرمافزارهای دیگر را بدون نصب مستقیم تمام وابستگیهای آنها روی سیستمعامل اجرا کرد.
در این آموزش، Docker Engine را از مخزن رسمی Docker روی Ubuntu نصب میکنیم، وضعیت سرویس را بررسی میکنیم، کانتینر آزمایشی hello-world را اجرا میکنیم و در ادامه با دستورات مهمی که برای مدیریت Docker روی VPS نیاز دارید آشنا میشویم.
نکته: دستورات این مقاله برای Ubuntu Server نوشته شدهاند. اگر روی یک سرور Production کار میکنید، قبل از تغییر سرویسها و Firewall از اطلاعات مهم Backup داشته باشید.
Docker چیست؟
Docker پلتفرمی برای ساخت، توزیع و اجرای نرمافزار داخل Container است.
Container محیطی ایزوله برای اجرای یک برنامه است که از Kernel سیستمعامل میزبان استفاده میکند، اما Processها، فایلها، شبکه و وابستگیهای موردنیاز برنامه را تا حد زیادی از سایر سرویسها جدا نگه میدارد.
فرض کنید یک برنامه برای اجرا به نسخه مشخصی از Node.js، چند Library و یک Configuration خاص نیاز دارد.
در روش سنتی باید تمام این موارد را روی خود سرور نصب و مدیریت کنید.
اما در Docker میتوان برنامه و وابستگیهایش را در یک Image تعریف کرد و سپس از روی آن Image یک یا چند Container اجرا کرد.
به زبان ساده:
Image
↓
قالب آماده برنامه
↓
Container
↓
نمونه در حال اجرای آن Image
تفاوت Docker Image و Container چیست؟
دو اصطلاح مهم Docker، Image و Container هستند.
Docker Image
Image یک بسته فقطخواندنی است که فایلها و تنظیمات موردنیاز برای اجرای نرمافزار را در خود دارد.
برای مثال:
nginx:latest
یک Image برای Nginx است.
Docker Container
Container یک نمونه در حال اجرا از Image است.
مثلاً میتوانید از یک Image چند Container جدا بسازید:
nginx image
├── container-1
├── container-2
└── container-3
هر Container میتواند تنظیمات، Port و Storage مخصوص خودش را داشته باشد.
چرا Docker روی VPS کاربردی است؟
Docker روی سرور مجازی کاربردهای زیادی دارد:
اجرای سریع سرویسها
جدا نگه داشتن وابستگی پروژهها
سادهتر شدن Deployment
اجرای چند نسخه از یک سرویس
راهاندازی محیط Development و Production مشابه
مدیریت سادهتر Stackهای چندسرویسی با Docker Compose
حذف آسان یک سرویس بدون باقی ماندن تعداد زیادی Package روی سیستم
البته Docker تمام مشکلات مدیریت سرور را حل نمیکند. همچنان باید امنیت، Backup، Monitoring، Firewall، Updateها و منابع VPS را مدیریت کنید.
اگر VPS را تازه تهیه کردهاید، ابتدا مطالعه چکلیست راهاندازی و امنیت VPS پیشنهاد میشود.
پیشنیازهای نصب Docker روی Ubuntu
برای این آموزش نیاز دارید:
یک VPS یا سرور Ubuntu
دسترسی
rootیا کاربری دارایsudoاتصال SSH فعال
دسترسی اینترنت روی سرور
معماری پشتیبانیشده توسط Docker
در زمان نگارش این مقاله، مستندات رسمی Docker نسخههای LTS جدید Ubuntu از جمله Ubuntu 22.04، 24.04 و 26.04 را در فهرست نسخههای پشتیبانیشده Docker Engine قرار دادهاند.
برای مشاهده نسخه Ubuntu خود اجرا کنید:
lsb_release -a
اگر دستور lsb_release روی سیستم وجود نداشت:
cat /etc/os-release
مرحله اول: اتصال به VPS از طریق SSH
ابتدا به سرور متصل شوید:
ssh USER@SERVER_IP
برای مثال:
ssh ubuntu@203.0.113.10
یا اگر مستقیماً از کاربر Root استفاده میکنید:
ssh root@203.0.113.10
203.0.113.10 فقط یک IP نمونه است و باید IP واقعی سرور خودتان را وارد کنید.
مرحله دوم: بهروزرسانی فهرست پکیجها
بعد از ورود به سرور:
sudo apt update
در صورت نیاز میتوانید پکیجهای سیستم را نیز ارتقا دهید:
sudo apt upgrade -y
برای نصب Docker لازم نیست الزاماً تمام پکیجها را Upgrade کنید، اما بهروز نگه داشتن سیستم بخش مهمی از نگهداری یک VPS است.
مرحله سوم: حذف Packageهای متداخل قدیمی
اگر سرور کاملاً تازه است احتمالاً چیزی برای حذف وجود ندارد.
اما اگر قبلاً نسخه دیگری از Docker، Compose یا Container Runtime نصب کردهاید، بهتر است Packageهایی را که با نسخه رسمی Docker Engine تداخل دارند بررسی و حذف کنید.
طبق روش پیشنهادی Docker میتوانید اجرا کنید:
sudo apt remove $(dpkg --get-selections docker.io docker-compose docker-compose-v2 docker-doc docker-buildx podman-docker containerd runc 2>/dev/null | cut -f1)
اگر هیچکدام نصب نباشند، APT ممکن است اعلام کند Package مرتبطی برای حذف وجود ندارد.
مهم: اگر روی سرور از قبل Docker دارید و Container یا Volume مهمی روی آن اجرا میشود، بدون بررسی این مرحله را اجرا نکنید. ابتدا وضعیت محیط فعلی و دادههای Docker را بررسی کنید.
مرحله چهارم: نصب پیشنیازهای Repository رسمی Docker
ابتدا Packageهای لازم را نصب کنید:
sudo apt update
sudo apt install ca-certificates curl -y
حالا مسیر نگهداری Keyهای APT را ایجاد کنید:
sudo install -m 0755 -d /etc/apt/keyrings
مرحله پنجم: اضافه کردن GPG Key رسمی Docker
کلید رسمی Docker را دریافت کنید:
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
-o /etc/apt/keyrings/docker.asc
سپس اجازه خواندن آن را تنظیم کنید:
sudo chmod a+r /etc/apt/keyrings/docker.asc
این Key به APT کمک میکند Packageهای دریافتشده از Repository مربوط به Docker را اعتبارسنجی کند.
مرحله ششم: اضافه کردن Repository رسمی Docker
Repository رسمی Docker را اضافه کنید:
sudo tee /etc/apt/sources.list.d/docker.sources > /dev/null <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF
حالا فهرست Packageها را دوباره بهروزرسانی کنید:
sudo apt update
اگر Repository بهدرستی اضافه شده باشد، APT اطلاعات Packageهای Docker را نیز دریافت میکند.
مرحله هفتم: نصب Docker Engine
برای نصب نسخه Stable فعلی Docker Engine و ابزارهای اصلی آن:
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
این دستور چند جزء اصلی را نصب میکند:
docker-ceبرای Docker Enginedocker-ce-cliبرای Docker CLIcontainerd.ioبرای Container Runtimedocker-buildx-pluginبرای قابلیتهای پیشرفته Builddocker-compose-pluginبرای Docker Compose جدید
مرحله هشتم: بررسی وضعیت Docker
بعد از نصب:
sudo systemctl status docker
در حالت معمول باید عبارتی مشابه زیر مشاهده کنید:
Active: active (running)
برای خروج از صفحه وضعیت:
q
اگر Docker اجرا نشده بود:
sudo systemctl start docker
برای فعال شدن خودکار Docker بعد از Boot نیز میتوانید بررسی کنید:
sudo systemctl is-enabled docker
اگر نیاز بود:
sudo systemctl enable docker
بررسی نسخه Docker
برای مشاهده نسخه CLI:
docker --version
برای اطلاعات کاملتر:
sudo docker version
همچنین:
sudo docker info
اطلاعاتی درباره Docker Engine، Storage Driver، تعداد Containerها، Imageها و تنظیمات محیط نمایش میدهد.
مرحله نهم: اجرای اولین Container با hello-world
Docker یک Image کوچک برای بررسی نصب صحیح دارد.
اجرا کنید:
sudo docker run hello-world
اگر Image روی سرور موجود نباشد، Docker ابتدا آن را Download میکند و سپس یک Container از آن میسازد.
در نصب موفق، پیامی با مفهوم اجرای صحیح Docker مشاهده خواهید کرد.
این تست چند اتفاق را بررسی میکند:
Docker CLI
↓
Docker daemon
↓
دریافت Image
↓
ساخت Container
↓
اجرای Container
↓
نمایش خروجی
بعد از اجرای موفق hello-world، Docker Engine آماده استفاده است.
مشاهده Containerها
برای مشاهده Containerهای در حال اجرا:
sudo docker ps
از آنجا که hello-world بعد از نمایش پیام خود خارج میشود، معمولاً در این لیست دیده نمیشود.
برای مشاهده همه Containerها، حتی Containerهای متوقفشده:
sudo docker ps -a
مشاهده Imageهای Docker
برای دیدن Imageهای موجود روی سرور:
sudo docker images
یا شکل جدیدتر دستور:
sudo docker image ls
بعد از اجرای hello-world باید Image مربوط به آن را در این فهرست ببینید.
اجرای یک Nginx داخل Docker
برای یک تست واقعیتر میتوانیم یک Container از Nginx اجرا کنیم.
ابتدا:
sudo docker run -d \
--name netzo-nginx \
-p 8080:80 \
nginx:latest
پارامترها:
-d
Container را در Background اجرا میکند.
--name netzo-nginx
یک نام برای Container مشخص میکند.
و:
-p 8080:80
پورت 8080 سرور را به پورت 80 داخل Container متصل میکند.
حالا بررسی کنید:
sudo docker ps
باید Container با نام:
netzo-nginx
را ببینید.
تست Nginx Container
از داخل سرور:
curl http://127.0.0.1:8080
اگر Container درست اجرا شده باشد، HTML صفحه Nginx دریافت میشود.
اگر پورت 8080 از اینترنت قابل دسترسی باشد، میتوان از مرورگر نیز آدرس زیر را تست کرد:
http://SERVER_IP:8080
اما قبل از باز کردن Portهای Container روی اینترنت، بخش Firewall این مقاله را حتماً مطالعه کنید.
نکته امنیتی مهم درباره Docker و UFW
اگر روی Ubuntu از UFW استفاده میکنید، باید یک نکته مهم را بدانید.
وقتی یک Port را با Docker Publish میکنید، مانند:
-p 8080:80
Docker Ruleهای شبکه خودش را ایجاد میکند و در بعضی سناریوها ترافیک Published Portها میتواند رفتاری متفاوت از چیزی داشته باشد که صرفاً از قوانین UFW انتظار دارید.
به همین دلیل نباید تصور کنید که چون یک Port در UFW مجاز نشده، هر Port منتشرشده توسط Docker الزاماً از اینترنت غیرقابل دسترسی است.
بعد از Publish کردن Portها همیشه وضعیت واقعی شبکه را بررسی کنید.
برای دیدن Portهای Listening روی سرور:
sudo ss -ltnp
و برای بررسی Portهای Publishشده Docker:
sudo docker ps
اگر فقط میخواهید Port یک Container از خود سرور قابل دسترسی باشد، میتوانید آن را به Loopback Bind کنید.
برای مثال:
sudo docker run -d \
--name local-nginx \
-p 127.0.0.1:8080:80 \
nginx:latest
در این حالت Port روی:
127.0.0.1:8080
Bind میشود و مستقیماً روی تمام Interfaceهای سرور منتشر نمیشود.
برای آشنایی بیشتر با تنظیم Firewall روی Ubuntu، مقاله آموزش فایروال UFW در اوبونتو را نیز ببینید.
متوقف کردن Container
برای Stop کردن Nginx آزمایشی:
sudo docker stop netzo-nginx
بررسی:
sudo docker ps
Container دیگر در لیست Runningها نیست.
اما همچنان وجود دارد و با دستور زیر دیده میشود:
sudo docker ps -a
اجرای مجدد Container
برای Start کردن همان Container:
sudo docker start netzo-nginx
و دوباره:
sudo docker ps
Restart کردن Container
برای Restart:
sudo docker restart netzo-nginx
حذف Container
ابتدا Container را متوقف کنید:
sudo docker stop netzo-nginx
سپس حذف کنید:
sudo docker rm netzo-nginx
یا در صورت نیاز به Stop و حذف اجباری:
sudo docker rm -f netzo-nginx
قبل از اجرای -f مطمئن شوید Container و Processهای داخل آن دیگر موردنیاز نیستند.
حذف Docker Image
برای حذف Image ابتدا آن را پیدا کنید:
sudo docker image ls
سپس:
sudo docker image rm nginx:latest
اگر Containerی هنوز به Image وابسته باشد، ممکن است Docker اجازه حذف آن را ندهد.
اجرای Docker بدون sudo
بهصورت پیشفرض ممکن است برای اجرای دستورات Docker نیاز به sudo داشته باشید.
برای اضافه کردن کاربر فعلی به گروه docker:
sudo usermod -aG docker $USER
برای اعمال عضویت جدید، سادهترین روش این است که Session فعلی SSH را ببندید و دوباره وارد شوید.
سپس تست کنید:
docker ps
بدون sudo.
هشدار امنیتی درباره گروه docker
عضویت در گروه docker دسترسی بسیار قدرتمندی به سیستم ایجاد میکند و عملاً میتواند امکان انجام عملیات در سطح Root را فراهم کند.
بنابراین فقط کاربران مورد اعتماد را به این گروه اضافه کنید.
برای سرورهایی با نیازهای امنیتی خاص میتوانید روشهای دیگری مانند Rootless Docker را نیز بررسی کنید.
Docker Compose چیست؟
در پروژه واقعی معمولاً فقط یک Container نداریم.
فرض کنید یک اپلیکیشن شامل موارد زیر باشد:
Web Application
Database
Redis
Reverse Proxy
مدیریت هر سرویس با دستورهای جداگانه docker run به مرور سخت میشود.
Docker Compose اجازه میدهد سرویسهای پروژه را در یک فایل YAML تعریف کنید و Stack را با چند دستور مدیریت کنید.
در روش نصب رسمی که در این مقاله استفاده کردیم، Plugin مربوط به Compose با Package زیر نصب شده است:
docker-compose-plugin
برای بررسی نسخه:
docker compose version
توجه کنید در نسخههای جدید دستور Compose به شکل زیر است:
docker compose
نه الزاماً:
docker-compose
یک Docker Compose ساده برای Nginx
یک پوشه آزمایشی بسازید:
mkdir -p ~/docker-nginx
cd ~/docker-nginx
فایل Compose ایجاد کنید:
nano compose.yaml
محتوا:
services:
web:
image: nginx:latest
ports:
- "8080:80"
restart: unless-stopped
سپس Stack را اجرا کنید:
docker compose up -d
وضعیت:
docker compose ps
مشاهده Log:
docker compose logs
مشاهده زنده Log:
docker compose logs -f
متوقف کردن Stack:
docker compose down
restart policy در Docker چیست؟
اگر Container قرار است سرویس دائمی باشد، بهتر است رفتار آن بعد از Crash یا Restart سرور مشخص باشد.
یکی از Policyهای رایج:
unless-stopped
است.
مثلاً:
docker run -d \
--name web \
--restart unless-stopped \
-p 8080:80 \
nginx:latest
این Policy در سناریوهای زیادی مناسب است، اما انتخاب نهایی باید متناسب با رفتار موردنظر سرویس شما باشد.
مشاهده Logهای Container
برای دیدن Logهای یک Container:
docker logs netzo-nginx
برای مشاهده آخرین 100 خط:
docker logs --tail 100 netzo-nginx
برای مشاهده Live:
docker logs -f netzo-nginx
برای خروج:
Ctrl + C
ورود به Shell داخل Container
اگر Container ابزار Shell مناسب داشته باشد میتوانید وارد آن شوید.
برای Nginx:
docker exec -it netzo-nginx /bin/sh
در بعضی Imageها Bash نیز وجود دارد:
docker exec -it CONTAINER_NAME /bin/bash
اما همه Imageها bash ندارند.
برای خروج:
exit
مشاهده مصرف منابع Containerها
برای مشاهده CPU و RAM:
docker stats
خروجی اطلاعاتی مانند:
CPU
Memory
Network I/O
Block I/O
تعداد Processها
را نمایش میدهد.
برای خروج:
Ctrl + C
این دستور برای بررسی سریع Containerهایی که منابع زیادی مصرف میکنند بسیار کاربردی است.
Docker Volume چیست؟
اگر اطلاعات مهم را فقط داخل لایه قابلنوشتن خود Container نگهداری کنید، مدیریت و ماندگاری دادهها دشوار میشود.
Docker Volume برای نگهداری Persistent Data طراحی شده است.
مشاهده Volumeها:
docker volume ls
ساخت Volume:
docker volume create app-data
بررسی:
docker volume inspect app-data
برای Databaseها و سرویسهایی که داده مهم دارند، طراحی درست Storage و Backup بسیار مهم است.
حذف یک Container نباید به معنی حذف ناخواسته دیتابیس یا اطلاعات مهم شما باشد.
Docker Network چیست؟
Docker برای ارتباط Containerها از Networkهای مجازی استفاده میکند.
مشاهده Networkها:
docker network ls
ساخت Network:
docker network create app-network
در پروژههای Compose معمولاً Networkهای موردنیاز بهصورت خودکار مدیریت میشوند.
دستورات ضروری Docker در یک نگاه
نسخه Docker:
docker --version
وضعیت سرویس:
sudo systemctl status docker
Containerهای فعال:
docker ps
همه Containerها:
docker ps -a
Imageها:
docker image ls
Volumeها:
docker volume ls
Networkها:
docker network ls
Log یک Container:
docker logs CONTAINER_NAME
Stop:
docker stop CONTAINER_NAME
Start:
docker start CONTAINER_NAME
Restart:
docker restart CONTAINER_NAME
حذف Container:
docker rm CONTAINER_NAME
دریافت Image:
docker pull IMAGE_NAME
مشاهده مصرف منابع:
docker stats
بررسی Compose:
docker compose version
خطای permission denied هنگام اجرای Docker
اگر دستور:
docker ps
خطای Permission داد اما:
sudo docker ps
کار کرد، کاربر شما احتمالاً اجازه دسترسی مستقیم به Docker Socket را ندارد.
میتوانید کاربر را به گروه Docker اضافه کنید:
sudo usermod -aG docker $USER
سپس از Session خارج شوید و دوباره وارد شوید.
بعد:
docker ps
را تست کنید.
باز هم تأکید میکنیم که عضویت در گروه docker سطح دسترسی قدرتمندی ایجاد میکند.
خطای Cannot connect to the Docker daemon
اگر خطایی مشابه:
Cannot connect to the Docker daemon
دیدید، ابتدا وضعیت سرویس را بررسی کنید:
sudo systemctl status docker
اگر متوقف بود:
sudo systemctl start docker
سپس:
sudo docker info
را اجرا کنید.
برای مشاهده Log سرویس:
sudo journalctl -u docker -n 100 --no-pager
خطای port is already allocated
اگر هنگام اجرای Container با خطایی مربوط به اشغال بودن Port روبهرو شدید، احتمالاً Port موردنظر روی Host از قبل استفاده میشود.
مثلاً برای Port 8080:
sudo ss -ltnp | grep ':8080'
همچنین Containerهای فعلی را ببینید:
docker ps
در صورت نیاز Port دیگری Publish کنید:
docker run -d \
--name netzo-nginx-2 \
-p 8081:80 \
nginx:latest
Docker چه مقدار RAM نیاز دارد؟
Docker بهتنهایی معیار ثابتی برای RAM موردنیاز یک VPS تعیین نمیکند.
مصرف واقعی منابع بیشتر به Containerهایی بستگی دارد که اجرا میکنید.
برای مثال:
Nginx ساده
ممکن است منابع بسیار کمی مصرف کند، در حالی که:
Database + Application + Redis + Worker
به RAM و CPU بیشتری نیاز دارد.
برای مشاهده مصرف واقعی:
docker stats
را بررسی کنید.
اگر هنوز نمیدانید چه منابعی برای VPS لازم دارید، مقاله راهنمای انتخاب منابع VPS؛ چقدر RAM، CPU و فضای دیسک نیاز داریم؟ را مطالعه کنید.
آیا Docker جایگزین VPS است؟
خیر.
VPS یک ماشین مجازی با منابع مشخص است.
Docker روی یک سیستمعامل اجرا میشود و Containerها را مدیریت میکند.
یک معماری معمول:
Physical Server
↓
Virtualization
↓
VPS
↓
Ubuntu
↓
Docker Engine
↓
Containers
بنابراین Docker و VPS دو مفهوم در لایههای متفاوت هستند.
آیا Docker جایگزین Virtual Machine است؟
نه دقیقاً.
VM معمولاً سیستمعامل و Kernel مستقل خودش را دارد.
Containerها Kernel میزبان را به اشتراک میگذارند و معمولاً سبکتر هستند.
نمای ساده:
Virtual Machine:
Hardware
→ Hypervisor
→ Guest OS
→ Application
در مقابل:
Container:
Hardware
→ Host OS
→ Docker
→ Container
هر کدام کاربردهای خاص خودشان را دارند و Docker لزوماً جایگزین تمام سناریوهای Virtual Machine نیست.
چند نکته امنیتی مهم برای Docker روی VPS
اگر Docker را روی سرور Production اجرا میکنید:
Docker Engine و سیستمعامل را بهروز نگه دارید.
Imageها را از منابع قابل اعتماد دریافت کنید.
Portهای غیرضروری را Publish نکنید.
به رفتار Docker در کنار UFW توجه کنید.
Containerها را بیدلیل با دسترسی Privileged اجرا نکنید.
Secretها و Passwordها را داخل Image قرار ندهید.
برای دادههای مهم Backup داشته باشید.
منابع Containerها را مانیتور کنید.
تنها کاربران مورد اعتماد را عضو گروه
dockerکنید.قبل از اجرای Image ناشناس، منبع و Dockerfile آن را بررسی کنید.
Docker مدیریت نرمافزار را سادهتر میکند، اما Configuration اشتباه میتواند سطح حمله سرور را افزایش دهد.
آیا روش curl | sh برای نصب Docker مناسب است؟
ممکن است در اینترنت دستورهایی شبیه زیر ببینید:
curl -fsSL https://get.docker.com | sh
Docker یک Convenience Script برای نصب سریع ارائه میکند، اما مستندات رسمی آن را بیشتر برای محیطهای Development و Testing مناسب میدانند و برای Production روش Repository را پیشنهاد میکنند.
در این مقاله از Repository رسمی APT استفاده کردیم تا منبع Packageها و فرآیند Update شفافتر باشد.
چگونه Docker را Update کنیم؟
اگر Docker را از Repository رسمی نصب کرده باشید، ابتدا:
sudo apt update
سپس نسخههای قابل Upgrade را بررسی کنید:
apt list --upgradable
و Packageهای Docker را طبق سیاست Update سرور خود ارتقا دهید.
برای سرور Production بهتر است قبل از Major Upgrade، Release Noteها و سازگاری سرویسهای در حال اجرا را بررسی کنید.
حذف Docker از Ubuntu
اگر فقط میخواهید Packageهای Docker Engine را حذف کنید:
sudo apt purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
اما دقت کنید حذف Packageها لزوماً دادههای Docker را پاک نمیکند.
مسیرهایی مانند:
/var/lib/docker
/var/lib/containerd
ممکن است همچنان اطلاعات Imageها، Volumeها یا Runtime را داشته باشند.
هشدار: حذف دستی این مسیرها میتواند تمام دادههای Docker را از بین ببرد. روی سرور دارای اطلاعات مهم، بدون Backup و بررسی دقیق این کار را انجام ندهید.
چکلیست بعد از نصب Docker
بعد از پایان نصب بهتر است این موارد را بررسی کنید:
نسخه Ubuntu پشتیبانی میشود.
Repository رسمی Docker اضافه شده است.
Docker Engine نصب شده است.
سرویس Docker در حال اجرا است.
دستور
hello-worldبا موفقیت اجرا میشود.Docker Compose در دسترس است.
دسترسی کاربران به Docker بررسی شده است.
Portهای Publishشده کنترل شدهاند.
رفتار Firewall بررسی شده است.
برای Volumeهای مهم Backup در نظر گرفته شده است.
Containerهای Production دارای Monitoring مناسب هستند.
سوالات متداول
Docker Engine چیست؟
Docker Engine بخش اصلی Docker برای ساخت و اجرای Containerها روی سیستم است و شامل Docker Daemon و ابزارهای مرتبط میشود.
آیا Docker روی Ubuntu 24.04 نصب میشود؟
بله. Ubuntu 24.04 LTS در فهرست نسخههای پشتیبانیشده Docker Engine قرار دارد.
آیا Docker روی Ubuntu 26.04 نصب میشود؟
در زمان نگارش این مقاله، Ubuntu 26.04 LTS نیز در مستندات رسمی Docker برای نصب Docker Engine روی Ubuntu فهرست شده است.
آیا برای Docker باید از sudo استفاده کنیم؟
بهصورت پیشفرض معمولاً بله. میتوانید کاربر را به گروه docker اضافه کنید، اما باید بدانید این گروه سطح دسترسی بسیار قدرتمندی روی سیستم ایجاد میکند.
Docker Compose جداگانه نصب میشود؟
اگر از دستور نصب این مقاله استفاده کرده باشید، Package زیر نصب میشود:
docker-compose-plugin
و Compose با دستور:
docker compose
در دسترس خواهد بود.
چگونه بفهمیم Docker درست نصب شده است؟
ابتدا:
sudo systemctl status docker
را بررسی کنید و سپس:
sudo docker run hello-world
را اجرا کنید.
آیا Docker با UFW مشکل دارد؟
Docker Ruleهای شبکه خودش را مدیریت میکند و Published Portهای Containerها ممکن است دقیقاً مطابق تصور ساده از Ruleهای UFW رفتار نکنند. بنابراین پس از Publish کردن Portها، دسترسی واقعی شبکه را بررسی کنید و روی Production طراحی Firewall را با دقت انجام دهید.
جمعبندی
Docker یکی از کاربردیترین ابزارها برای اجرای سرویسها و اپلیکیشنها روی VPS است.
در این آموزش Docker Engine را از Repository رسمی نصب کردیم:
Ubuntu VPS
↓
Docker Repository
↓
Docker Engine
↓
Docker CLI
↓
containerd
↓
Docker Compose
سپس نصب را با:
sudo docker run hello-world
آزمایش کردیم و یک Container واقعی Nginx نیز اجرا کردیم.
برای شروع کار روزمره، این چند دستور را به خاطر بسپارید:
docker ps
docker ps -a
docker image ls
docker logs CONTAINER_NAME
docker stats
docker compose ps
مهمتر از خود نصب Docker، مدیریت صحیح Portها، Volumeها، Updateها، Backup و دسترسی کاربران است؛ مخصوصاً زمانی که Containerها روی یک VPS عمومی و Production اجرا میشوند.



