نحوه نصب و استفاده از Docker Compose در اوبونتو 20.04

مقدمه

Docker روند مدیریت فرآیندهای برنامه در container ها را ساده می کند. در حالی که کانتینرها از جهات خاصی به ماشین های مجازی شباهت دارند، سبک تر و سازگار با منابع هستند. این به توسعه دهندگان اجازه می دهد تا یک محیط برنامه را به چندین سرویس جدا شده تقسیم کنند.

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

در این بخش از آموزش docker، ما نحوه نصب Docker Compose را بر روی سرور Ubuntu 20.04 و نحوه شروع استفاده از این ابزار را نشان خواهیم داد.

پیش نیازها

برای دنبال کردن این مقاله، به موارد زیر نیاز دارید:

  • دسترسی به یک ماشین لوکال Ubuntu 20.04 یا سرور توسعه به عنوان یک کاربر غیر روت با امتیازات sudo. اگر از ریموت سرور استفاده می کنید، توصیه می شود فایروال فعال نصب کنید. برای تنظیم این موارد، لطفاً به راهنمای راه اندازی اولیه سرور برای اوبونتو 20.04 مراجعه کنید.
  • Docker بر روی سرور یا لوکال ماشین شما نصب شده است، مراحل 1 و 2 نحوه نصب و استفاده از Docker در اوبونتو 20.04 را دنبال کنید.

مرحله 1 - نصب Docker Compose

برای اطمینان از آخرین نسخه پایدار Docker Compose، این نرم افزار را از ریپازیتوری رسمی Github آن دانلود می کنیم.

ابتدا آخرین نسخه موجود در صفحه release های آنها را تأیید کنید. در زمان نوشتن این مقاله، آخرین نسخه پایدار 1.27.4 است.

دستور زیر نسخه 1.27.4 را دانلود می کند و فایل اجرایی را در/usr/local/bin/docker-compose ذخیره می کند، که این نرم افزار را به صورت docker-compose به صورت global قابل دسترس می کند:

sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose 

در مرحله بعدی، permission های صحیح را تنظیم کنید تا دستور docker-compose قابل اجرا باشد:

sudo chmod +x /usr/local/bin/docker-compose 

برای بررسی موفقیت آمیز بودن نصب، می توانید این دستور را اجرا کنید :

docker-compose --version 

خروجی مشابه این را مشاهده خواهید کرد:

docker-compose version 1.27.4, build 40524192 

Docker Compose اکنون با موفقیت روی سیستم شما نصب شده است. در بخش بعدی، نحوه تنظیم یک فایل docker-compose.yml و ایجاد محیطی کانتینر شده با این ابزار را خواهیم دید.

مرحله 2 - تنظیم فایل docker-compose.yml

برای نشان دادن نحوه راه اندازی فایل docker-compose.yml و کار با Docker Compose، با استفاده از Nginx image از Docker Hub، رجیستری Docker، یک محیط وب سرور ایجاد خواهیم کرد. این محیط دارای یک فایل HTML ثابت است.

کار خود را با ایجاد یک دایرکتوری جدید در فولدر home خود شروع کرده و سپس وارد آن شوید:

mkdir ~/compose-demo 
cd ~/compose-demo 

در این دایرکتوری، یک فولدر application تنظیم کنید تا به عنوان root داکیومنت برای محیط Nginx شما عمل کند:

mkdir app 

با استفاده از ویرایشگر متن دلخواه خود ، یک فایل index.html جدید در فولدر app ایجاد کنید:

nano app/index.html 

محتوای زیر را در این فایل قرار دهید:

پس از اتمام فایل، آن را ذخیره کرده و ببندید. اگر از nano استفاده می کنید ، می توانید با تایپ CTRL+X و سپس Y و ENTER این کار را انجام دهید.

بعد، فایل docker-compose.yml را ایجاد کنید:

nano docker-compose.yml 

محتوای زیر را در فایل 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 می گوید از کدام version پیکربندی استفاده می کنیم.

سپس بلوک services را داریم، جایی که سرویس هایی که بخشی از این محیط هستند راه اندازی می کنیم. ما یک سرویس واحد به نام web داریم. این سرویس از nginx:alpine image استفاده می کند و redirection پورت را با دستور ports تنظیم می کند. همه درخواست های مربوط به پورت 8000 ماشین میزبان (سیستمی که در آن Docker Compose را اجرا می کنید) به web container روی پورت 80، جایی که Nginx در آن اجرا می شود، هدایت می شوند.

دستور volumes بین ماشین میزبان و کانتینر shared volume ایجاد می کند. این فولدر app لوکال را با container به اشتراک می گذارد، و volume  در/usr/share/nginx/html  داخل container قرار دارد، و سپسdocument root پیش فرض Nginx را بازنویسی می کند.

ذخیره کنید و فایل را ببندید.

ما یک صفحه demo و یک فایل docker-compose.yml راه اندازی کرده ایم تا یک محیط وب سرور containerized ایجاد کند و به آن سرویس دهد. در مرحله بعدی، ما این محیط را با Docker Compose ارائه خواهیم داد.

مرحله 3 - اجرای Docker Compose

با داشتن فایل docker-compose.yml، اکنون می توانیم Docker Compose را اجرا کنیم. دستور زیر image های لازم Docker را دانلود می کند، کانتینری برای سرویس web ایجاد می کند و محیط containerized را در پس زمینه اجرا می کند:

docker-compose up -d 
 

Docker Compose ابتدا به دنبال image تعریف شده در سیستم لوکال شما می گردد و اگر نتواند image را پیدا کند، آن را از 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 
 

اکنون محیط شما در پس زمینه بالا و فعال است. برای تأیید فعال بودن container، می توانید این دستور را اجرا کنید:

docker-compose ps 
 

این دستور به شما اطلاعاتی راجع به کانتینرهای در حال اجرا و وضعیت آنها و همچنین هرگونه redirection پورت در حال حاضر را نشان می دهد:


       Name                     Command               State          Ports        
----------------------------------------------------------------------------------
compose-demo_web_1   /docker-entrypoint.sh ngin ...   Up      0.0.0.0:8000->80/tcp

 

اگر نسخه ی دمو را روی ماشین لوکال خود اجرا می کنید، با وارد کردن localhost:8000 روی مرورگر به برنامه دمو دسترسی پیدا می کنید و یا اگر آن را روی یک ریموت سرور اجرا می کنید، می توانید با وارد کردن  ip یا نام دامین:8000 به برنامه دمو دسترسی داشته باشید.

صفحه ای به این شکل را مشاهده خواهید کرد:

Docker Compose Demo Page

 shared volume که در فایل docker-compose.yml تنظیم کرده اید، فایل های فولدر app شما را با document root کانتینر سینک نگه می دارد، اگر در فایل index.html تغییری ایجاد کنید، هنگام  reload صفحه، آنها به طور خودکار توسط container دریافت می شوند و در مرورگر شما مشاهده می شوند.

در مرحله بعدی، نحوه مدیریت محیط containerized خود را با دستورات Docker Compose خواهید دید.

مرحله 4 - آشنایی با دستورات Docker Compose

شما نحوه راه اندازی یک فایل docker-compose.yml و ایجاد محیطی با docker-compose up را مشاهده کرده اید. اکنون خواهید دید که چگونه می توانید از دستورات Docker Compose برای مدیریت و تعامل با محیط کانتینر شده یا containerized خود استفاده کنید.

برای بررسی لاگ های تولید شده توسط Nginx container، می توانید از دستور 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" "-"

اگر می خواهید بدون تغییر وضعیت فعلی کانتینرها، اجرای environment را موقتاً متوقف کنید، می توانید از دستور زیر استفاده کنید:

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 های مرتبط با این محیط کانتینر شده را حذف کنید، از دستور down استفاده کنید:

docker-compose down 
 

خروجی:

Removing compose-demo_web_1 ... done Removing network compose-demo_default 
 

توجه داشته باشید که با این کار image پایه ای که Docker Compose برای spin محیط شما استفاده می کند حذف نمی شود ( nginx:alpine). به این ترتیب، هر زمان که محیط خود را با استفاده از docker-compose up مجدداً بالا می آورید، روند کار بسیار سریعتر خواهد بود، زیرا image در سیستم شما موجود است.

در صورتی که می خواهید 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 
 

توجه: لطفاً برای اطلاعات بیشتر در مورد دستورات Docker به راهنمای ما در مورد نحوه نصب و استفاده از Docker مراجعه کنید.

نتیجه

در این راهنما، نحوه نصب Docker Compose و تنظیم یک محیط کانتینر شده بر اساس image وب سرور Nginx و همچنین نحوه مدیریت این محیط با استفاده از دستورات Compose را مشاهده کرده ایم.

برای ارجاع کامل به تمام دستورات docker-compose، داکیومنت های رسمی را بررسی کنید.

× در حال پاسخ به: