داکرایز (dockerize) کردن یک پروژه بزرگ .net

سلام به همگی تو این مقاله قصد دارم توضیح بدم که چطور وقتی چندتا سرویس داریم بتونیم تون ها رو در غالب کانتینر های داکر بالا بیاریم و ازشون استفاده کنیم  حالا این سرویس ها میتونه با هر زبانی نوشته شده باشه و ربطی به تکنولوژی هایی که برای پیاده سازی سرویس هامون استفاده کردیم هم نداره.

خب سناریو این شکلیه که ما چند تا سرویس ساده داریم  که اتفاقا انقدرهم ساده هستن هیچ uiی هم ندارن و هر سرویس یک کنسول اپلیکیشن سادس حالا این سرویس ها بهم یه سریاشون ربط دارن مثلا توی محیط production  اول باید سرویس 2 اجرا بشه که به طبع اون سرویس 3 بتونه اجرا بشه و از امکانات سرویس 2 استفاده کنه یا مثلا کل سرویس هامون نیازه به redis دسترسی داشته باشن پس اول از همه باید redis  اجرا بشه.

خب الان که سناریو رو متوجه شدیم فکر میکنم بریم برای توضیحات مربوطه خوبه.

مرحله اول اینه که روی پروژه توی VS کلیک راست میکنیم و add و بعدش هم docker support رو انتخاب میکنیم و تنظیمات خودمون رو مبنی بر اینه قراره لینوکس باشه و یا ویندوز یا این موارد انجام میدیم.
بعد از اینکه داکرفایلمون رو ویژوال استودیو ایجاد کرد میریم سراغ کار با داکر اما اینو یادتون باشه معمولا یه ایرادی که اینجا وارد میشه ویژوال استودیو میاد متناسب با اپلیکیشن های وب داکر فایل رو ایجاد میکنه که شما باید یه تغییری بدین و بزارینش روی نسخه های کامل دات نت مثلا aspnet:8.0

خب حالا وقت اینه که از داکر فایلتون یه image  بسازید که خیلی راحت توی مسیری که داکر فایل هست یه cmd یا powershell باز میکنید  و این دستور رو اجرا میکنید 

docker build -t "service1" .

خب این دستور از پروژتون یه داکر ایمیج با اسم service1 ایجاد میکنه.

اگه بخواین از این ایمیج هم یه کانتینر بسازید و رانش کنید میتونید بزنید 

docker run -itd --name "service1" "service1"

که این دستور توی محیط اینتر اکتیو ودیتچ کانتینری با اسم service1  از ایمیجی با نام service1  ایجاد و ران میکنه. اون دیتچ هم یعنی با بسته شدن پنجره کنسول کانتینر منو نبند و اینتراکتیو هم یعنی به م اجازه برقراری با اپلیکیشنم توی محیط کانتینر رو بده.

تا اینجا تمام ما یه برنامه رو به همین راحتی داکر کردیم و تونستیم توی داکر اجراش کنیم.

حالا وقت اینه سناریو رو ببریم سمت پیشرفته تر شدن که بالا توضیح دادم میتونید برای خودتون چندتا سرویس رو ایمیج کنید و این مراحلی که در ادامه گفته میشه تست  کنید .

ما میخوایم چندتا سرویس توی یه شرایط خاصی اجرا بشه که بالاتر توضیح دادم پس وقتی قراره همچین شرایطی داشته باشیم باید بریم سراغ docker-compose  که چیز خاصی هم نیست فقط یه ماژول روی داکره که مدیریت کانتینر ها رو راحت تر میکنه.

پس اینجا یه نمونه از داکر کامپوز مینویسم که چندتا سرویس رو توی شرایط خاص ران میکنه

version: '3.8' # Specify the version of Docker Compose

services:
 redis:
 image: redis:latest # Use the official Redis image
 container_name: redis # Specify the container name
 restart: always # Restart policy
 ports:
 - "6379:6379" # Expose Redis port
 networks:
 - default # Use the default bridge network

 service1:
 image: service1 # Specify the image name
 container_name: service1# Specify the container name
 restart: always # Restart policy
 command: "192.168.1.1" # Command to run with the container
 stdin_open: true # Keep STDIN open
 tty: true # Allocate a pseudo-TTY
 depends_on:
 - redis # Ensure this service starts after redis

 service2:
 image: service2 # Specify the image name
 container_name: service2 # Specify the container name
 restart: always # Restart policy
 ports:
 - "6969:6969" # Map port 6969 from the container to the host
 command: ["0.0.0.0", "6969", "http://localhost"] # Command to run with the container
 depends_on:
 - redis # Ensure this service starts after redis

 service3:
 image: service3 # Specify the image name
 container_name: service3 # Specify the container name
 restart: always # Restart policy
 command: ["http://host.docker.internal:80", "192.168.1.1", "192.168.1.1:6969"] # Command to run with the container
 depends_on:
 - service1 # Ensure this service starts after the tcp service
 - redis # Ensure this service starts after redis
 stdin_open: true # Keep STDIN open
 tty: true # Allocate a pseudo-TTY

networks:
 default:
 driver: bridge # Use the default bridge network

خب این داکر کامپوز من برای 3 تا سرویسی که نوشتم و یدونه هم redis که قبل همه باید ران بشه خوندش هم که خیلی راحته اول ردیس اجرا میشه پورت هاش رو دریافت میکنه و تمام تو مرحله بعدی service1 بعد هم service2 و در نهایت service3 ولی نکته ای که توی service 3 هست اینه که به service 2 و redis وابستگی داره یعنی باید اول اونها اجرا بشن بعد این اجرا بشه  البته تمام service ها به redis  وابسته هستن و تمام.


مقاله برنامه نویسی پیمان دهقان ۲۶۵
داکرایز (dockerize) کردن یک پروژه بزرگ .net
داکرایز (dockerize) کردن یک پروژه بزرگ .net

۱۴۰۳/۰۹/۱۴ ۲۶۵
پیمان دهقان

تفاوت hashset و list
تفاوت hashset و list

در این مقاله به بررسی hashset و مقایسه آن با لیست ها میپردازیم

۱۴۰۳/۰۴/۰۱ ۳۲۰
پیمان دهقان

شخصی سازی identity
شخصی سازی identity

در این مقاله قصد دارم یکم identity مایکروسافت رو شخصی سازی کنم

۱۴۰۳/۰۳/۲۵ ۳۳۴
پیمان دهقان

معرفی کتابخانه Bootstrap Flags
معرفی کتابخانه Bootstrap Flags

یه کتابخونه باحال برای ایکون پرچم ها

۱۴۰۳/۰۳/۱۵ ۳۴۴
پیمان دهقان

قالب API پاندا
قالب API پاندا

قالب آماده برای پروژه های API

۱۴۰۳/۰۳/۰۷ ۳۵۵
پیمان دهقان

آموزش ایجاد Template برای nuget
آموزش ایجاد Template برای nuget

۱۴۰۳/۰۳/۰۴ ۳۰۲
پیمان دهقان