- پیشنیازها
- مرحله ۱ — نصب Docker
- مرحله ۲ — اجرای دستور Docker بدون sudo (اختیاری)
- مرحله ۳ — استفاده از دستور Docker
- مرحله ۴ — کار با ایمیجهای Docker
- مرحله ۵ — اجرای یک کانتینر Docker
- مرحله ۶ — مدیریت کانتینرهای داکر
- مرحله ۷ — ثبت تغییرات کانتینر در یک تصویر جدید داکر
- مرحله ۸ — ارسال تصویر داکر به مخزن (Docker Repository)

راهنمای گام به گام نصب داکر روی اوبونتو
داکر (Docker) برنامهای است که فرآیند مدیریت فرآیندهای برنامه در کانتینرها (Containers) را ساده میکند. کانتینرها به شما امکان میدهند برنامههای خود را در فرآیندهای ایزوله از منابع اجرا کنید. آنها شبیه ماشینهای مجازی هستند، اما کانتینرها قابل حملتر، سازگارتر با منابع و وابستهتر به سیستم عامل میزبان هستند.
برای آشنایی دقیق با اجزای مختلف یک کانتینر Docker، به مقالهی «The Docker Ecosystem: An Introduction to Common Components» مراجعه کنید.
در این آموزش، شما نسخهی Community Edition (CE) داکر را روی اوبونتو نصب و استفاده خواهید کرد. شما داکر را نصب کرده، با کانتینرها و ایمیجها کار خواهید کرد، و یک ایمیج را به یک ریپازیتوری Docker ارسال خواهید کرد. همچنین خواهید آموخت چگونه کانتینرها را راهاندازی، متوقف و حذف کنید و چگونه تغییرات داخل یک کانتینر را در قالب یک ایمیج جدید ذخیره (commit) نمایید. این آموزش همچنین نحوهی نصب Docker با پشتیبانی از GPU، خطاهای رایج و نحوهی رفع آنها، و نکات امنیتی را پوشش میدهد.
پیشنیازها
برای دنبال کردن این آموزش، به موارد زیر نیاز دارید:
- یک سرور اوبونتو که با راهنمای راهاندازی اولیهی سرور اوبونتو راهاندازی شده است، شامل یک کاربر غیر ریشه با دسترسی sudo و یک فایروال.
- یک حساب کاربری در Docker Hub در صورتی که بخواهید ایمیجهای خود را ایجاد و به Docker Hub ارسال کنید، همانطور که در مراحل ۷ و ۸ نشان داده شده است.
مرحله ۱ — نصب Docker
نسخهی موجود از بستهی نصب Docker در مخزن رسمی اوبونتو ممکن است جدیدترین نباشد. برای اطمینان از دریافت جدیدترین نسخه، Docker را از مخزن رسمی Docker نصب میکنیم. برای این کار، یک منبع بستهی جدید اضافه میکنیم، کلید GPG مربوط به Docker را اضافه میکنیم تا اطمینان حاصل شود که دانلودها معتبر هستند، و سپس بسته را نصب میکنیم.
ابتدا لیست بستههای موجود را بهروزرسانی کنید:
sudo apt update
سپس چند بستهی پیشنیاز نصب کنید که به apt اجازه میدهد از بستههای HTTPS استفاده کند:
sudo apt install apt-transport-https ca-certificates curl software-properties-common
سپس کلید GPG مخزن رسمی Docker را به سیستم خود اضافه کنید:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
مخزن Docker را به منابع APT اضافه کنید:
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
لیست بستهها را مجدداً بهروزرسانی کنید تا اضافه شدن مخزن جدید شناسایی شود:
sudo apt update
اطمینان حاصل کنید که Docker از مخزن Docker نصب خواهد شد نه مخزن پیشفرض اوبونتو:
apt-cache policy docker-ce
خروجی مشابه زیر خواهید دید (شماره نسخه ممکن است متفاوت باشد):
docker-ce:
Installed: (none)
Candidate: 5:20.10.14~3-0~ubuntu-jammy
Version table:
5:20.10.14~3-0~ubuntu-jammy 500
500 https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
...
در نهایت، Docker را نصب کنید:
sudo apt install docker-ce
اکنون Docker نصب شده، سرویس آن راهاندازی شده و بهطور خودکار در هنگام بوت فعال شده است. برای بررسی اجرای آن:
sudo systemctl status docker
خروجی نشان خواهد داد که سرویس فعال است:
● docker.service - Docker Application Container Engine
Loaded: loaded ...
Active: active (running) ...
اکنون شما هم سرویس Docker (daemon) و هم ابزار خط فرمان Docker (کلاینت) را دارید. در ادامهی آموزش از این ابزار استفاده خواهیم کرد.
مرحله ۲ — اجرای دستور Docker بدون sudo (اختیاری)
بهطور پیشفرض، فقط کاربران ریشه یا عضو گروه docker میتوانند از دستور docker استفاده کنند. اگر بدون sudo
یا بدون عضویت در گروه docker دستور را اجرا کنید، خروجیای مشابه زیر دریافت خواهید کرد:
docker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?.
برای جلوگیری از وارد کردن sudo
در هر بار اجرای دستور، کاربر خود را به گروه docker اضافه کنید:
sudo usermod -aG docker ${USER}
برای اعمال تغییرات، یا از سرور خارج و دوباره وارد شوید، یا دستور زیر را وارد کنید:
su - ${USER}
سپس رمز عبور کاربرتان را وارد کنید.
برای بررسی اینکه کاربر شما در گروه docker است:
groups
خروجی:
sammy sudo docker
اگر میخواهید کاربر دیگری را (که وارد سیستم نیستید) اضافه کنید:
sudo usermod -aG docker username
در ادامهی مقاله فرض بر این است که شما عضو گروه docker هستید. در غیر این صورت باید همهی دستورات را با sudo
اجرا کنید.
مرحله ۳ — استفاده از دستور Docker
دستور docker به شکل زیر استفاده میشود:
docker [option] [command] [arguments]
برای مشاهدهی همهی زیردستورات:
docker
برای مثال، خروجی دستور بالا شامل مواردی مانند build
, run
, pull
, ps
, start
, stop
، و غیره است.
برای مشاهدهی راهنمای یک زیردستور خاص:
docker docker-subcommand --help
برای مشاهدهی اطلاعات کلی سیستم:
docker info
در ادامه برخی از این دستورات را بررسی خواهیم کرد. ابتدا با ایمیجها کار خواهیم کرد.
مرحله ۴ — کار با ایمیجهای Docker
کانتینرهای Docker از ایمیجها ساخته میشوند. بهطور پیشفرض، Docker این ایمیجها را از Docker Hub دریافت میکند. شما میتوانید بررسی کنید که آیا دسترسی به ایمیجهای Docker Hub دارید یا خیر:
docker run hello-world
خروجی نشان میدهد که Docker بهدرستی کار میکند:
Hello from Docker!
...
اگر ایمیج بهصورت محلی موجود نباشد، Docker آن را از Docker Hub دریافت میکند.
برای جستجوی ایمیجها:
docker search ubuntu
خروجی فهرستی از ایمیجهای مرتبط با "ubuntu" را نشان میدهد.
برای دانلود یک ایمیج:
docker pull ubuntu
برای دیدن لیست ایمیجهای دانلودشده:
docker images
خروجی مانند زیر خواهد بود:
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 1d622ef86b13 3 weeks ago 73.9MB
hello-world latest bf756fb1ae65 4 months ago 13.3kB
در ادامه خواهیم دید که چگونه از این ایمیجها برای اجرای کانتینر استفاده کنیم.
مرحله ۵ — اجرای یک کانتینر Docker
کانتینر hello-world فقط پیامی را نمایش میدهد و سپس خاتمه مییابد. اما کانتینرها میتوانند تعاملی باشند و مانند ماشینهای مجازی رفتار کنند.
برای مثال، برای اجرای یک کانتینر از ایمیج Ubuntu به صورت تعاملی:
docker run -it ubuntu
خط فرمان شما به این صورت تغییر خواهد کرد:
root@d9b100f2f636:/#
در اینجا، شناسهی کانتینر d9b100f2f636
است که بعداً برای مدیریت یا حذف آن نیاز خواهید داشت.
حتماً، در ادامه ترجمه کامل و بدون خلاصهی متن شما به فارسی آمده است:
اکنون میتوانید هر دستوری را درون کانتینر اجرا کنید. به عنوان مثال، بیایید پایگاه داده بستهها را در داخل کانتینر بهروز کنیم. نیازی به اضافه کردن پیشوند sudo
به دستورات نیست، زیرا شما به عنوان کاربر ریشه در داخل کانتینر فعالیت میکنید:
apt update
سپس هر برنامهای که خواستید را در آن نصب کنید. بیایید Node.js را نصب کنیم:
apt install nodejs
این دستور Node.js را از مخازن رسمی اوبونتو درون کانتینر نصب میکند. پس از پایان نصب، برای بررسی نصب شدن Node.js، دستور زیر را اجرا کنید:
node -v
شما شماره نسخه را در ترمینال خود مشاهده خواهید کرد:
خروجی
v12.22.9
هر تغییری که در داخل کانتینر اعمال کنید فقط بر همان کانتینر تأثیر دارد.
برای خروج از کانتینر، در خط فرمان exit
تایپ کنید.
حالا بیایید به مدیریت کانتینرهای موجود در سیستم خود بپردازیم.
مرحله ۶ — مدیریت کانتینرهای داکر
پس از استفاده از داکر برای مدتی، کانتینرهای فعال (در حال اجرا) و غیرفعال زیادی در سیستم خود خواهید داشت. برای مشاهده کانتینرهای فعال از دستور زیر استفاده کنید:
docker ps
خروجیای مشابه زیر خواهید دید:
خروجی
CONTAINER ID IMAGE COMMAND CREATED
در این آموزش، شما دو کانتینر اجرا کردید: یکی از تصویر hello-world و دیگری از تصویر ubuntu. هر دو کانتینر دیگر اجرا نمیشوند، اما هنوز در سیستم شما وجود دارند.
برای مشاهده تمامی کانتینرها — فعال و غیرفعال — از سوئیچ -a
استفاده کنید:
docker ps -a
خروجی مشابه زیر را خواهید دید:
خروجی
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1c08a7a0d0e4 ubuntu "bash" About a minute ago Exited (0) 7 seconds ago dazzling_taussig
587000e49d53 hello-world "/hello" 5 minutes ago Exited (0) 5 minutes ago adoring_kowalevski
برای مشاهده آخرین کانتینری که ساختهاید، از سوئیچ -l
استفاده کنید:
docker ps -l
خروجی
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1c08a7a0d0e4 ubuntu "bash" 3 minutes ago Exited (0) 2 minutes ago dazzling_taussig
برای راهاندازی مجدد یک کانتینر متوقف شده، از دستور docker start
با شناسه یا نام کانتینر استفاده کنید. مثلاً برای کانتینر ubuntu با شناسه 1c08a7a0d0e4:
docker start 1c08a7a0d0e4
کانتینر راهاندازی میشود و با دستور docker ps
میتوانید وضعیت آن را ببینید:
خروجی
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1c08a7a0d0e4 ubuntu "bash" 6 minutes ago Up 8 seconds dazzling_taussig
برای متوقف کردن یک کانتینر در حال اجرا، از دستور docker stop
استفاده کنید:
docker stop dazzling_taussig
وقتی تصمیم گرفتید که دیگر به یک کانتینر نیاز ندارید، با دستور docker rm
آن را حذف کنید:
docker rm adoring_kowalevski
برای ساخت کانتینر جدید با نام دلخواه، از گزینه --name
استفاده کنید. همچنین با استفاده از --rm
میتوانید کانتینری بسازید که پس از توقف، خودکار حذف شود. برای اطلاعات بیشتر، از دستور docker run --help
استفاده کنید.
کانتینرها را میتوان به تصویرهایی تبدیل کرد که میتوانید برای ساخت کانتینرهای جدید از آنها استفاده کنید.
مرحله ۷ — ثبت تغییرات کانتینر در یک تصویر جدید داکر
زمانی که یک تصویر داکر را اجرا میکنید، میتوانید مانند یک ماشین مجازی، فایلهایی را ایجاد، تغییر یا حذف کنید. این تغییرات فقط روی همان کانتینر اعمال میشوند. اگر کانتینر را حذف کنید، تغییرات نیز برای همیشه از بین میروند.
در این بخش، یاد میگیرید که چگونه وضعیت فعلی یک کانتینر را به عنوان یک تصویر داکر جدید ذخیره کنید.
پس از نصب Node.js در کانتینر اوبونتو، کانتینر فعلی شما نسبت به تصویری که از آن ساخته شده متفاوت است. شاید بخواهید از این کانتینر Node.js به عنوان پایهای برای تصاویر جدید استفاده کنید.
برای ثبت تغییرات از دستور زیر استفاده کنید:
docker commit -m "شرح تغییرات" -a "نام نویسنده" container_id نام_مخزن/نام_تصویر_جدید
مثال برای کاربری به نام sammy:
docker commit -m "added Node.js" -a "sammy" d9b100f2f636 sammy/ubuntu-nodejs
این تصویر جدید به صورت محلی ذخیره میشود. برای مشاهده آن:
docker images
خروجی
REPOSITORY TAG IMAGE ID CREATED SIZE
sammy/ubuntu-nodejs latest 7c1f35226ca6 7 seconds ago 179MB
...
در این مثال، تصویر جدید ubuntu-nodejs
از تصویر ubuntu
ساخته شده و تغییر آن نصب Node.js بوده است.
مرحله ۸ — ارسال تصویر داکر به مخزن (Docker Repository)
پس از ساخت یک تصویر، میتوانید آن را با دیگران به اشتراک بگذارید. برای این کار باید در Docker Hub حساب کاربری داشته باشید.
ابتدا وارد حساب خود شوید:
docker login -u نامکاربری
اگر نام کاربری شما با نام محلی تصویر متفاوت است، تصویر را برچسبگذاری (tag) کنید:
docker tag sammy/ubuntu-nodejs نامکاربری/ubuntu-nodejs
سپس تصویر را بارگذاری کنید:
docker push نامکاربری/نامتصویر
مثال:
docker push sammy/ubuntu-nodejs
اگر push به خطا خورد و پیامی مانند زیر دیدید:
unauthorized: authentication required
با docker login
وارد شوید و دوباره تلاش کنید.
نصب Docker با پشتیبانی از GPU
برای نصب داکر با پشتیبانی از GPU، مراحل زیر را دنبال کنید:
۱. مطمئن شوید که GPU NVIDIA سازگار دارید.
۲. درایور NVIDIA را نصب کنید.
۳. پکیج nvidia-docker2
را نصب کنید:
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 && sudo apt install nvidia-docker2
sudo service docker restart
برای تست:
sudo docker run --gpus all nvidia/cuda:10.2-base nvidia-smi
بهترین شیوههای امنیتی داکر
- اصل کمترین سطح دسترسی را رعایت کنید.
- کانتینرها را با کاربران غیرریشه اجرا کنید.
- نسخه داکر را بهروز نگه دارید.
- از Docker Content Trust استفاده کنید.
- فقط پورتهای ضروری را باز بگذارید.
استفاده از Docker Compose
Docker Compose ابزاری برای تعریف و اجرای برنامههای چندکانتینری است. مزایای آن:
- سادگی در استقرار برنامه
- مدیریت آسان سرویسها
- قابلیت کنترل نسخه تنظیمات
حذف بستههای Docker
برای حذف کامل داکر:
dpkg -l | grep docker
sudo apt remove docker-ce
sudo apt autoremove
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
sudo rm /etc/apt/sources.list.d/docker.list
sudo rm /etc/apt/keyrings/docker.asc
خطاهای رایج و رفع آنها
داکر اجرا نمیشود:
بررسی وضعیت:
sudo systemctl status docker
sudo journalctl -u docker
sudo systemctl restart docker
خطای دسترسی:
اضافه کردن کاربر به گروه docker:
sudo usermod -aG docker ${USER}
سوالات متداول
نصب داکر در Ubuntu 22.04:
sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
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
sudo apt update
sudo apt install docker-ce
بررسی نصب بودن داکر:
sudo systemctl status docker
اجرای داکر بدون sudo:
sudo usermod -aG docker ${USER}
حذف داکر:
sudo systemctl stop docker
sudo apt purge docker-ce
sudo apt autoremove
sudo rm /etc/apt/sources.list.d/docker.list
منبع DigitalOcean