داکر (Docker) یک پلتفرم متن‌باز برای ساخت، انتشار و اجرای اپلیکیشن‌هاست که استقرار آن‌ها را در یک محیط مستقل از سیستم عامل و بر بستر سخت‌افزاری میزبان ممکن می‌کند. در داکر، اپلیکیشن‌ها به‌شکل کانتینر (Container) اجرا می‌شوند که یکی از مزیت‌های آن، ایجاد محیطی ایزوله برای هر اپلیکیشن و جلوگیری از انتشار تغییرات در محیط سیستم عامل است. هم‌چنین به‌کمک داکر، می‌توانید اپلیکیشن‌های خود را به سادگی در بسترهای مختلف اجرا کنید و آن‌ها را در محیط‌های مختلف توسعه دهید، تست و یا اجرا کنید.

Docker با استفاده از تکنولوژی‌هایی مانند محیط اجرایی Docker Engine و Docker Compose ارا‌یه شده است و در حال حاضر به عنوان یکی از ابزارهای مهم IT شناخته می‌شود.

در این راهنما شیوه‌ی نصب داکر روی Ubuntu 20.04 را به‌شکل گام‌به‌گام بررسی می‌کنیم.

پیش‌نیازها

  • یک ابرک با سیستم‌عامل Ubuntu که دارای یک کاربر sudo و فایروال باشد.

  • یک حساب کاربری در Docker Hub

نصب داکر

پیش از نصب Docker برای اولین بار روی یک سرور، باید مخزن Docker را راه‌اندازی کنید، تا بتوانید داکر را از مخزن رسمی‌اش نصب و یا به‌روزرسانی کنید.

۱. ابتدا apt را به‌روز می‌کنیم و بسته‌هایی که امکان استفاده از یک مخزن روی پروتکل HTTPS را می‌دهند نصب می‌کنیم.

sudo apt-get update
sudo apt-get install \
     ca-certificates \
     curl \
     gnupg

۲. کلیدهای GPG رسمی داکر را به سرور اضافه می‌کنیم:

sudo install -m 0755 -d /etc/apt/keyrings   
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg   
sudo chmod a+r /etc/apt/keyrings/docker.gpg

۳. با استفاده از دستور زیر ریپازیتوری را تنظیم می‌کنیم:

echo \
     "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
     "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
     sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

۴. apt را آپدیت می‌کنیم:

sudo apt-get update

 

۵. با دستور زیر Docker Engine ،Containerd و Docker Compose را نصب می‌‌کنیم.

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

۶. به کمک دستور زیر و با اجرای ایمیج hello-word بررسی می‌کنیم که فرآیند نصب به درستی طی شده باشد:

sudo docker run hello-world

این دستور یک ایمیج را دریافت می‌کند و آن را در یک کانتینر اجرا می‌کند. سپس کانتینر یک پیام تایید نمایش داده و خارج می‌شود.

استفاده از داکر

برای استفاده از داکر باید از دستورهایی با عبارت docker و در قالب زیر استفاده کنیم:

docker [option] [command] [arguments]

برای مشاهده‌ی دستورهای ممکن می‌توانید از دستور زیر استفاده کنید:

docker

هم‌چنین می‌توانید به‌شکل زیر برای هر دستوری Optionهای ممکن را بررسی کنید:

docker docker-subcommand --help

کار کردن با ایمیج‌های داکر

کانتینرهای داکر در واقع از تصاویر یا Imageهای داکر ساخته می‌شوند. به‌طور پیش‌فرض، Docker این تصاویر را از Docker Hub، رجیستری رسمی داکر، Pull یا دریافت می‌کند. هر کسی می‌تواند تصاویر Docker خود را در Docker Hub میزبانی کند، و تصاویر بیش‌تر برنامه‌ها و توزیع‌های لینوکسی که به آن‌ها نیاز دارید، آن‌جا میزبانی می‌شوند.

با استفاده از ترکیب docker ،search و نام ایمیج می‌توانیم لیست‌ ایمیج‌های موجود در داکرهاب را در خروجی دریافت کنیم. برای نمونه، دستور زیر، لیستی از ایمیج‌های موجود Ubuntu را در خروجی نمایش می‌دهد:

docker search ubuntu

در ستون OFFICIAL، مقدار OK بیان‌گر این است که ایمیج به‌وسیله‌ی شرکت رسمی پروژه ساخته شده و پشتیبانی می‌شود. هنگامی که ایمیجی را که به‌دنبال آن بودید پیدا کردید، می‌توانید آن را با استفاده از دستور Pull دانلود کنید.

docker pull ubuntu

پس از دریافت یک ایمیج، می‌توانید با استفاده از آن و دستور run، یک کانتینر را اجرا کنید. همان‌طور که در مثال hello-world مشاهده کردید، اگر زمانی که Docker با دستور run اجرا شود و ایمیجی از پیش دانلود نشده باشد، ابتدا Docker ایمیج را دانلود می‌کند، سپس یک کانتینر را با استفاده از آن اجرا می‌کند.

برای مشاهده ایمیج‌هایی که در سیستم شما دانلود شده‌اند، دستور زیر را وارد کنید:

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

اجرای کانتینر داکر

کانتینر hello-world که در مرحله‌ی نصب داکر آن را اجرا کردیم، نمونه ای از یک کانتینر است که پس از ارسال یک پیام آزمایشی اجرا می‌شود و خارج می‌شود. کانتینرها می‌توانند بسیار مفیدتر از این و تعاملی باشند.

برای نمونه، یک کانتینر را با استفاده از آخرین تصویر اوبونتو اجرا می‌کنیم. ترکیب سوییچ‌های i و t به شما امکان دسترسی تعاملی Shell را به کانتینر می‌دهد:

docker run -it ubuntu

ترمینال شما باید تغییر کند تا نشان دهد که اکنون داخل کانتینر کار می‌کنید و باید به این شکل باشد:

root@a5c247g5h738:/#

به شناسه‌ی کانتینر در ترمینال توجه کنید. در این مثال a5c247g5h738 است.

اکنون می‌توانید هر دستوری را داخل کانتینر اجرا کنید. مثلن می‌توانید بسته‌های کانتینر را به‌روز کنید. نیازی به وارد کردن هیچ دستوری با sudo ندارید، زیرا به عنوان کاربر root داخل کانتینر کار می‌کنید:

apt update

سپس می‌توانید هر برنامه‌ای را در آن نصب کنید. مثلن با دستور زیر Node.js را نصب کنید:

apt install nodejs

پس از اتمام نصب، بررسی کنید که Node.js نصب شده باشد:

node -v

در خروجی نسخه‌ی آن را در ترمینال خود خواهید دید:

version 10.19.0

توجه داشته باشید که هر تغییری که داخل کانتینر ایجاد می‌کنید فقط برای همان کانتینر اعمال می‌شود.

برای خروج از کانتینر، exit را در ترمینال تایپ کنید.

مدیریت کانتینرها

پس از مدتی استفاده از Docker، کانتینرهای فعال (در حال اجرا) و غیرفعال زیادی در سرور خود خواهید داشت. برای بررسی موارد فعال از:

docker ps

خروجی مشابه زیر خواهید بود:

CONTAINER ID IMAGE COMMAND CREATED

در این راهنما شما دو کانتینر را شروع کردید. یکی از ایمیج hello-world و دیگری از ایمیج اوبونتو. هر دو کانتینر دیگر در حال اجرا نیستند، اما هم‌چنان در سیستم شما وجود دارند.

برای مشاهده همه کانتینرها، فعال و غیر فعال، docker ps را با سوییچ a اجرا کنید:

docker ps -a

خروجی‌ای که خواهید دید:

1c08a7a0d0e4 ubuntu      "/bin/bash" 2 minutes ago Exited (0) 8 seconds ago quizzical_mcnulty 
a707221a5f6c hello-world "/hello"    6 minutes ago Exited (0) 6 minutes ago youthful_curie

برای مشاهده‌ی آخرین کانتینری که ایجاد کرده اید، سوییچ l را به آن منتقل کنید:

docker ps -l
CONTAINER ID     IMAGE      COMMAND       CREATED         STATUS                     PORTS    NAMES 
a5c247g5h738     ubuntu     "/bin/bash"   2 minutes ago   Exited (0) 40 seconds ago           quizzical_mcnulty

برای راه‌اندازی یک کانتینر متوقف شده، از docker start و سپس شناسه‌ یا نام کانتینر استفاده کنید. مثلن کانتینر اوبونتو را با شناسه a5c247g5h738 راه‌اندازی کنید:

docker start a5c247g5h738

کانتینر شروع می‌شود و می‌توانید از docker ps برای مشاهده وضعیت آن استفاده کنید:

CONTAINER ID     IMAGE     COMMAND        CREATED           STATUS        PORTS        NAMES 
a5c247g5h738     ubuntu    "/bin/bash"    2 minutes ago     Up 5 seconds               quizzical_mcnulty

برای توقف یک کانتینر در حال اجرا، از docekr stop و سپس شناسه یا نام کانتینر استفاده کنید. این بار از نامی که داکر به کانتینر اختصاص داده است استفاده می کنیم که quizical_mcnulty است:

docker stop quizzical_mcnulty

هنگامی که دیگر نیازی به کانتینر نداشتید، آن را با دستور docker rm، دوباره با استفاده از شناسه یا نام کانتینر ، حذف کنید. از دستور docker ps -a برای یافتن شناسه یا نام کانتینر مربوط به تصویر hello-world و حذف آن استفاده کنید.

docker rm youthful_curie

می توانید یک کانتینر جدید راه اندازی کنید و با استفاده از سوییچ name– نامی برای آن بگذارید. هم‌چنین می‌توانید از سوییچ rm– برای ایجاد کانتینری استفاده کنید که پس از توقف، خود را حذف می‌کند.

برای اطلاعات بیشتر در مورد این گزینه‌ها و سایر آن‌ها دستور docker run help را اجرا کنید.