لینوکس

آموزش نصب Docker روی Ubuntu؛ راه‌اندازی Docker Engine و اجرای اولین کانتینر

در این آموزش Docker Engine را از مخزن رسمی Docker روی Ubuntu نصب می‌کنیم، سرویس Docker را بررسی می‌کنیم، اولین کانتینر را اجرا می‌کنیم و با دستورات ضروری Docker آشنا می‌شویم.

آموزش نصب Docker روی Ubuntu؛ راه‌اندازی Docker Engine و اجرای اولین کانتینر
ارشیا درستکار
ارشیا درستکار
نویسنده و کارشناس
41 دقیقه • ۸ آبان ۱۴۰۵• ۱۹

اگر قصد اجرای اپلیکیشن‌های مختلف روی یک سرور مجازی 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 Engine

  • docker-ce-cli برای Docker CLI

  • containerd.io برای Container Runtime

  • docker-buildx-plugin برای قابلیت‌های پیشرفته Build

  • docker-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 اجرا می‌کنید:

  1. Docker Engine و سیستم‌عامل را به‌روز نگه دارید.

  2. Imageها را از منابع قابل اعتماد دریافت کنید.

  3. Portهای غیرضروری را Publish نکنید.

  4. به رفتار Docker در کنار UFW توجه کنید.

  5. Containerها را بی‌دلیل با دسترسی Privileged اجرا نکنید.

  6. Secretها و Passwordها را داخل Image قرار ندهید.

  7. برای داده‌های مهم Backup داشته باشید.

  8. منابع Containerها را مانیتور کنید.

  9. تنها کاربران مورد اعتماد را عضو گروه docker کنید.

  10. قبل از اجرای 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 اجرا می‌شوند.

مطالب مرتبط

ارشیا درستکار

نویسنده مقالات تخصصی و آموزشی در وبلاگ نتزو.

مشاهده تمام مقالات این نویسنده

مقالات مرتبط و پیشنهادی