راهنمای گام به گام نصب داکر روی اوبونتو

راهنمای گام به گام نصب داکر روی اوبونتو

داکر (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

۲۰
۱۴۰۴/۲/۱۵