یکی از چالشهای استفاده از داکر و تکنولوژی کانتینر این است که با پیشرفت پروژه، تعداد کانتینرهای شما افزایش پیدا میکند و در نهایت مدیریت تمام این موارد دشوار خواهد بود. افرادی که از معماری میکروسرویس برای توسعه اپلیکیشن خود استفاده میکنند، این موضوع را به خوبی درک خواهند کرد.
به همین جهت سرویس Docker Compose معرفی شد. با استفاده از داکر کامپوز شما این قابلیت را پیدا خواهید کرد که فرایند مدیریت استقرار کانتینرهای مختلف را با سهولت بیشتر پیش ببرید. برای آشنایی بیشتر با جزئیات چیستی و سازوکار داکر کامپوز پیشنهاد میکنیم که مطلب «Docker Compose چیست؟» را مطالعه کنید.
در این مطلب از وبلاگ همروش قصد داریم شیوه نصب داکر کامپوز روی توزیع اوبونتو را آموزش دهیم.
پیشنیازها
قبل از اینکه ادامه این مطلب را مطالعه کنید از داشتن پیشنیازهای زیر مطمئن شوید:
- دسترسی به سیستم عامل اوبونتو روی کامپیوتر شخصی و یا ریموت سرور
- دسترسی به مجوزهای Sudo
- داکر به صورت نصب شده روی کامپیوتر
قدم اول: نصب داکر کامپوز
برای اینکه آخرین نسخه داکر کامپوز را نصب کنیم، نیاز است که وارد مخزن رسمی داکر کامپوز در گیتهاب شویم. برای اینکار وارد مخزن رسمی گیتهاب شوید.
در مرحله بعدی وارد صفحه releases page شده و آخرین نسخه موجود را پیدا کنید. در حال حاضر (۲۶ دسامبر ۲۰۲۳) آخرین نسخه Stable از داکر کامپوز 2.23.3 است.
برای دانلود کردن این نسخه از دستورات زیر استفاده کنید:
mkdir -p ~/.docker/cli-plugins/
curl -SL https://github.com/docker/compose/releases/download/v2.23.3/docker-compose-linux-x86_64 -o ~/.docker/cli-plugins/docker-compose
در مرحله بعد برای قابل اجرا کردن (Executable) دستور docker compose، مجوزهای دسترسی را به صورت زیر بهروزرسانی میکنیم:
chmod +x ~/.docker/cli-plugins/docker-compose
در نهایت برای اینکه مطمئن شوید که مراحل نصب کردن را به درستی پیش رفتهاید، دستور زیر را وارد کنید:
docker compose version
بعد از اجرای این دستور باید خروجی زیر را دریافت کنید:
Output
Docker Compose version v2.23.3
حال داکر کامپوز با موفقیت روی سیستم شما نصب شده است. در قدم بعدی ما با چگونگی ایجاد فایل docker-compose.yml
و آماده کردن یک محیط کانتینرسازی شده با استفاده از این ابزار آشنا میشویم.
قدم دوم: ایجاد فایل docker-compose.yml
برای اینکه در این قدم به صورت پروژه محور پیش برویم، قصد داریم با استفاده از Nginx یک وب سرور را ایجاد کنیم. برای همین در قدم اول سراغ ایمیج رسمی Nginx در داکر هاب خواهیم رفت. هدف نهایی این وب سرور نیز نمایش یک فایل استاتیک HTML خواهد بود.
ابتدا یک دایرکتوری جدید را در home/ ایجاد کرده و سپس وارد آن شوید:
mkdir ~/compose-demo
cd ~/compose-demo
در داخل این دایرکتوری پوشهای با نام app را ایجاد کنید. در این دایرکتوری فایلهای مربوط به اپلیکیشن را قرار میدهیم. برای این مطلب ما تنها یک فایل HTML خواهیم داشت.
mkdir app
با استفاده از یک ادیتور، فایل index.html را در داخل app ایجاد کرده و محتوای زیر را در آن قرار دهید:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Docker Compose Demo</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/kognise/water.css@latest/dist/dark.min.css">
</head>
<body>
<h1>This is a Docker Compose Demo Page.</h1>
<p>This content is being served by an Nginx container.</p>
</body>
</html>
در قدم بعدی در دایرکتوری اصلی (compose-demo) فایلی با عنوان docker-compose.yml ایجاد کرده و محتوای زیر را در آن قرار دهید:
version: '3.7'
services:
web:
image: nginx:alpine
ports:
- "8000:80"
volumes:
- ./app:/usr/share/nginx/html
در این فایل ما محتوای زیر را قرار دادهایم:
- Version: فایلهای Docker Compose معمولا با Version شروع میشوند. با مقداردهی این قسمت شما به داکر کامپوز اعلام میکنید که قصد دارید از کدام نسخه از پیکربندی استفاده کنید.
- Services: سرویسها شامل مواردی میشوند که شما قصد دارید در یک محیط کانتینرسازی شده از آنها استفاده کنید. در مثال ما، تنها یک سرویس web خواهد بود. برای این سرویس ما از ایمیچ nginx:alpine استفاده میکنیم و روی پورت مد نظر (خط بعدی) آن را تنظیم میکنیم. از این به بعد تمام درخواستهای مربوط به پورت ۸۰۰۰ (سیستمی که در حال اجرا داکر کامپوز است) به کانتینر web روی پورت ۸۰ ریدایرکت میشود.
- Volumes: با استفاده از Volumes میتوانید یک فضای ذخیرهسازی مشترک بین کامپیوتر میزبان و کانتینر ایجاد کنید. با افزودن این قسمت به فایل پیکربندی، فولدر app با کانتینر به اشتراک گذاشته میشود.
در قدم بعدی ما با اجرا و راهاندازی کردن داکر کامپوز براساس محیطی که ایجاد کردهایم آشنا خواهیم شد.
قدم سوم: اجرا داکر کامپوز
حال که فایل docker-compose.yml
را ایجاد کردید میتوانید Docker Compose را اجرا کنید. با اجرا دستور زیر، تمام ایمیجهای مورد نیاز دانلود شده و همچنین یک کانتینر برای سرویس Web ایجاد میشود. در نهایت محیط کانتینرسازی شده نیز اجرا خواهد شد:
docker compose up -d
بعد از اجرای این دستور، داکر کامپوز روی سیستم شما دنبال ایمیجهایی میگردد که برای اجرا نهایی لازم دارد. اگر این موارد روی سیستم محلی پیدا نشود، ایمیجها از طریق داکر هاب دانلود میشوند. بعد از اجرای این دستور خروجی مانند زیر به شما نمایش داده خواهد شد:
Creating network "compose-demo_default" with the default driver
Pulling web (nginx:alpine)...
alpine: Pulling from library/nginx
cbdbe7a5bc2a: Pull complete
10c113fb0c77: Pull complete
9ba64393807b: Pull complete
c829a9c40ab2: Pull complete
61d685417b2f: Pull complete
Digest: sha256:57254039c6313fe8c53f1acbf15657ec9616a813397b74b063e32443427c5502
Status: Downloaded newer image for nginx:alpine
Creating compose-demo_web_1 ... done
حال اپلیکیشن شما به صورت یک Background Service در حال اجرا است. برای تایید این موضوع نیز میتوانید دستور زیر را وارد کنید:
docker compose ps
این دستور اطلاعاتی راجع به کانتینر در حال اجرا، وضعیت و پورتی که روی آن اجرا شده را به شما نشان میدهد. حال اگر از طریق مرورگر وارد آدرس localhost:8000 شوید صفحه HTML ایجاد شده را خواهید دید. اگر هم از یک ریموت سرور استفاده میکنید بجای لوکالهاست، آدرس آیپی سرور را وارد کنید.
حال اگر تغییری را در فایل index.html اعمال کنید، به نظرتان روی خروجی تاثیری خواهد گذاشت؟ بله. از آنجایی که ما از Volumes در فایل docker-compose.yml
استفاده کردیم، تمام تغییرات بین کامپیوتر و کانتینر همگام (Sync) میشوند.
آشنایی با برخی از دستورات داکر کامپوز
حال که با شیوه نصب و پیادهسازی Docker Compose آشنا شدید، نیاز است که برای مدیریت و تعامل بیشتر با محیط کانتینرسازی شده، با برخی از دستورات اصلی داکر کامپوز آشنا شویم. در ادامه چند مورد از این دستورات را در عمل مشاهده خواهید کرد.
برای مشاهده لاگهایی که توسط کانتینر Nginx ایجاد شده است میتوانید از دستور logs
استفاده کنید:
docker compose logs
اگر قصد دارید که فرایند اجرا را متوقف کنید (بدون تغییر در وضعیت کانتینر) میتوانید دستور pause
را وارد کنید:
docker compose pause
برای اجرا مجدد فرایند میتوانید دستور unpause
را وارد کنید:
docker compose unpause
برای Terminate یا خاتمه دادن به روند اجرا کانتینر میتوانید از دستور stop
استفاده کنید. البته در این روش هیچ دادهای که مربوط به کانتینر باشد از بین نخواهد رفت:
docker compose stop
اگر قصد حذف کردن تمام کانتینرها، شبکهها و Volumeهایی مربوط به محیط کانتینرسازی شده را دارید میتوانید از دستور down
استفاده کنید:
docker compose down
البته این دستور، ایمیج مربوط به کانتینر (در مثال این مطلب nginx:alpine) را حذف نمیکند. در نهایت اگر قصد راهاندازی مجدد همین محیط را داشته باشید میتوانید دستور up
را وارد کنید. از آنجایی که ایمیج شما کماکان موجود است، این بار فرایند پیادهسازی بسیار سریعتر خواهد بود.
در نهایت اگر قصد داشته باشید که ایمیج اصلی را نیز حذف کنید میتوانید از دستور rm
استفاده نمایید:
docker image rm nginx:alpine
جمعبندی
در این مطلب از وبلاگ همروش ما با شیوه نصب داکر کامپوز و همچنین ایجاد یک پروژه مبتنی بر Nginx آشنا شدیم. برای مطالعه و آشنایی بیشتر با داکر کامپوز و دستورات مختلف آن میتوانید از مستندات رسمی داکر استفاده کنید.