چطور بتونیم کامپوزفایل بنویسیم-قسمت دوم
2020/07/11
ارسال شده توسط ahmad
61.31k بازدید
در قسمت قبل، در مورد نحوهی نوشتن کامپوز فایل صحبت کردیم و تعدادی از دستورات مربوطه هم معرفی شد. در این قسمت به بررسی ادامه ی دستورات می پردازیم.
دستورالعمل external_links:
برای زمانی که نیاز است تا با کانتینری خارج از این docker-compose.yml ارتباط برقرار کرد استفاده میشود. به صورت CONTAINER:ALIAS نیز استفاده میشود. به مثال زیر توجه کنید.
external_links:
- redis_1
- project_db_1:mysql
- project_db_1:postgresql
دستورالعمل extra_hosts:
با استفاده از آن میتوان داخل etc/hosts/ کانتینر اطلاعاتی که لازم داریم را وارد کنیم و اصتلاحا به آن host اضافه کنیم.
extra_hosts:
- "somehost:162.242.195.82"
- "otherhost:50.31.209.229"
دستورالعمل healthcheck:
میتوان وضعیت سلامت سرویس داخل کانتینر رو بررسی کرد که دارای ۳ تا وضعیت میباشد که قبلا در داکرفایل آنها را توضیح دادیم. تمام مواردی که در این دستورالعمل مورد استفاده قرار میگیرد دقیقا همانند داکرفایل میباشد با این تفاوت که در داکرفایل داخل ایمیج این موارد تنظیم میشد و اینجا برای خود کانتینر تنظیم میگردد.
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 1m30s
timeout: 10s
retries: 3
start_period: 40s
در صورتی که نیاز داشته باشید که healthcheck مربوط به ایمیج را نیز غیر فعال کنید میتواند از دستور زیر استفاده کنید.
healthcheck:
disable: true
دستورالعمل image:
ایمیج مورد استفاده را مشخص میکند و کانتینر از روی این ایمیج آماده میشود. البته میتوان با استفاده از دستورالعمل build ایمیج مورد استفاده را از روی داکرفایل نیز ایجاد کرد.
دستورالعمل labels:
با استفاده از آن میتوان metadata کانتیرها را تغییر داد. گاهی با استفاده از این اطلاعات که به کانتینرها اضافه میشود میتوان سرویسهای مختلفی را دریافت کرد. برای همین این موضوع اهمیت زیادی دارد.
دستورالعمل logging:
با استفاده از آن میتوان سرویس logging مربوط به کانتینر را پیکربندی کرد. همانطور که میدانید و قبلا نیز توضیح داده شد سرویس logging داخل داکر و برای کانتیرها دارای درایورهای مختلفی میباشد از این رو میتوان نوع درایور و تنظیمات آن را در این دستورالعمل مشخص کرد. به مثال زیر توجه کنید.
logging:
driver: syslog
options:
syslog-address: "tcp://192.168.0.42:123"
به صورت پیشفرض ۳ تا درایور برای لاگ کانتیرهای داکر وجود دارد که عبارت است از:
driver: "json-file"
driver: "syslog"
driver: "none"
که درایور json-file به صورت پیشفرض میباشد و تمام آن را میتوان در دستور docker-compose logs مشاهده کرد. یه نکتهی مهم اینکه این آپشن و دستورالعمل وابسته به کانفیگ مربوط به logging driver سرویس داکر شما میباشد و درایورهایی رو میتوانید استفاده کنید که در آنها تعریف کرده باشید.
دستورالعمل network_mode:
برای مشخص کردن شبکه کانتینر مورد استفاده قرار میگیرد. برای زمانی کاربرد دارد که شما بخواهید از modeهای مختلفی به عنوان مثال host و یا none استفاده نمایید.
دستورالعمل networks:
با استفاده از آن میتوان تنظیمات مربوط به شبکهی کامپوزفایل و کانتینرهای آن را تعیین کرد. این دستورالعمل چند تا زیرمجموعهی مهم دارد که در ادامه توضیح داده میشود.
دستورالعمل aliases: با استفاده از آن برای کانتیرها aliase تعریف میشود و میتوان داخل آن network کانتینر را علاوه بر اسم و id آن با این aliase نیز صدا کرد.
دستورالعمل ipv4_address, ipv6_address: با استفاده از آن میتوان ip به هر کانتیر اختصاص داد.
version: '3'
services:
some-service:
networks:
some-network:
aliases:
- alias1
- alias3
ipv4_address: 172.16.238.10
ipv6_address: 2001:3984:3989::
دستورالعمل pid:
میتوان pid داخل کانیتر را با host یکی کرد که برای این کار از این دستورالعمل استفاده میشود.
دستورالعمل ports:
که با استفاده از آن میتوان پورتها رو از داخل کانتیر به هاست publish کرد. به صورت اختصار به صورت HOST:CONTAINER استفاده میشود. برای مثال پورت ۸۰ کانتیر به پورت ۸۰۸۰ هاست مپ میشود.
ports:
- "8080:80"
میتوان تنها پورت کانتیر را قرار داد که آنگاه سرویس داکر آن را بر روی یکی از رندم پورتهای هاست مپ میکند. و میتوان به صورت اختصاصی مشخص کرد که این پورت بر روی کدام پورت و ip سروس هاست bind شود و یا اینکه در چه پروتکلی قرار داشته باشد. در مثالهای زیر تمام موارد آورده شده است.
ports:
- "3000"
- "3000-3005"
- "8000:8000"
- "9090-9091:8080-8081"
- "49100:22"
- "127.0.0.1:8001:8001"
- "127.0.0.1:5000-5010:5000-5010"
- "6060:6060/udp"
اما به گونهای دیگر نیز پورت را تعریف کرد که دارای توضیحات زیاد و روش طولانی آن میباشد. در مثال زیر پورت ۸۰ داخل کانتینر را به پورت ۸۰۸۰ داخل هاست مپ میکند. این نوع فرمت در نسخه ۳.۲ به بعد میباشد.
ports:
- target: 80
published: 8080
protocol: tcp
mode: host
دستورالعمل restart:
این دستورالعمل برای سیاست restart کانتینر مورد استفاده قرار میگیرد و به صورت پیشفرض برای همهی کانتینرها no میباشد. این دستورالعمل تنها در زمان استفاده غیر swarm کاربرد دارد. اگر از آپشن always استفاده شود همواره بعد از هر اتفاقی حتی اگر کانفیگ کانتینر مشکل داشته باشد مدام تلاش میکند که آن را استارت کند. آپشن on-failure برای زمانی است که به دلیل خطایی کانتینر استاپ شده باشد که آن را مجدد استارت میکند. آپشن unless-stopped که بسیار شبیه always میباشد اما اگر کانتیر به صورت دستی stop شود بعد از restart سرویس داکر کانتیر را استارت نمیکند اما در always این کار را انجام میدهد.
دستورالعمل sysctls:
با استفاده از آن میتوانید آپشنهای مربوط به sysctl داخل کانتیر ایجاد و اجرا کنید. به دو صورت زیر مورد استفاده قرار میگیرد.
sysctls:
net.core.somaxconn: 1024
net.ipv4.tcp_syncookies: 0
sysctls:
- net.core.somaxconn=1024
- net.ipv4.tcp_syncookies=0
دستورالعمل ulimits:
با استفاده از آن آپشنهای مربوط به limit.conf را میتوان در کانتیر تغییر داد و اجازه استفاده بیشتر و بهینهتر از منابع سیستمعامل را به آن داد.
ulimits:
nproc: 65535
nofile:
soft: 20000
hard: 40000
دستورالعمل volumes:
به دو روش یکی قرار دادن بر روی مسیری از دایرکتوری هاست و دیگری ایجاد والیوم با استفاده از درایورهای مختلف میتوان دادههای کانتینر را بر روی هاست ذخیره کرد. در استفاده از والیوم نیز میتوان به صورت مختصر یعنی HOST:CONTAINER استفاده کرد یا به صورت طولانیتر تمام هر قسمت را توضیح داد. در مثال زیر چند نمونه از استفادهی مختصر آن آورده شده است.
volumes:
# Just specify a path and let the Engine create a volume
- /var/lib/mysql
# Specify an absolute path mapping
- /opt/data:/var/lib/mysql
# Path on the host, relative to the Compose file
- ./cache:/tmp/cache
# User-relative path
- ~/configs:/etc/configs/:ro
# Named volume
- datavolume:/var/lib/mysql
معمولا این روش بسیار مرسومتر است و روش توضیح بیشتر آن کمتر استفاده میشود.
دستورالعمل domainname:
میتوان با استفاده از آن domainname را برای کانتینر تعریف کرد.
دستورالعمل hostname:
با استفاده از آن hostname برای کانتینر تعریف میکنیم.
دستورالعمل privileged:
اگر در کانتینر نیاز به سطح دسترسی بیشتری هستیم آن را با privileged اجرا خواهیم کرد. این موضوع نکتهی امنیتی دارد و بهتر است که استفاده نشود.
دستورالعمل user:
کاربر کانتینر در زمان اجرا را مشخص میکند.
دستورالعمل working_dir:
دایرکتوری کاری کانتینر را مشخص میکند.
دستورالعمل Volume configuration reference:
والیومی که در قسمت بالاتر توضیح داده شد مربوط به قسمت سرویس میباشد اما این قسمت برای تعریف والیوم میباشد. این قسمت هم ردیف قسمت سرویس در کامپوز فایل قرار داده میشود. این دستورالعمل شامل چند زیرمجموعه میباشد که عبارتند از:
دستورالعمل driver: با استفاده از آن میتوانیم درایور مربوط به والیوم را مشخص کنیم. به صورت پیشفرض درایور local استفاده میشود.
دستورالعمل driver_opts: با استفاده از این دستورالعمل میتوان لیست آپشنهای مربوط به درایور والیوم را مشخص و تنظیم کرد. به عنوان مثال میتوان برای والیوم خود محدودیت حجم در نظر گرفت.
دستورالعمل external: اگر این آپشن true باشد یعنی والیوم بیرون از کامپوز فایل تعریف میشود و وجود خواهد داشت و باید از آن استفاده کند. معمولا این آپشن مواقعی که از stack استفاده میشود کاربرد دارد.
دستورالعمل labels: با استفاده از آن میتوان metadata والیومها را تغییر داد.
دستورالعمل name: برای کانتینر اسم انتخاب کرد. (از نسخهی ۳.۴ به بعد)
دستورالعمل Network configuration reference:
قبلا درباره network که زیرمجموعه سرویس بود صحبت کردیم. این قسمت هم ردیف سرویس در کامپوز فایل بوده و برای معرفی شبکهی مورد استفاده کاربرد دارد. این دستورالعمل چندین زیرمجموعه دارد که در ادامه به آنها اشاره میشود:
دستورالعمل driver: با استفاده از آن درایور شبکه مورد نظر را مشخص میکند که به صورت پیشفرض bridge میباشد.
دستورالعمل driver_opts: با استفاده از آن میتوانیم آپشنهای مربوط به درایور را مشخص کنیم که این موارد به صورت key-value تنظیم میگردد.
دستورالعمل attachable: میتوان یک کانتینر را به شبکهی overlay متصل کرد.
دستورالعمل enable_ipv6: نسخهی ipv6 را برای این شبکه فعال میکند.
دستورالعمل ipam: برای اینکه بتوان درایور ipam را تغییر داد از آن استفاده میشود. به عنوان مثال میتوان subnet و .. را تغییر داد و آنها را کانفیگ کرد.
دستورالعمل internal: به صورت پیشفرض تنظیم شده است. به معنای اینکه شبکه داخل کامپوزفایل ایجاد می شود و داخل آن استفاده میشود.
دستورالعمل external: به معنای آن میباشد که این شبکه بیرون از کامپوز فایل تعریف شده است و میبایست قبل از اجرای کامپوز فایل آن را ایجاد نمایید.
دستورالعمل labels: با استفاده از آن میتوان metadata مربوط به شبکه را کاملتر کرد.
دستورالعمل name: برای شبکهای که ساخته میشود اسم انتخاب میکند.
نحوهی استفاده از متغیرها در خود کانفیگ فایل:
در زمان آماده سازی کامپوز فایل میتوان برخی از مقادیر را به صورت متغیر تعریف کرد. نحوهی استفاده از متغییرها به صورت زیر میباشد.
$VARIABLE
${VARIABLE}
تمام این متغیرها و مقادیر آنها در یک env. فایل باید باشد تا در کامپوز فایل مورد استفاده قرار گیرد.
برخی از موارد دیگه همانند configs و secrets باقیمانده است که آنها را در زمانی که میخواهیم از swarm استفاده کنیم توضیح خواهیم داد.
منبع
برچسب ها:
ahmadahmadrafieeahmadrafiee.irauto deployautomationcicdcicd.ircontainerdevopsDockerdocker kubernetes devopsdocker-composedockerfiledockerme.irfreegitlabgtilab-ciinfrastructureinfrastructure consultantkuberneteslinuxlinuxservice.irplatformrancherrancher.irswarmswarm modeآموزش دواپسآموزش گیتلباحمداحمد رفیعیبا ما متخصص شویدداکر و کوبرنتیزداکرفایلداکرمیدواپسدوره آموزش رایگان داکر و کوبرنتیز و دواپسدوره آموزش فارسی داکر و کوبرنتیز و دواپسزیرساختسایت آموزشی احمد رفیعیکوبرنتیزگیتلبلینوکسمشاور زیرساختویدئوهای آموزش فارسی داکرویدئوهای آموزشی داکرویدئوهای آموزشی داکر و کوبر و دواپسویدئوی آموزشی کوبرنتیزویدئوی آموزشی گیتلب
مطالب زیر را حتما مطالعه کنید
گریز از تحریم داکر با چند روش
متاسفانه گروه داکر اجازهی استفاده از سرویسهای خود را بر...
امان از کانفیگ Default سرویس Mongodb
mongoDB Hacked برخی از سرویسها به صورت پیشفرض دارای کانفیگی...
دستورات مدیریتی داکر – این قسمت docker secret
این محتوا تنها در زمانی که از داکر به صورت...
ایجاد ریجیستری خصوصی
داکر ریجیستری از اجزای اصلی سرویس داکر میباشد. ریجیستری یک...
دستورات مدیریتی داکر- این قسمت docker container/image
دستور docker container: در این قسمت در مورد دستور docker...
توضیح دستورات داکر – این قسمت docker stats, update
دستور docker stats: با استفاده از این دستور به صورت...
canada pharmacy not requiring prescription
buy tadacip with paypal