نصب و استفاده از Docker Compose در اوبونتو چگونه است؟ Docker ابزاری قدرتمند است که به توسعهدهندگان کمک میکند تا برنامههای خود را به صورت کانتینرها اجرا و مدیریت کنند. با استفاده از داکر، میتوانید برنامههای خود را به طور جداگانه و مستقل از سیستمعامل و محیط اجرا درون یک کانتینر قرار دهید.
اما برای مدیریت برنامههای پیچیدهتر که شامل چندین سرویس و محیط مختلف هستند، نیاز به راهحلی کارآمد مانند داکر کامپوز میباشد.
در این مطلب قصد داریم شما را با ابزار داکر کامپوز و نحوه نصب آن آشنا نماییم، پس تا پایان این مطلب همراه ما باشید.
Docker Compose چیست
همانطور که میدانید، Docker پلتفرمی است که اجرای فرآیندهای ایجاد، پیاده سازی و اجرای برنامهها را در یک کانتینر بسیار ساده و آسان میکند.
داکر مشابه ماشینهای مجازی میباشد، با این تفاوت که قابلیت جابجایی بیشتری دارد، با منابع سازگارتر است و ارتباط بیشتری با سیستمعامل اجرا شده در سرور مجازی خواهد داشت. این پلتفرم به توسعه دهندگان اجازه میدهد تا یک محیط برنامه را به چندین سرویس مجزا تقسیم کنند.
برای برنامههایی که به چندین سرویس وابسته هستند، هماهنگ کردن تمام کانتینرها برای راه اندازی، برقراری ارتباط و خاموش کردن آنها به طور همزمان ممکن است کمی سخت باشد.
Docker Compose، ابزاری است که به شما امکان میدهد محیطهای کاربردی چند کانتینری را بر اساس تعاریف تنظیمشده در یک فایل YAML اجرا کنید.
بیشتر بدانید : نصب داکر در CentOS
این فایل، شامل اطلاعاتی مانند تصویر هر سرویس، پورتها، متغیرهای محیطی و ارتباطات بین سرویسها میباشد.
با استفاده از Docker Compose، میتوانید یک برنامه متشکل از چندین سرویس را با تنظیمات مشخص و به صورت خودکار اجرا کنید و در صورت نیاز، شبکهها و حجم دادهها را مدیریت نمایید.
به طور خلاصه، داکر کامپوز یک ابزار قدرتمند برای مدیریت و اجرای برنامههای چند سرویسی با استفاده از داکر است که فرآیند توسعه، آزمون و استقرار را سادهتر و کارآمدتر میکند.
پیش نیازهای نصب داکر کامپوز
در ادامه شما را با پیشنیازهای نصب داکر کامپوز آشنا خواهیم کرد.
- دسترسی به سرور ابری با سیستم عامل اوبونتو به همراه کاربر غیر Root با دسترسی Sudo و فایروال فعال
- Docker نصبشده در سرور ابری
نحوه نصب Docker Compose
جهت اطمینان از دریافت بهروزترین نسخه پایدار Docker Compose، این نرم افزار را از ریپازیتوری رسمی Github دانلود کنید.
ابتدا، آخرین نسخه موجود را در صفحه انتشار آن بررسی کنید.
سپس، برای دانلود نسخه موردنظر از دستور زیر استفاده کنید.
mkdir -p ~/.docker/cli-plugins/
curl -SL https://github.com/docker/compose/releases/download/v2.3.3/docker-compose-linux-x86_64 -o ~/.docker/cli-plugins/docker-compose
در مرحله بعد، دسترسیها را طوری تنظیم کنید تا دستور compose docker قابل اجرا باشد.
chmod +x ~/.docker/cli-plugins/docker-compose
برای بررسی نصب موفقیت آمیز داکر کامپوز، دستور زیر را اجرا کنید.
docker compose version
با اجرای دستور، خروجی مشابه خواهید دید.
Output
Docker Compose version v2.3.3
Docker Compos با موفقیت برروی سیستم شما نصب شده است.
در ادامه، نحوه راهاندازی یک فایل docker-compose.yml و راهاندازی یک محیط کانتینری را با این ابزار مشاهده خواهید کرد.
نحوه راه اندازی یک فایل docker-compose.yml
در ادامه، برای نشان دادن نحوه تنظیم یک فایل docker-compose.yml و کار با Docker Compose، یک محیط وب سرور با استفاده از تصویر رسمی Nginx از ریپازیتوری Docker Hub، ایجاد خواهیم کرد. این محیط کانتینری شده یک فایل HTML استاتیک را ارائه میدهد.
ابتدا، یک دایرکتوری جدید بسازید و سپس وارد آن شوید.
mkdir ~/compose-demo
cd ~/compose-demo
در این دایرکتوری، یک پوشه app راه اندازی کنید تا به عنوان کاربر root برای محیط Nginx شما عمل کند.
mkdir app
با استفاده از ویرایشگر متن مورد نظر خود، یک فایل index.html جدید در پوشه app ایجاد کنید.
nano app/index.html
سپس محتوای زیر را در این فایل قرار دهید.
<!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>
پس از اتمام، فایل را ذخیره کرده و ببندید. اگر از ویرایشگر nano استفاده میکنید، میتوانید این کار را با تایپ CTRL+X و سپس Y و ENTER برای تایید انجام دهید.
سپس، با اجرای دستور زیر فایل docker-compose.yml را ایجاد کنید.
nano docker-compose.yml
در ادامه، محتوای زیر را در فایل docker-compose.yml خود قرار دهید.
version: '3.7'
services:
web:
image: nginx:alpine
ports:
- "8000:80"
volumes:
- ./app:/usr/share/nginx/html
فایل docker-compose.yml معمولاً با تعریف version شروع به کار میکند. این کار برای Docker Compose مشخص میکند که از کدام نسخهی پیکربندی استفاده میکنید.
سپس بلوک services را دارید، services بیانگر جایی است که خدماتی را که بخشی از این محیط هستند، تنظیم میکنید. در این مثال، شما یک سرویس واحد به نام web دارید.
تمام درخواستهای پورت 8000 ماشین میزبان (سیستمی که Docker Compose را از آنجا اجرا میکنید) به کانتینر وب در پورت 80 هدایت میشوند، جایی که Nginx در آن اجرا میشود.
بیشتر بدانید : نصب MariaDB در دبیان ۱۱
دستورالعمل volumes یک حجم مشترک بین ماشین میزبان و کانتینر ایجاد میکند.
با این کار پوشه app با کانتینر به اشتراک گذاشته میشود و حجم آن در /usr/share/nginx/html در داخل کانتینر قرار میگیرد.
حال آن را ذخیره کنید و فایل را ببندید.
اکنون شما یک صفحهی نمایشی و یک فایل docker-compose.yml راه اندازی کردهاید تا یک وبسرور کانتینری ایجاد کنید. در مرحلهی بعد، این محیط را با Docker Compose اجرا میکنید.
اجرا Docker Compose
با نصب و راه اندازی فایل docker-compose.yml، اکنون میتوانید داکر کامپوز را برای راهاندازی محیط خود اجرا کنید.
بهکمک دستور زیر، تصاویر داکر دریافت شده و یک کانتینر برای web ساخته میشود و محیط کانتینری را در حالت پس زمینه شروع به اجرا میکند.
docker compose up -d
Docker Compose ابتدا تصویر تعریف شده را در سرور شما جستجو میکند و در صورتی که نتواند تصویر را پیدا کند، تصویر را از Docker Hub دانلود میکند.
درنهایت خروجی را به این شکل خواهید دید.
Output
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
اکنون محیط شما در پسزمینه فعال است. برای اطمینان از فعال بودن کانتینر، میتوانید دستور زیر را اجرا کنید.
docker compose ps
این دستور، اطلاعاتی در مورد کانتینرهای در حال اجرا و وضعیت آنها و همچنین هرگونه تغییر مسیر پورت را به شما نشان میدهد.
Output
Name Command State Ports
----------------------------------------------------------------------------------
compose-demo_web_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:8000->80/tcp
حال شما میتوانید از طریق آدرس IP:8000 در مرورگر، این سرویس را اجرا کنید.
اگر این نسخه آزمایشی را در یک سرور اجرا میکنید، باید آدرس IP عمومی سرور خود را مانند your_server_domain_or_IP:8000 وارد کنید.
با وارد کردن آدرس، صفحهای به شکل زیر مشاهده خواهید کرد.
حجم مشترکی که در فایل docker-compose.yml تنظیم کردهاید، فایلهای پوشه app را همگام با سند root کانتینر نگه میدارد.
اگر هر گونه تغییری در فایل index.html ایجاد کنید، به طور خودکار توسط کانتینر app دریافت میشود و در نتیجه هنگام بارگیری مجدد صفحه در مرورگر شما منعکس میشود.
در مرحله بعد، نحوه مدیریت محیط کانتینری خود را با دستورات Docker Compose خواهید دید.
آشنایی با دستورات Docker Compose
اکنون که با شیوه تنظیم یک فایل docker-compose.yml و اجرای محیط کانتینری آشنا شدهاید. در ادامه مطلب نصب و استفاده از Docker Compose، شما را با دستورات پرکاربرد داکر کامپوز برای مدیریت و تعامل با محیط کانتینری آشنا خواهیم کرد.
بررسی لاگهای کانتینر
برای بررسی گزارشهای تولید شده در کانتینر Nginx، میتوانید از دستور logs استفاده کنید.
docker compose logs
خروجی مشابه این را خواهید دید:
Output
Attaching to compose-demo_web_1
web_1 | /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
web_1 | /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
web_1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
web_1 | 10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf
web_1 | 10-listen-on-ipv6-by-default.sh: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
web_1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
web_1 | /docker-entrypoint.sh: Configuration complete; ready for start up
web_1 | 172.22.0.1 - - [02/Jun/2020:10:47:13 +0000] "GET / HTTP/1.1" 200 353 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36" "-"
توقف اجرای محیط
اگر میخواهید اجرای محیط را بدون تغییر وضعیت فعلی کانتینرها متوقف کنید، از دستور زیر استفاده کنید.
docker compose pause
خروجی مشابه زیر را خواهید دید.
Output
Pausing compose-demo_web_1 ... done
برای ادامه اجرا، دستور زیر را اجرا کنید.
docker compose unpause
خروجی مشابه زیر را دریافت خواهید کرد.
Output
Unpausing compose-demo_web_1 ... done
توقف اجرای کانتینر
برای پایان دادن به اجرای کانتینر دستور stop را اجرا کنید. این دستور هیچ دادهای مربوط به کانتینرهای شما را از بین نخواهد برد.
docker compose stop
خروجی مشابه زیر را دریافت خواهید کرد.
docker compose downOutput
Removing compose-demo_web_1 ... done
Removing network compose-demo_default
حذف محیط کانتینری
اگر میخواهید کانتینرها، شبکهها و حجمهای مرتبط با این محیط کانتینری را حذف کنید، از دستور زیر استفاده کنید.
docker compose down
با اجرای دستور، خروجی مشابه زیر را دریافت خواهید کرد.
Output
Removing compose-demo_web_1 ... done
Removing network compose-demo_default
توجه داشته باشید که این دستور، تصویر پایه (Base Image) استفاده شده توسط Docker Compose را (در این راهنما، nginx:alpine) حذف نمیکند.
به این ترتیب، هر زمان که دوباره محیط خود را با یک docker compose up اجرا کنید، از آنجایی که تصویر از قبل روی سیستم شما قرار دارد، روند بسیار سریعتر خواهد بود.
حذف Base Image
اگر میخواهید Base Image را از سیستم خود حذف کنید، دستور زیر را اجرا کنید.
docker image rm nginx:alpine
با اجرای دستور، خروجی مشابه زیر را دریافت خواهید کرد.
Output
Untagged: nginx:alpine
Untagged: nginx@sha256:b89a6ccbda39576ad23fd079978c967cecc6b170db6e7ff8a769bf2259a71912
Deleted: sha256:7d0cdcc60a96a5124763fddf5d534d058ad7d0d8d4c3b8be2aefedf4267d0270
Deleted: sha256:05a0eaca15d731e0029a7604ef54f0dda3b736d4e987e6ac87b91ac7aac03ab1
Deleted: sha256:c6bbc4bdac396583641cb44cd35126b2c195be8fe1ac5e6c577c14752bbe9157
Deleted: sha256:35789b1e1a362b0da8392ca7d5759ef08b9a6b7141cc1521570f984dc7905eb6
Deleted: sha256:a3efaa65ec344c882fe5d543a392a54c4ceacd1efd91662d06964211b1be4c08
Deleted: sha256:3e207b409db364b595ba862cdc12be96dcdad8e36c59a03b7b3b61c946a5741a
جمع بندی
Docker Compose ابزاری است که توسط Docker توسعه داده شده و به شما اجازه میدهد تا به راحتی برنامههای چند سرویسی خود را تعریف و مدیریت کنید. داکر کامپوز امکان اجرای همزمان چندین کانتینر و تنظیم روابط وابستگی بین آنها را فراهم میکند. با نصب و استفاده از Docker Compose، شما میتوانید یک فایل YAML ساده و خوانا برای تعریف سرویسها و تنظیمات مورد نیاز را ایجاد کنید. این فایل حاوی اطلاعاتی مانند تصویر داکر، پورتها، متغیرهای محیطی، تنظیمات شبکه و دیگر تنظیمات مربوط به هر سرویس است. با مطالعه این آموزش کاربردی و تعریف سرویسها و تنظیمات لازم در فایل Docker Compose، میتوانید با یک دستور ساده، کل برنامههای چند سرویسی خود را اجرا، متوقف و مدیریت کنید.
[yasr_overall_rating]
این ابزار برای هماهنگ کانتینرها هم کاربرد داره؟
باسلام و وقت بخیر
بله با استفاده از Docker Compose میتوانید محیطهای کاربردی چند کانتینری را بر اساس تعاریف تنظیمشده در یک فایل YAML اجرا کنید.
چه اطلاعاتی میره تو فایل YAML ؟
کاربر عزیز این فایل، شامل اطلاعاتی مانند تصویر هر سرویس، پورتها، متغیرهای محیطی و ارتباطات بین سرویسها است.