تغییرات اخیر

در اینجا اطلاعیه‌ها، نسخه‌ها و تغییرات جدید لیارا فهرست می‌شوند.

نصب و استفاده از داکر کامپوز (Docker Compose) در اوبونتو


۳۰ بهمن ۱۴۰۳

داکر ابزاری قدرتمند است که به توسعه دهندگان کمک می‌کند تا برنامه‌های خود را در قالب کانتینرها اجرا و مدیریت کنند. با استفاده از docker می‌توانید برنامه‌های خود را به طور مستقل از سیستم عامل و محیط اجرا، درون یک کانتینر قرار دهید.

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

در این آموزش از لیارا قصد داریم، نحوه نصب Docker Compose روی ubuntu 22.04 و چگونگی شروع کار با این ابزار را به شما بگوییم.

پیش نیازها

  • دسترسی به سرور ابری با سیستم عامل اوبونتو به همراه کاربر غیر root با دسترسیSudo و فایروال فعال
  • داکر نصب شده روی سرور ابری

مطالب پیشنهادی: آموزش نصب داکر روی اوبونتو 22.04

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

نصب و استفاده از داکر کامپوز (Docker Compose) در اوبونتو

قدم اول: نصب داکر کامپوز

برای نصب آخرین نسخه 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.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 قرار دارد که سرویس‌ها شامل تمامی مواردی هستند که قصد دارید در یک محیط کانتینری از آن‌ها استفاده کنید. در این مثال، تنها یک سرویس به نام web دارید.

تمام درخواست‌های ورودی به پورت 8000 سیستم میزبان (جایی که Docker Compose اجرا می‌شود) به پورت 80 در کانتینر web هدایت می‌شوند، جایی که Nginx در حال اجرا است.

دستورالعمل volumes یک حجم مشترک بین ماشین میزبان و کانتینر ایجاد می‌کند. با این کار، پوشه 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) در اوبونتو

حجم مشترکی که در فایل 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 می‌گوید که کدام سرویس‌ها باید اجرا شوند و چگونه با یکدیگر ارتباط برقرار کنند.