در این فصل یاد میگیرید که Docker چگونه داده ها را مدیریت می کند. درک اینکه بدانید داده ها چطوری ذخیره میشوند و service ها چگونه از این داده ها استفاده میکنند بسیار مهم است. در این فصل کانتیرهای stateless و stateful را باهم بررسی میکنیم و میبینیم که چگونه باید تنظیمات مناسب برای storage ها را برای برنامه های مختلف پیاده کنیم. در انتهای این فصل شما انواع storage های داخلی Docker را می شناسید و تولید و مدیریت Docker volumes ها را یاد میگیرید.

معرفی فصل

در فصل های قبل راه اندازی کانتینرها و networking ابری را دیدیم و حالا نوبت به کنترل پیشرفته تر life cycle کانتینرها می رسد. فرض کنید باید وب اپلیکیشن یک فروشگاه آنلاین را دیپلوی کنید. این وب اپلیکیشن یک database نیاز دارد که اطلاعات مختلف محصولات و کاربران و پرداخت ها و ... را درون خود ذخیره کند. برای این کار نیاز داریم که تنظیمات storage را برای این دیتابیس انجام دهیم تا اطلاعات آن با تغییرات life cycle کانتینر از بین نرود!

2 نوع کلی storage در داکر وجود دارد. اولین نوع storage به صورت couple شده با life cycle کانتینر است. اگر کانتینر پاک شود این storage نیز پاک شده و به هیچ عنوان قابل برگشت نیست!


گاهی کانتینر ناخواسته پاک میشود:

ممکن است در حال بروز کردن یک فایل compose باشید و یک ایراد نوشتاری یا تنظیمات ساده درون تغییرات شما باشد! با بروز کردن سرویس های درون این فایل با پیغام خطا مواجه می شوید و تمام سرویس ها پاک شده و از دسترس خارج می شوند! اگر از نوع اول storage استفاده کرده اید و هیچ فضای ذخیره سازی پایداری برای سرویس های حساس درون compose ندارید، باید با اطلاعات قبلی خود به صورت یک طرفه(آن ها با شما خداحافظی نمی کنند ) خداحافظی کنید :)


در این حالت فایل ها در لایه ی read/write درون خود کانتینر ذخیره میشوند. به این storage اصطلاحا local storage یا graphdriver storage یا storage driver نیز میگوییم.

در ادامه ی این فصل سرویس های stateless و stateful را بررسی می کنیم. برنامه های stateful به برنامه هایی گفته می شود که یک فضای ذخیره سازی پایدار( persistent storage ) دارند، مثل دیتابیس ها، در این سرویس ها عمر داده ها ارتباطی با عمر کانتینر ندارد و میتوانیم حتی در صورت پاک شدن کانتینر نیز به داده ها دسترسی داشته باشیم، مگر اینکه مجزا داده ها را پاک کنیم.

کانتینرها به دو صورت با فضاهای ذخیره سازی ارتباط برقرار میکنند: با volume ها یا با bind mount ها.

در حالت استفاده از bind mount یک آدرس واقعی درون file system از کامپیوتر host به یک آدرس درون کانتینر متصل می شود. این روش برای دسترسی مجدد و راحت تر به فایل ها روی سیستم host خوب است اما بار پردازشی و زمانی بیشتری را برای referencing به داکر و کانتینر تحمیل میکند.

درون داکر نیز یک storage directory وجود دارد که میتوانیم از طریق آن روی host به راحتی volume ها را ایجاد کنیم و بار پردازشی و زمانی کمتری به داکر تحمیل کنیم.

بسیار خب! بیاید کمی بیشتر و دوباره life cycle را بررسی کنیم!