استفاده از bind mount برای ماندگار کردن اطلاعات

استفاده از bind mount برای ماندگار کردن اطلاعات

استفاده از bind mount برای ماندگار کردن اطلاعات

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

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

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

برای برنامه های برپایه ی Node، ابزار nodemon ابزار خیلی خوبی برای مشاهده ی تغییرات و همینطور راه اندازی دوباره (Restart) برنامه است. برنامه های مشابه nodemon در زبان ها و فریمورک های دیگر هم وجود دارد.

مقایسه ی سریع انواع volume

Bind mount و named volume دو نوع اصلی volume ها هستند که به صورت پیشفرض با docker engine نصب می شوند. با این حال، درایورهای volume دیگر هم برای استفاده های مختلف توسط داکر پشتیبانی می شود. از جمله ی آن ها می توان به SFTP , Ceph, NetApp, S3 اشاره کرد.

موضوعBind mountNamed volume
موقعیت قرار گیری در هاستشما انتخاب می کنیدداکر انتخاب می کند
سینتکس دستور/path/to/data:/usr/local/datamyVolume:/usr/local/data
تجمیع محتویات کانتینر با volume جدیدخیربله
پشتیبانی از درایورهای volumeخیربله

 

 

 

 

 

 

راه اندازی یک کانتینر برای توسعه نرم افزار (Dev-Mode Container)

اگر می خواهید یک کانتینر را برای طی کردن مسیر توسعه ی محصول راه اندازی کنیم باید مراحل زیر را انجام بدهیم.

  • سورس کد برنامه را داخل کانتینر سوار (mount) کنیم.
  • تمام وابستگی ها (dependencies)، شامل وابستگی های dev را نصب کنیم.
  • Nodemon را برای مشاهده ی تغییرات فایل سیستم راه اندازی کنیم.

در ادامه ی این آموزش قصد داریم، کارهایی که در بالا گفته شد را با هم انجام دهیم.

  1. اول از همه مطمئن شوید هیچ کانتینر درحال اجرایی از روی getting-started ندارید.
  2. دستور زیر را اجرا کنید. در ادامه بخش های مختلف این دستور را توضیح خواهم داد.
docker run -dp 3000:3000 \
     -w /app -v "$(pwd):/app" \
     node:12-alpine \
     sh -c "yarn install && yarn run dev"

اگر از از PowerShell استفاده میکنید دستور زیر را وارد کنید.

docker run -dp 3000:3000 `
     -w /app -v "$(pwd):/app" `
     node:12-alpine `
     sh -c "yarn install && yarn run dev"

در این دستور:

  • -dp 3000:3000
    با این بخش از دستور که قبلا آشنا شده ایم ولی جهت یادآوری، برای این است که برنامه در حالت detached یا همان Background اجرا شود و البته بین دو port از ماشین میزبان و کانتینر ارتباط برقرار شود.
  • w /app-
    working directory یا همان مسیری که قرار است دستورهای آنجا اجرا شوند را تعیین می کند.
  • v “$(pwd):/app”- 
    در این بخش از دستور، مسیر جاری که داخل آن هستیم را به مسیر /app داخل کانتینر متصل می کند.
  • Node:12-alpine
    همان image پایه ای هست که می خواهیم از آن استفاده کنیم.
  • ”Sh -c “yarn install && yarn run dev
    می خواهیم این دستور در working directory اجرا شود. ما دستورهای شل را با sh شروع میکنیم. باتوجه به اینکه alpine از bash پشتیبانی نمی کند، yarn install را اجرا می کنیم تا تمام وابستگی های برنامه را نصب کند و سپس yarn run dev را اجرا می کند. اکر به داخل فایل package.json نگاه کنیم، خواهیم دید که اسکریپت dev درحال اجرای nodemon است.
  1. شما می توانید لاگ ها را با دستور docker logs -f <container-id> مشاهده کنید.
docker logs -f <container-id>
 $ nodemon src/index.js
 [nodemon] 1.19.2
 [nodemon] to restart at any time, enter `rs`
 [nodemon] watching dir(s): *.*
 [nodemon] starting `node src/index.js`
 Using sqlite database at /etc/todos/todo.db
 Listening on port 3000

بعد از دیدن این لاگ ها به راحتی با Ctrl+C می توانید از آن خارج شوید.

  1. حالا بیایید تغییری توی برنامه مان بدهیم. در فایل src/static/js/app.js نوشته ی دکمه ی "Add Item" را به “Add” تغییر بدهید. این تغییر را در خط 109 خواهد بود.
-{submitting ? 'Adding...' : 'Add Item'}
+{submitting ? 'Adding...' : 'Add'}

5- حالا به سادگی صفحه ی برنامه را باز کنید و اگر برنامه را باز دارید آن را Refresh کنید. شما باید تغییراتی که داده بودید را ببینید. البته تا سرور node بعد از این تغییرات restart شود، ممکن است چندثانیه طول بکشد. پس اگر خطایی دریافت کردید بعد از چند ثانیه دوباره refresh کنید.

نمایی از برنامه ی ToDo

6- حالا خودتان هر تغییر دیگری که دوست دارید داخل برنامه بدهید را اعمال کنید. وقتی تغییرات تان تمام شد، کانتینر را متوقف کنید و image جدید را از روی آن با دستور

 docker build -t getting-started .

ایجاد کنید.

استفاده از bind mount برای راه اندازی محیط های توسعه خیلی رایج است. از جمله مزایای این روش mount کردن این است که، ماشین مورد استفاده برای توسعه نیازی به نصب همه ی ابزارها و شرایط مورد نیاز برای برنامه را ندارد. و با یک دستور docker run محیط توسعه آماده ی استفاده است. در درس های بعدی درباره ی docker compose صحبت خواهیم کرد که این کار به ساده کردن دستورهایمان خیلی کمک خواهد کرد. ما الان از پرچم های زیادی استفاده کردیم.

خلاصه

در این درس، ما هم توانستیم داده هایمان را ماندگار کنیم و هم به نیازمندی ها و خواسته های سرمایه گذارها و بنیانگذارهایمان خیلی سریع پاسخ دادیم. هووورررا🎉. حدس بزنید چی شد؟ خبرهای خوبی دریافت کردیم!

پروژه ی شما انتخاب شد تا در آینده توسعه داده شود.

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

دوره در دست تالیف است ... rocket
نظرات
اگر login نکردی برامون ایمیلت رو بنویس: