Volume Docker چیست؟ نحوه‌ی ایجاد و آشنایی با Volumeها در داکر

Volume Docker چیست

Volume Docker چیست؟ اگر شما هم با داکر و کانتینرهای آن کار می‌کنید، ممکن است این سؤال برایتان پیش‌آمده‌باشد. Volume Docker مکانیسمی است که با استفاده از آن، امکان تولید داده‌های پایدار و استفاده از آن‌ها توسط کانتینرهای داکر وجود دارد. این مطلب قرار است نحوه‌ کار با Volumeها در داکر و همچنین نکات مهم دیگر را در این زمینه، به شما آموزش دهد؛ پس تا انتها این مطلب از داکر را دنبال کنید. 

Volume Docker چیست؟

همین ابتدا مقاله را با پاسخ به یک سؤال بنیادین شروع می‌کنیم. آن هم این‌که Volume Docker چیست؟‌ اگر با داکر و کانتینرهای آن کار کرده باشید، حتماً دیده‌اید که با حذف یک کانتینر یا توقف آن، داده‌های موجود در آن، دیگر قابلیت دسترسی نداشته‌باشند. 

Volume به داکر کمک می‌کند تا داده‌ها را در جایی به‌غیر از خودِ کانتینر (مثلاً روی همان سروری که داکر روی آن اجرا می‌شود) ذخیره کند. این موضوع یکی از اصلی‌ترین مزایای استفاده از Volume در Docker است که با استفاده از آن می‌توان به دیتاهای مختلف، حتی در صورت عدم دسترسی به کانتینر، همچنان دسترسی داشت و همچنین آن را بین کانتینرهای مختلف به اشتراک گذاشت. 

اگر درکِ این مفهوم Volume Docker به‌نظرتان کمی پیچیده است، احتمالاً یک مثال بتواند آن را ساده‌تر کند. 

فرض کنید که یک کانتینر داکر دارید که وظیفه‌اش اجرای یک پایگاه داده‌ی MySQL است. با توجه به این‌که این دیتابیس، داده‌های خود را داخل کانتینر ذخیره می‌کند، در صورت توقف کانتینر و یا حذفِ آن، تمامی داده‌ها هم ازبین‌می‌روند. حالا اگر این اطلاعات، به‌جای کانتینر، روی خود سرور ذخیره شده‌باشد، حتی با حذف کانتینر هم اطلاعات دیتابیس همچنان قابل دسترس است؛ این یک مثال ساده از کاربرد Volumeها در داکر است. 

مطلب مفید: داکر چیست؟

انواع Volume در Docker

بعد از اینکه به این نتیجه رسیدیم که Volume Docker چیست و چه کاربردی دارد، حالا برای این‌که اطلاعاتمان را در این زمینه عمیق‌تر کنیم، باید ببینیم که Volume Dockerها چه انواعی دارند. در ادامه، ۳ گروه از انواع Volume در Docker را معرفی کرده و در مورد آن‌ها توضیح داده‌ایم:

۱- Bind Mount

Bind Mound یکی از انواع Volume در Docker است که به کاربر این امکان را می‌دهد تا یک پوشه یا فایل خاص را به یک مسیر در داخل کانتینر متصل کند. این روشِ Mount کردن Volume داده به‌خصوص برای مواردی کاربرد دارد که به دسترسی مستقیم به داده‌های موجود در سرور نیاز است.

با استفاده از Bind Mount، مسیر دقیقِ فایل یا پوشه روی سیستم میزبان، همان سیستم یا سروری که داکر روی آن اجرا می‌شود، مشخص شده و به این ترتیب، تغییراتی که روی سیستم میزبان ایجاد می‌شود، بلافاصله در کانتینر قابل مشاهده است. البته عکس این قضیه هم درست است. نکته‌ی مهم در مورد Bind Mount، این است که داکر هیچ‌گونه کنترلی روی این فایل‌ها ندارد و شما باید خودتان مدیریت کامل آن را انجام دهید. 

به‌عنوان مثال، فرض کنید که در توسعه‌ی یک نرم‌افزار، قرار است سورس کد پروژه‌تان را از سیستم میزبان به کانتینر منتقل کنید تا بتوانید آپدیت‌ها و تغییرات را بدون نیاز به بازسازی کانتینر، در لحظه مشاهده کنید. برای این منظور می‌توانید از دستورات زیر استفاده کنید:

docker run -d \

  –name dev-container \

  –mount type=bind,source=/path/to/source-code,target=/app \

  my-dev-image

البته به این نکته توجه داشته باشید که این دستورات فقط برای راهنمایی بیشتر در این قسمت قرار گرفته‌اند. یعنی حتماً باید اطلاعات آن را بر اساس پروژه‌تان تغییر دهید. 

۲- Named Volume

Named Volumeها، نوعی از Volume است که داکر، آن را مدیریت می‌کند. در Named Volume، یک نام مشخص برای Volume تعریف شده و وظیفه‌ی مدیریت مسیر فیزیکی ذخیره‌سازی آن، به داکر سپرده می‌شود. بنابراین اگر بخواهیم بگوییم که مهم‌ترین محل کاربر این نوع از Volume Docker چیست، می‌توانیم به مواردی که نیاز به ذخیره‌سازی داده‌های دائمی دارند، اشاره کنیم که قرار است بینِ کانتینرهای مختلف استفاده شوند. 

مثلاً فرض کنید، یک کانتینر برای MySQL دارید و می‌خواهید داده‌های پایگاه داده، روی یک Volume دائمی ذخیره شوند. این کار با استفاده از دستورات زیر امکان‌پذیر است:

docker run -d \

  –name mysql-container \

  -v my_mysql_volume:/var/lib/mysql \

  mysql:latest

با استفاده از این دستورات، شما یک Volume با نام my_sql_volume ایجاد می‌کنید که داکر مدیریت ذخیره‌سازی آن را انجام می‌دهد. نکته‌ی مهم این است که اطلاعات پایگاه داده‌ی MySQL در این Volume ذخیره شده و حتی با حذف کانتینر، Volume و داده‌ها همچنان باقی می‌مانند. 

۳- Anonymous Volume

Anonymous Volume آخرین نوع از Volumeها است که از نظر تکنیکال، تقریباً مشابه با Named Volume است؛ با این تفاوت که این‌جا دیگر شما نامی برای Volume انتخاب نمی‌کنید و این داکر است که هم مسیر و هم نام را به‌صورت تصادفی به آن اختصاص می‌دهد. این نوع از Volume معمولاً در مواردی مورد استفاده قرار می‌گیرد که نیاز به ذخیره‌سازی موقت دارید. به‌عبارت دیگر نیازی به مدیریت و یا استفاده‌ی مجدد از Volume ایجاد شده نیست. 

نکته‌ی مهمی که برای مدیریت داده در Docker با استفاده از این نوع از Volume وجود دارد این است که بعد از حذفِ کانتینر، Volume همچنان وجود دارد اما امکان دسترسی مستقیم به آن وجود ندارد. به‌عبارت دیگر برای دسترسی به Volume، حتماً باید از طریق داکر اقدام کنید. به همین دلیل است که از این نوع از Volume، برای داده‌های موقت یا تست استفاده می‌شود. 

مثلاً فرض کنید که شما یک توسعه‌دهنده‌ هستید و می‌خواهید یک اپلیکیشن را تست کنید. بنابراین نیازی به داده‌های دائمی ندارید اما باید دیتاها را داخلِ کانتینر ذخیره کنید. برای این منظور می‌توانید از دستورات زیر استفاده کنید:

docker run -d \

  –name test-container \

  -v /data \

  my-test-image

در اینجا، ما یک Volume ساختیم که به مسیر data/ متصل می‌شود و داکر، مسیر آن را به‌صورت خودکار ایجاد و مدیریت می‌کند. این Volume به‌صورت موقت است و نیازی به بازیابی و یا مدیریت دستی آن ندارید. 

مطلب مفید: آموزش داکر

در جدول زیر، ویژگی‌های این سه نوع از انواع Volume در Docker با هم مقایسه شده‌است:

ویژگیBind MountNamed VolumeAnonymous Volume
مدیریت مسیرمسیر دقیق روی سیستم میزبان، توسط کاربر مشخص می‌شودداکر، مسؤلیت مدیریت مسیر را به‌صورت داخلی بر عهده داردداکر به‌صورت خودکار، مسیر را ایجاد می‌کند
قابلیت استفاده‌ی مجددمی‌توان دوباره از مسیر استفاده کردVolume با نام اختصاص یافته به آن، قابل دسترسی و استفاده‌ی مجدد استVolume ناشناس و معمولاً به‌صورت موقتی است
دسترسی به داده‌هادسترسی به فایل‌ها و پوشه‌ی میزبان به‌صورت مستقیم انجام می‌شودداکر مدیریت داده‌ها را بر عهده داردذخیره‌سازی داده‌ها به‌صورت موقت انجام می‌شود
کاربردبرای دسترسی مستقیم به فایل‌ها و پوشه‌های میزبان مورداستفاده قرار می‌گیردبرای ذخیره‌سازی دائمی اطلاعات و داده‌ها بین کانتینرها مورداستفاده قرار می‌گیردبرای ذخیره‌سازی موقت یا تست مورداستفاده قرار می‌گیرد

نحوه ایجاد Volume Docker

تا این قسمت توانستیم به این نتیجه برسیم که Volume Docker چیست و همچنین در مورد انواع آن‌ها هم اطلاعاتی به‌دست آوردیم. حالا باید نحوه ایجاد Volume Docker را یاد بگیریم. 

انجام این کار خیلی ساده و با استفاده از دستور Create، انجام می‌شود. نحوه‌ی استفاده از این دستور در نمونه‌ی زیر نشان داده شده‌است:

docker volume create

با اجرای این دستور، یک Volume با نام تصادفی و با درایور Local ایجاد می‌شود. برای ایجاد Volume در Docker با نام مشخص، می‌توانید نامِ موردنظرتان را به انتهای این دستور اضافه کنید:

docker volume create –name sample-volume

 این دستور، یک Volume با نام sample-volume می‌سازد. همچنین شما با استفاده از دستور زیر، می‌توانید درایور Volume را هم به Docker معرفی کنید:

docker volume create –name sample-volume –driver local

نحوه‌ی استفاده از دستور docker volume در شکل زیر نشان داده شده‌است:

بعد از انجام این کار، می‌توانید مدیریت داده‌ها در Docker از طریق Volume و همچنین اشتراک گذاری داده‌ها بین کانتینرها را انجام دهید. 

پس‌از این‌که نحوه ایجاد Docker Volume را یاد گرفتید، باید بتواند Volume ایجاد شده را بررسی کنید. این کار با استفاده از دستور inspect و به‌صورت زیر امکان‌پذیر است:

docker volume inspect sample-volume

این دستور Volume انتخابی‌تان را بررسی می‌کند و اطلاعاتی دقیقی در مورد پیکربندی و ویژگی‌های آن ارائه می‌کند. با اجرای این دستور، یک فایل با فرمت JSON که جزئیات مختلف Volume انتخابی مثلِ نام، درایور، نقطه‌ی اتصال (Mount Point)، لیبل‌ها و متادیتاهای دیگر را برای شما برمی‌گرداند.

نمایش Volume Dockerها

برای مشاهده‌ Volume Dockerهایی که قبلاً آن‌ها را ایجاد کرده‌اید، می‌توانید از دستور docker volume -ls استفاده کنید. این دستور یک لیست کامل از تمامی Docker Volumeهای ایجاد شده را به شما نشان می‌دهد. نحوه‌ی استفاده از این دستور و همچنین نمونه‌ی خروجی آن، در شکل زیر نشان داده شده‌است:

یک نکته را حتماً در نظر داشته باشید: علاوه بر آن که حفظ داده‌ها در Docker اهمیت دارد، حتماً باید بتوانیم Volume Dockerهایی را که داده‌ای در آن‌ها قرار نگرفته‌ است، شناسایی و حذف کنیم.

برای انجام این کار می‌توان از دستور docker volume prune استفاده کرد؛ اما قدم اول این است که بتوانیم این Volumeها را شناسایی کنیم. به‌عنوان مثال فرض کنید که می‌خواهیم تمامی Volumeهایی را که هیچ یک از Containerها از آن استفاده نمی‌کنند را حذف کنیم. برای این منظور، ابتدا می‌توانیم با استفاده از دستور -f dangling=true، این Volumeها را شناسایی کنیم و سپس با استفاده از دستور prune آن‌ها را حذف کنیم.

نحوه‌ی استفاده‌ی ترکیبی از این دو دستور، در شکل زیر نشان داده شده‌است:

اتصال Volume به کانتینر

تا این قسمت، هر نکته‌ای که توضیح داده شد، یا در مورد روشن‌سازی این مسئله بود که اساساً Volume Container چیست و یا دستوراتی بود که برای ایجاد و یا پاک کردن Volume در Docker مورد استفاده قرار می‌گرفت. اما حالا باید ببینیم که چطور می‌توان اتصال Volume به کانتینر را انجام داد؛ به این کار، Mount کردن Volume گفته می‌شود. 

به‌طور کلی برای اتصال Volume به کانتینر، دو دستور اصلی V- و mount– کاربردی است. اما برای استفاده از هر یک از این دستورات، لازم است نام Volume، مسیری که Volume در آن نصب شده‌است و همچنین نام کانتینر مشخص باشد. 

به شکل زیر توجه کنید. این شکل یک مثال واقعی از نحوه Mount کردن Volume داده است که می‌خواهد یک Volume با نامِ فرضی sample-volume را به یک کانتینر وردپرس در مسیرِ /var/www/html متصل کند:

برای اینکه کارتان ساده‌تر شود، دستوری که در شکل بالا از آن استفاده شده‌است را در ادامه آورده‌ایم:

docker run -d –name wordpress –mount source=sample-volume,target=/var/www/html wordpress

نتیجه‌ی استفاده از این دستور، در شکل زیر نشان داده شده‌است:

به این نکته هم توجه داشته باشید که به‌جای دستور mount–، می‌توان از v– هم استفاده کرد. اما به‌طور کلی برای Volumeها استفاده از mount– و برای Bind Mountها، استفاده از v– صحیح تر است. 

مطلب مفید: کانتینر داکر چیست؟

جمع‌بندی

Volume Docker چیست؟ پاسخ به این سؤال می‌تواند به شما برای مدیریت داده‌ها در Docker کمک زیادی کند. Volume Docker یک مکانیسم برای ایجاد داده‌های پایدار برای استفاده در داکر است. به‌عبارت ساده‌تر، با استفاده از Volume Docker، شما می‌توانید داده‌ها را در خارج از خودِ کانتینر قرار دهید؛ در این‌صورت حتی با حذف و یا از کار افتادن کانتینر، دسترسی‌تان به داده‌ها از بین نمی‌رود. در این مطلب، توضیحات کاملی در مورد کاربرد Volumeها در داکر و همچنین نحوه‌ی استفاده از آن‌ها، ارائه شده‌است.

سؤالات متداول

Volume Docker چیست؟

Volume Docker یک مکانیسم برای ذخیره‌سازی داده‌ها است که داکر آن را مدیریت می‌کند و برای حفظ داده‌ها به‌صورت دائمی و اشتراک‌گذاری بین کانتینرها، حتی در مواردی که کانتینر حذف می‌شود، می‌توان از آن استفاده کرد. 

انواع Volume در Docker کدام است؟

به‌طور کلی ۳ نوع Volume در داکر وجود دارد: Bind Mount، Named Volume و Anonymous Volume که هر کدام ویژگی و کاربرد متفاوتی دارند.

نحوه حذف Docker Volumeها چگونه است؟

برای حذف Volume Docker می‌توان از دستور prune استفاده کرد.

https://docs.docker.com/reference/cli/docker/volume/create
https://medium.com/@meghasharmaa704/docker-volume-command-8efae661f342
https://refine.dev/blog/docker-volumes/#:~:text=Inspecting%20a%20Docker%20volume%E2%80%8B,mountpoint%2C%20labels%2C%20and%20options.
https://dev.to/doziestar/a-comprehensive-guide-to-docker-volumes-4d9h#:~:text=Types%20of%20Docker%20Volumes%3A,or%20file%20within%20the%20container.

بدون دیدگاه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *