Docker فرآیند مدیریت برنامه را در کانتینرها ساده می کند.
در حالی که کانتینرها از جهات خاصی شبیه به ماشین های مجازی هستند، سبک وزن تر و سازگار با منابع هستند.
این به توسعه دهندگان اجازه می دهد تا یک محیط برنامه را به چندین سرویس ایزوله تقسیم کنند.
برای برنامههایی که به چندین سرویس نیاز دارند، هماهنگ کردن همه کانتینرها برای راهاندازی، برقراری ارتباط و خاموش شدن با هم میتواند دشوار شود.
Docker Compose ابزاری است که به شما این را امکان میدهد که محیطهای کاربردی چند کانتینری را بر اساس تعاریف تنظیمشده در یک فایل YAML اجرا کنید.
از تعاریف سرویس برای ساخت محیط های کاملاً قابل تنظیم با کانتینرهای متعدد استفاده می کند که می توانند شبکه ها و حجم داده ها را به اشتراک بگذارند.
در این راهنما، نحوه نصب Docker Compose بر روی سرور اوبونتو 20.04 و نحوه شروع استفاده از این ابزار را نشان خواهیم داد.
پیش نیازهای نصب Docker Compose
برای دنبال کردن این مقاله، شما نیاز دارید به:
- یک سرور دارای سیستم عامل اوبونتو 20.04 که با پیروی از مقاله تنظیمات اولیه سرور اوبونتو 20.04 تنظیمات اولیه سرور Ubuntu 20.04 پیکربندی شده باشد.
- یک کاربر غیر از روت به همراه دسترسی sudo و یک فایروال راه اندازی شده
- داکر بر روی سیستم شما نصب شده باشد.(برای این کار می توانید از مقاله نصب داکر در اوبونتو کمک بگیرید)
مرحله 1 – نصب داکر کامپوز
برای اطمینان از دریافت به روزترین نسخه پایدار Docker Compose، این نرم افزار را از مخزن رسمی Github آن دانلود خواهیم کرد .
ابتدا، آخرین نسخه موجود را در صفحه انتشار آن بررسی کنید. در زمان نگارش این مقاله، جدیدترین نسخه پایدار 2.2.3 است .
برای دانلود از دستور زیر استفاده کنید:
mkdir -p ~/.docker/cli-plugins/ curl -SL https://github.com/docker/compose/releases/download/v2.2.3/docker-compose-linux-x86_64 -o ~/.docker/cli-plugins/docker-compose
در مرحله بعد، مجوزهای صحیح را تنظیم کنید تا دستور docker compose قابل اجرا باشد:
chmod +x ~/.docker/cli-plugins/docker-compose sudo chown $USER /var/run/docker.sock
برای بررسی موفقیت آمیز بودن نصب، می توانید این دستور را اجرا کنید:
docker compose version
خروجی مشابه این را خواهید دید:
Output Docker Compose version v2.2.3
Docker Compose اکنون با موفقیت روی سیستم شما نصب شده است.
در بخش بعدی نحوه راه اندازی یک فایل docker-compose.yml و راه اندازی یک محیط کانتینری با این ابزار را خواهید دید.
مرحله 2 – تنظیم یک فایل docker-compose.yml
برای نشان دادن نحوه تنظیم یک فایل docker-compose.yml و کار با Docker Compose، با استفاده از ایمیج رسمی Nginx از مخزن Docker Hub، یک محیط وب سرور ایجاد خواهیم کرد .
این محیط کانتینری شده یک فایل HTML ثابت را ارائه می دهد.
با ایجاد یک پوشه جدید در دایرکتوری اصلی خود شروع کنید و سپس وارد آن شوید:
mkdir ~/compose-demo cd ~/compose-demo
در این دایرکتوری، یک پوشه app بسازید تا به عنوان ریشه سند برای محیط 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 دارید .
این سرویس از ایمیج nginx:alpine استفاده می کند و یک تغییر مسیر پورت را با دستورالعمل ports تنظیم می کند.
تمام درخواستهای مربوط به پورت 8000 ماشین میزبان (سیستمی که در آن Docker Compose را اجرا میکنید) به کانتینر web در پورت 80 هدایت میشوند ، جایی که Nginx در آن اجرا میشود.
دستورالعمل volumes یک حجم مشترک بین ماشین میزبان و کانتینر ایجاد می کند.
پوشه app محلی را با کانتینر به اشتراک می گذارد و حجم در usr/share/nginx/html/ داخل کانتینر قرار می گیرد، که سپس ریشه پیش فرض سند برای Nginx را بازنویسی می کند.
آن ذخیره کنید و فایل را ببندید.
شما یک صفحه نمایشی و یک فایل docker-compose.yml برای ایجاد یک محیط وب سرور کانتینری تنظیم کرده اید که به آن سرویس می دهد.
در مرحله بعد، این محیط را با Docker Compose بالا می آورید.
مرحله 3 – اجرای Docker Compose
با وجود فایل docker-compose.yml ، اکنون می توانید Docker Compose را برای بالا بردن محیط خود اجرا کنید.
دستور زیر ایمیج های Docker لازم را دانلود می کند، یک کانتینر برای سرویس web ایجاد می کند و محیط کانتینری را در حالت پس زمینه اجرا می کند:
docker compose up -d
Docker Compose ابتدا ایمیج تعریف شده را در سیستم محلی شما جستجو می کند و اگر نتواند ایمیج را پیدا کند، ایمیج را از داکر هاب دانلود می کند.
خروجی را مانند زیر خواهید دید:
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
اکنون میتوانید با رفتن به مرورگر خود به برنامه آزمایشی که ایجاد کردیم دسترسی داشته باشید.
اگر این نسخه آزمایشی را در سیستم محلی خودتان ایجاد کرده اید برای دیدن پیشنمایش آدرس localhost:8000 را وارد کنید.
اگر این نسخه آزمایشی را در یک سرور اجرا می کنید باید آدرس آیپی عمومی سرور خود را مانند your_server_domain_or_IP:8000 این وارد کنید.
صفحه ای مانند این را خواهید دید:
میزان حجم مشترکی که در فایل docker-compose.yml تنظیم کرده اید، فایل های پوشه شما را با ریشه سند کانتینر همگام نگه می دارد
اگر تغییری در فایل index.html ایجاد کنید، بهطور خودکار توسط کانتینر app دریافت میشود و در نتیجه هنگام بارگیری مجدد صفحه در مرورگر شما منعکس میشود.
در مرحله بعد، نحوه مدیریت محیط کانتینری خود را با دستورات Docker Compose خواهید دید.
مرحله 4 – آشنایی با دستورات Docker Compose
شما نحوه تنظیم یک فایل docker-compose.yml و ایجاد محیط خود را با docker-compose up انجام دادید.
اکنون خواهید دید که چگونه از دستورات 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
Output Stopping compose-demo_web_1 ... done
اگر می خواهید کانتینرها، شبکه ها و حجم های مرتبط با این محیط کانتینری را حذف کنید، از دستور down استفاده کنید:
docker compose down
Output Removing compose-demo_web_1 ... done Removing network compose-demo_default
توجه داشته باشید که با این کار ایمیج پایه استفاده شده توسط Docker Compose (در مورد شما، nginx:alpine) را حذف نمی شود.
به این ترتیب، هر زمان که محیط خود را دوباره با یک دستور docker compose up ایجاد می کنید، روند بسیار سریعتر خواهد بود زیرا ایمیج از قبل روی سیستم شما قرار دارد.
در صورتی که می خواهید ایمیج پایه را نیز از سیستم خود حذف کنید، می توانید از موارد زیر استفاده کنید:
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 برای آشنایی دقیق تر در مورد دستورات Docker مراجعه کنید.
نتیجه
در این راهنما، نحوه نصب Docker Compose و راه اندازی یک محیط کانتینری بر اساس ایمیج وب سرور Nginx را مشاهده کرده اید.
همچنین نحوه مدیریت این محیط را با استفاده از دستورات Compose مشاهده کرده اید.
برای آشنایی کامل با همه دستورات docker compose موجود، اسناد رسمی آن را بررسی کنید.