پوریا منتخب
پوریا منتخب
خواندن ۳ دقیقه·۳ سال پیش

Docker Desktop Bind Mount With Asp.net Core



سلام به همه دوستداران داکر و طرفداران دات نت :)

الان که این مقاله رو دارم مینویسم در حقیقت بعد از کلی کلنجار رفتن با این مشکل، زیر و رو کردن استک و فروم های مربوط به داکر، این کتاب و بخون اون مقاله رو بخونه. خوشبختانه خودم به جواب رسیدم و با شوق اینجا می نویسیمش که بقیه هم اگه بهش برخورد کردن بدردشون بخوره. (اگه اشتباه نگارشی دارم ببخشین)

داستان چیه ؟

یه پروژه ساده با Asp.net Core دارم که دو تا تکست رو صفحه می گیره و در قالب یک فایل متنی اون رو ذخیره می کنه، خیلی ساده. یه شرط هم داره که نمیذاره دو تا فایل همنام ذخیره بشن، مثلا دو تا فایل با یه اسم.

(شایان به ذکره که این فایل رو درون root پروژه داخل یه فولدر به اسم Storage نگه میدارم).اگه دوس داشتین این پروژه رو از گیت هابم بردارین و اون Star رو هم یه قلقلکش بدین :)

دقیقا داستان از همین جا شروع شد که می خواستم این فایل ها رو به صورت دائم داشته باشم. میدونین که اگه کانتینرتون رو بیارین بالا و یه سری فایل داخلش ذخیره کنین و بعدش اون کانتینر رو حذف کنین، در حقیقت با فایل هاتون هم باید خداحافظی کنین مگر اینکه بخواین یا از Named Volume ها استفاده کنین که اینم یه مشکل ریز داشت که جلوتر می گم و یا Bind Mount که تو این حالت دیگه مدیریت فایل هاتون به جای این که دست داکر باشه دست خودتونه.

داکر فایلم و اینطوری نوشتم :

FROM mcr.microsoft.com/dotnet/sdk:5.0 AS final
WORKDIR /app
COPY *.csproj ./
RUN dotnet restore
COPY . ./
RUN dotnet publish -c release -o out
FROM mcr.microsoft.com/dotnet/aspnet:5.0
WORKDIR /app
EXPOSE 80
COPY --from=final /app/out .
ENTRYPOINT [&quotdotnet&quot,&quotDockerVolumeConceptProject.dll&quot]

خب تا اینجا همه چی اوکیه و همتون میدونین که این دستورات چی کار می کنن. حالا می خوام علاوه بر این که محتویات درون اون پوشه Storage روی کانتینر رو همیشه داشته باشم حتی در صورت حذف کانتینر، حتی به غلط:)، می خوام که بتونم هر تغییری که توی فایل های درون پروژه میدم رو بتونم لایو، روی کانتینرم ببینم و دیگه نیاز نداشته باشم با هر تغییرات دوباره یه کانتینر جدید ران کنم. ساچ عه وو

خیلی ساده یه پوشه، درون هر جایی از سیستمم که می خوام درست می کنم، مثلا تو درایو C پوشه ای به اسم Data ساختم و پابلیش پروژه رو درون این فولدر قرار دادم. خیلی خیلی دقت کنین که حتما باید پابلیش پروژه تون رو بایند کنین چون خروجی داکر فایلتون در نهایت پابلیش پروژه است که اگه مثلا طبق آموزش استاد ماکسی میلیامز رفته باشین جلو (البته اون تو آموزشش از node استفاده می کنه) که روت پروژه رو بایند می کنه قطعا به مشکل می خورین و کانتینرتون اجرا نخواهد شد و به همین خاطر من پابلیش پروژه رو درون این پوشه یعنی Data قرار دادم.

حالا خیلی شیک میتونین این کامند رو اجرا کنین :

docker run -dp 3000:80 --name &quotyour-container-name&quot -v c:\Data:c:\app &quotyour-image-name&quot

حالا محتویات درون کانتینرتون بایند میشه به این پابلیشی که تو پوشه Data هست. هر فایلی درون پوشه Storage درون کانتینرتون ایجاد بشه، بلافاصله یه کپی ازش در آدرس متناظر با اون که تو همین پوشه Data هم هست قرار می گیره.(اولین خواستمون اکی شد، داده هامون رو میتونیم الان دائمی داشته باشیم و ملزم به عمر کانتینرمون نیست).

خواسته بعدیمون هم اینه که تغییرات رو لایو داشته باشیم. خیلی راحت هر تغییری که دادین یه بار پروژه رو پابلیش کنین تو همون پوشه Data. تمام


امیدوارم که این مقاله بتونه مشکل گشا باشه دو نقطه دی

راستی شاید دوست داشته باشین مقاله های دیگه ام رو که تو مجموعه آموزشی خودم یعنی استادباش هست رو بخونین یا مثلا یه سری به دوره های آموزشیم بزنین.

داکروالیومdocker volumedocker bind mountdocker
یه ذره برنامه نویس که هر چی میرم جلو میبینم هیچی بلد نیستم. تو مجموعه آموزشی ostadbash.com دانشم رو با بقیه به اشتراک میذارم
شاید از این پست‌ها خوشتان بیاید