داکر ران در مقابل داکر کامپوز؛ کدام بهتر است؟
داکر ران و داکر کامپوز دو دستور محبوب و کاربردی در فضای پلتفرم داکر هستند که در این مقاله آنها را مقایسه میکنیم.
این دو دستور هر دو به کاربر اجازه میدهند تا بتواند کانتینرهای مدنظر خود را اجرایی کند. اما چه تفاوت اساسی بین این دو دستور وجود دارد و چرا باید تفاوتهای آن را بیشتر بشناسیم؟ اگر میخواهید اطلاعات مفیدی از این دو دستور در پلتفرم داکر داشته باشید، به شما پیشنهاد میکنیم ادامه این مقاله را از دست ندهید.
تفاوتهای بین داکر ران و داکر کامپوز
تفاوت کلیدی و اصلی بین داکر ران در مقابل داکر کامپوز آن است که داکر ران کاملا بر پایه خط فرمان یا command line اجرا میشود، در حالی که داکر کامپوز اطلاعات مورد نیاز را از یک فایل YAML دریافت میکند. تفاوت دیگر بین این دو دستور آن است که داکر ران میتواند یک کانتینر را اجرا یا ران کند. از طرف دیگر داکر کامپوز میتواند چند کانتینر مختلف را پیکربندی و اجرا کند.
تصور کنید میخواهید از یک کانتینر Nginx برای تست وبسایت روی دسکتاپ کامپیوتر خود استفاده کنید. برای این کار دو رویکرد در مقابل شما قرار دارد:
- کانتینر Nginx را روی کامند لاین با داکر ران اجرا کنید.
- Nginx با داکر کامپوز و یک فایل YAML از پیش پیکربندی شده اجرا کنید.
مثالی برای داکر ران (Docker Run)
بعد از توضیحاتی که درباره داکر ران و داکر کامپوز دادیم، حال میخواهیم نمونهای از اجرای کانتینر به وسیله دستور داکر ران را ببینیم. دستور داکر ران برای اجرای کانتینر nginx با پارامترهایی برای پیکربندی حافظه، محدودیتهای CPU و سایر متغیرهای مربوط برای اجراییشدن به شکل زیر هستند.
Docker run –d –rm –name=my-website –cpus=1.5 –memory=2048m –p 80:80 –v ./wesbsite:/usr/share/nginx/html/ nginx:latest
برای وارد کردن خط فرمان روی لینوکس باید قبل از آدرس $PWD را وارد کنید. این دستور عمل داکر طولانی است، و پارامترهای آن به صورت ملایمی مشخص شدهاند. در فضای کاری داکر و دواپس (DevOps) یک شرکت، این خط فرمانهای طولانی چهار یا پنج بار بسط داده میشوند. به عبارتی این خط فرمان دستوری نیست که یک مهندس دواپس بخواهد آن را دوباره تایپ کند، به همین دلیل دستورهای اینچنینی در فضاهای مختلف کپی و ادیت میشوند.
مثال رویکرد داکر کامپوز (Docker Compose) با فایل YAML
خط فرمان یا کامند لاین داکر ران، تفاوتهایی با داکر کامپوز دارد. دستور داکر کامپوز تمام کدهای مربوط به پیکربندی اطلاعات را روی فایلی به نام YAML کدنویسی میکند. این فعالیت در داکر به نام فایل docker-compose.yaml شناخته میشود. یک فایل docker-compose.yaml به شکل زیر استفاده میشود.
version: ‘3.9’
services:
nginx-service:
container_name: my-website
image: nginx : latest
cpus: 1.5
mem_limit: 2048m
ports:
– “80:80”
Volumes:
$PWD/website : /usr/share/nginx/html
زمانی که یک فایل docker-compos.yaml پیکربندی شد، کانتینر داکر مدنظر میتواند به سادگی با استفاده از دستور docker-compose up در محل مورد نظر اجرا شود. نتیجه نهایی اجرای کانتینر به وسیله داکر کامپوز یا داکر ران مانند هم است. در هر دو حالت در نهایت کانتینر پیکربندی شده بر اساس پارامترهایی که تعریف کردید اجرا میشود.
اجرای چندین کانتینر با هم
یکی از مزایای کلیدی که داکر کامپوز نسبت به داکر ران دارد، توانایی پیکربندی و اجرای چندین کانتینر به صورت همزمان است. برای مثال اگر اپلیکیشن ابر بومی شما نیاز داشته باشد تا کانتینرهای Nginx، Tomcat و Apache httpd را به صورت همزمان اجرا کند، شما باید از سه دستور جداگانه داکر ران به شرح زیر برای آن استفاده کنید.
docker run –d –rm –name=my-website-01 –cpus=1.5 –memory=2048m -p 80:80 -v $PWD/website : /usr/share/nginx/html/ nginx:latest
docker run –d –rm –name=my-website-02 –cpus=1.5 –memory=2048m -p 88:80 httpd : latest
docker run –d –rm –name=my-java-app-01 –cpus=2.5 –memory=4096m -p 8099:8080 tomcat : latest
دستورهایی که در بخش بالا به آن اشاره کردیم، مربوط به دستورهای جداگانه برای اجرای کانتینرها توسط داکر ران بود. حال بر خلاف داکر ران، داکر کامپوز به شما اجازه میدهد تا کانتینرهای گوناگون را در یک فایل YAML پیکربندی کنید. زمانی که دستور docker-compose up اجرا میشود، هر کانتینر به صورت جداگانه با توجه به فایل docker-compose.yaml اجرا میشود. اجرای چندین کانتینر جداگانه به صورت همزمان در داکر کامپوز به شکل زیر خواهد بود.
version: ‘3.9’
services:
nginx-service:
container_name: my-website-01
image: nginx : latest
cpus: 1.5
mem_limit: 2048m
ports:
– “80:80”
Volumes:
$PWD/website : /usr/share/nginx/html
apache-service:
container_name: my-website-02
image: http : latest
cpus: 1.5
mem_limit: 2048m
ports:
– “88:80”
tomcat-service:
container_name: my-java-app-1
image: tomcat : latest
cpus: 2.5
mem_limit: 4096m
ports:
– “8099:80”
داکر ران یا داکر کامپوز؛ از کدام باید استفاده کنیم؟
سه سناریو کلیدی وجود دارد که در آنها بهتر است از داکر کامپوز به جای داکر ران استفاده کنید:
- پارامترهای تشکیلدهنده باعث میشوند تا دستور داکر ران طولانیتر از ۷۵ کاراکتر شود.
- زمانی که باید چند کانتینر را به صورت همزمان اجرا کنید.
- متعلقات استارتآپ بین کانتینرها وجود دارد.
- پیکربندیها نیاز به تایید شدن توسط یک IDE یا linter داشته باشند.
- تاریخچه تغییرات باید در گیت یا گیتهاب مدیریت شوند.
مزایای استفاده از داکر کامپوز نسبت به داکر ران
با پیچیدهتر شدن فضای ابری استفاده شده برای یک اپلیکیشن، خط فرمانهای طولانی داکر ران میتوانند دست و پا گیر باشند. زمانی که یک خط فرمان داکر طولانیتر از ۷۰ یا ۸۰ کاراکتر میشود، منطقیتر است تا کانتینرهای خود را در یک فایل docker-compose.yaml پیکربندی کنید. به علاوه زمانی که یک اپلیکیشن با ابر بومی نیاز به پشتیبانی بیشتر از یک کانتینر داشته باشد، بهتر است از داکر کامپوز استفاده کنید.
از طرفی داکر کامپوز میتواند متعلقات بین کانتینرها را نیز به خوبی پیکربندی کند. برای مثال اگر میخواهید مطمئن شوید یک کانتینر Redis Docker به صورت کامل قبل از کانتینر Nginx اجرا میشود، میتوانید از طریق فایل docker-compose.yaml این مسئله را مدیریت کنید.
کلام آخر
در این مقاله سعی کردیم تا شما را به طور کامل با تفاوتهای بین داکر کامپوز و داکر ران آشنا کنیم. همانطور که در مقاله خواندیم، متوجه شدیم که داکر کامپوز کاربردها و مزایای بیشتری نسبت به داکر ران دارد. با این حال استفاده از هر دوی این دستورها کاربردی است و شما میتوانید با استفاده از هر دوی آنها پروژههای خود را پیش ببرید.
با یوتاب میتوانید در مخازنی امن و سبک، پروژههای خود را ذخیره و با همکاران خود در فضایی یکپارچه به اشتراک بگذارید و به صورت نامحدود ورژنهای مختلف نرمافزار خود را در مخازن داکر ابر یوتاب نگهداری کنید.