نصب و استفاده از داکر کامپوز (Docker Compose) در اوبونتو
۳۰ بهمن ۱۴۰۳
داکر ابزاری قدرتمند است که به توسعه دهندگان کمک میکند تا برنامههای خود را در قالب کانتینرها اجرا و مدیریت کنند. با استفاده از docker میتوانید برنامههای خود را به طور مستقل از سیستم عامل و محیط اجرا، درون یک کانتینر قرار دهید.
داکر کامپوز (Docker Compose) یکی از ابزارهای کاربردی است که مدیریت و اجرای برنامههای چند کانتینری را سادهتر میکند. زمانی که یک برنامه از چندین سرویس تشکیل شده باشد، هماهنگسازی کانتینرها برای راهاندازی، برقراری ارتباط و خاموش شدن همزمان میتواند پیچیده باشد. داکر کامپوز ابزاری است که اجرای محیطهای چند کانتینری را بر اساس تنظیمات فایل YAML، آسانتر میکند. با استفاده از این ابزار، میتوانید محیطهایی انعطافپذیر و سفارشیسازیشده ایجاد کنید که در آن چندین کانتینر بهسادگی با یکدیگر ارتباط برقرار کرده و منابعی مانند شبکهها و دادهها را به اشتراک بگذارند.
در این آموزش از لیارا قصد داریم، نحوه نصب Docker Compose روی ubuntu 22.04 و چگونگی شروع کار با این ابزار را به شما بگوییم.
پیش نیازها
- دسترسی به سرور ابری با سیستم عامل اوبونتو به همراه کاربر غیر root با دسترسی
Sudo
و فایروال فعال - داکر نصب شده روی سرور ابری
مطالب پیشنهادی: آموزش نصب داکر روی اوبونتو 22.04
بیشتر بدانید: نحوه راهاندازی اولیه سرور مجازی با اوبونتو Ubuntu

قدم اول: نصب داکر کامپوز
برای نصب آخرین نسخه Docker Compose، ابتدا باید وارد مخزن رسمی داکر کامپوز در گیت هاب شوید. سپس در صفحه Releases جدیدترین نسخه Stable را پیدا کنید. در حال حاضر (17 فوریه 2024)، آخرین نسخه از داکر کامپوز 2.33.0
است. برای دانلود این نسخه، از دستور زیر استفاده کنید:
mkdir -p ~/.docker/cli-plugins/
curl -SL https://github.com/docker/compose/releases/download/v2.33.0/docker-compose-linux-x86_64 -o ~/.docker/cli-plugins/docker-compose
در مرحله بعد برای قابل اجرا کردن (Executable) دستور docker compose
، مجوزهای دسترسی را به صورت زیر بهروزرسانی کنید:
chmod +x ~/.docker/cli-plugins/docker-compose
سپس برای اینکه مطمئن شوید که مراحل نصب را به درستی انجام دادهاید، دستور زیر را وارد کنید:
docker compose version
بعد از اجرای این دستور باید خروجی زیر را دریافت کنید:
Docker Compose version v2.33.0
حالا داکر کامپوز با موفقیت روی سیستم شما نصب شده است. در قدم بعدی با چگونگی ایجاد فایل 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.ym
l، از دستور زیر استفاده کنید:
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
قرار دارد که سرویسها شامل تمامی مواردی هستند که قصد دارید در یک محیط کانتینری از آنها استفاده کنید. در این مثال، تنها یک سرویس به نام web
دارید.
تمام درخواستهای ورودی به پورت 8000
سیستم میزبان (جایی که Docker Compose اجرا میشود) به پورت 80
در کانتینر web
هدایت میشوند، جایی که Nginx در حال اجرا است.
دستورالعمل volum
es یک حجم مشترک بین ماشین میزبان و کانتینر ایجاد میکند. با این کار، پوشه app
با کانتینر به اشتراک گذاشته میشود و حجم آن در مسیر /usr/share/nginx/html
داخل کانتینر قرار میگیرد.
حالا فایل را ذخیره کرده و آن را ببندید.
شما اکنون یک صفحه نمایشی و فایل docker-compose.yml
را راهاندازی کردهاید که یک وبسرور کانتینری ایجاد میکند. در قدم بعدی، این محیط را با استفاده از Docker Compose اجرا خواهیم کرد.
قدم سوم: اجرای داکر کامپوز
با نصب و راه اندازی فایل docker-compose.yml
، حالا میتوانید داکر کامپوز را برای راهاندازی محیط خود اجرا کنید.
با اجرای دستور زیر، تصاویر داکر دانلود شده و یک کانتینر برای سرویس web ساخته میشود. سپس، محیط کانتینری در پسزمینه شروع به اجرا میکند:
docker compose up -d
بعد از اجرای این دستور، Docker Compose روی سیستم شما به دنبال ایمیجهایی میگردد که برای اجرای نهایی لازم است. اگر این ایمیجها روی سیستم شما وجود نداشته باشند، Docker Compose آنها را از طریق Docker Hub دانلود میکند. پس از اجرای دستور، خروجی مشابه زیر برای شما نمایش داده خواهد شد:
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 socket مواجه شدید، به این معنی است که مرحله ۲ از آموزش نصب داکر روی اوبونتو 22.04 را انجام ندادهاید. برای رفع این مشکل، کافی است به مرحله گفته شده برگردید و آن را تکمیل کنید تا مجوزهای لازم برای اجرای دستورات Docker بدون نیاز بهsudo
برایتان فراهم شود.
حالا اپلیکیشن شما در پسزمینه فعال است. برای اطمینان از فعال بودن کانتینر، میتوانید دستور زیر را اجرا کنید:
docker compose ps
خروجی این دستور، اطلاعاتی در مورد کانتینرهای در حال اجرا و وضعیت آنها و همچنین هرگونه تغییر مسیر پورت را به شما نشان میدهد.
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
و راهاندازی محیط کانتینری آشنا شدهاید، نیاز است که برای مدیریت و تعامل بیشتر با محیط کانتینرسازی شده، با برخی از دستورات اصلی داکر کامپوز آشنا شویم.
بررسی لاگ های کانتینر
برای مشاهده گزارشهای تولید شده در کانتینر Ngnix، میتوانید از دستور logs
استفاده کنید.
docker compose logs
خروجی مشابه زیر را در خط فرمان مشاهده خواهید کرد:
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
خروجی را مشاهده کنید:
Pausing compose-demo_web_1 ... done
برای ادامه اجرا، دستور زیر را تایپ کنید:
docker compose unpause
خروجی که مشاهده میکنید:
Unpausing compose-demo_web_1 ... done
توقف اجرای کانتینر
برای پایان دادن به اجرای کانتینر، میتوانید دستورstop
را اجرا کنید. این دستور هیچ دادهای از کانتینرهای شما حذف نخواهد کرد.
docker compose stop
خروجی مشابه زیر دریافت خواهید کرد:
Stopping compose-demo_web_1 ... done
حذف فرایند کانتینری
اگر میخواهید کانتینرها، شبکهها و volumeهای مرتبط با این محیط کانتینری را به طور کامل حذف کنید، از دستور زیر استفاده کنید:
docker compose down
خروجی که دریافت میکنید:
Removing compose-demo_web_1 ... done
Removing network compose-demo_default
توجه داشته باشید که این دستور، تصویر پایه (Base Image) استفاده شده توسط Docker Compose را (در این آموزش، nginx:alpine
) حذف نمیکند.
بنابراین، هر بار که محیط خود را با دستور docker compose up
دوباره راهاندازی کنید، چون تصویر از قبل روی سیستم شما قرار دارد، فرآیند راهاندازی بسیار سریعتر خواهد بود.
حذف Base Image
در نهایت اگر قصد دارید تمام ایمیج اصلی را از سیستم خود حذف کنید، از دستور زیر استفاده کنید:
docker image rm nginx:alpine
خروجی مشابه زیر را دریافت خواهید کرد:
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
نکته: برای مرور دستورات داکر، لطفا مقاله آموزش نصب داکر روی اوبونتو 22.04 بخوانید.
جمع بندی
Docker Compose ابزاری است که به شما این امکان را میدهد تا به راحتی برنامههای چند کانتینری خود را تعریف و مدیریت کنید. با داکر کامپوز میتوانید چندین کانتینر را به طور همزمان اجرا کرده و وابستگیهای بین آنها را تنظیم کنید. با استفاده از یک فایل YAML ساده، میتوانید سرویسها و تنظیمات مختلف مانند تصویر داکر، پورتها و متغیرهای محیطی را تعریف کنید. در این مقاله از لیارا، نحوه نصب و استفاده از داکر کامپوز در اوبونتو 22.04 را به طور کامل توضیح دادیم. اگر با مشکلی مواجه شدید، لطفاً کدها را با دقت بیشتری وارد کنید تا مشکل برطرف شود.
سوالات متداول
1- آیا داکر کامپوز با همه نسخههای داکر سازگار است؟
بله، معمولاً با اکثر نسخههای داکر سازگار است، اما برای آپدیتهای جدید توصیه میشود همیشه Docker و Docker Compose را بهروز نگه دارید.
2- آیا داکر کامپوز میتواند با کوبرنتیز استفاده شود؟
Docker Compose برای محیطهای توسعه و تست مناسب است، در حالی که Kubernetes برای مقیاس بزرگتر در محیطهای تولید توصیه میشود. ابزارهایی مانند kompose میتوانند برای تبدیل فایلهای Docker Compose به فایلهای Kubernetes کمک کنند.
3- چگونه میتوانم خطاهای رایج Docker Compose را برطرف کنم؟
برای رفع خطاهای رایج در Docker Compose، میتوانید از دستورات زیر برای عیبیابی استفاده کنید:
- docker-compose logs: برای مشاهده لاگهای سرویسها و شناسایی مشکلات.
- docker-compose config: برای بررسی صحت فایل docker-compose.yml.
- docker-compose down و docker-compose up: برای بازنشانی سرویسها و پاکسازی منابع موقتی.
4- چطور میتوانم شبکهها و والیومها را تعریف کنم؟
شبکهها و ولومها رو میتوانید داخل فایل docker-compose.yml
تعریف کنید. مثلا:
networks:
frontend:
backend:
volumes:
db-data:
5- چطور میتوانم پروژه ها را مقیاسپذیر کنم؟
برای مقیاسپذیری پروژهها، میتوانید از Docker Swarm یا Kubernetes استفاده کنید. این ابزارها به شما اجازه میدهند تا چندین کانتینر را روی چند سرور به صورت توزیعشده اجرا کنید.
6- فایل docker-compose.yml چیست؟
فایل docker-compose.yml
فایلی است که تنظیمات و پیکربندی سرویسهای مختلف را به صورت YAML
تعریف میکنید. این فایل به Docker Compose میگوید که کدام سرویسها باید اجرا شوند و چگونه با یکدیگر ارتباط برقرار کنند.