برنامه نویسی و IT

آشنایی با Volume‎‌ها در داکر

Volume‎‌ ها در داکر

نتورک داکر در سال‌های اخیر توانسته است توجه برنامه‌نویسان زیادی را به خود جلب کند. این شبیه‌سازی لایه‌ی اپلیکیشن شبکه به‌عنوان جایگزینی سبک‌تر برای ماشین مجازی (Virtual Machine) به بازار معرفی شد و عملکرد موفقیت آمیزی از لحاظ جلب رضایت مهندسان نرم‌افزار داشت. با نتورک داکر برنامه‌نویسی تیمی به‌مراتب راحت‌تر می‌شود. اما استفاده از آن چالش‌های مخصوص‌به‌خود را هم دارد. برای مثال اطلاعات مهم‌ترین سرمایه شرکت‌های دیجیتال بوده و حفاظت از آن‌ها بسیار مهم است. داکر به‌صورت پیش‌فرض اطلاعات را در لایه‌ای ذخیره می‌کند که با از بین رفتن حامل کد (کانتینر) از بین خواهد رفت. در چنین شرایطی نیاز ویژه‌ای برای ذخیره کردن اطلاعات روی یک فضای امن حس می‌شود. یکی از راه‌های رفع این نیاز استفاده از Volume‎‌ ها در داکر است که در ادامه آن را به‌طور کامل توضیح خواهیم داد.

 

ویدیو پییشنهادی : آموزش داکر
آموزش داکر

 

مدیریت اطلاعات در داکر و روش های مختلف آن

زمانی که شما از یک داکر استفاده می‌کنید، تمام فایل‌های ایجاد شده در یک لایه read-write ذخیره می‌شوند. این لایه به شما امکان نوشتن و خواندن را می‌دهد اما فقط تا زمانی که کانتینر وجود داشته باشد. اگر کانتینر به هردلیلی از بین برود، اطلاعات شما هم از بین خواهند رفت. گاهی هم اطلاعات موجود در یک کانتینر برای راه‌اندازی فرآیندی در یک کانتینر دیگر لازم است. در این موارد نیاز داریم که یک کپی از اطلاعاتمان داشته‌باشیم. اینجا است که داکر روش‌هایی را برای تهیه نسخه پشتیبان از فایل‌ها پیش‌روی شما قرار می‌دهد.

 

مقاله پییشنهادی : داکر چیست
داکر چیست و چرا باید آن را بیاموزیم؟

 

دو گزینه‌ی اصلی که توسط داکر برای ذخیره فایل‌ها روی هاست ارائه می‌شوند، volumeها و bind mountها هستند. برای کسانی که از سیستم‌عامل لینوکس استفاده می‌کنند، یک روش دیگر با نام tmpfs mount هم وجود دارد. اگر داکر را روی ویندوز اجرا کرده‌اید، روش سوم برای شما named pipe نام دارد. در شکل زیر تفاوت این سه روش در ذخیره‌سازی فایل روی هاست را مشاهده می‌کنید:

روش های ذخیره سازی فایل در داکر

انواع روش های ذخیره اطلاعات در هاست

  • Volumeها اطلاعات را در بخشی با نام «منطقه داکر» (Docker Area) ذخیره‌سازی می‌کنند. دلیل نام‌گذاری این بخش مدیریت شدن آن توسط داکر است. به‌عبارت‌دیگر، فرآیندهای خارج از داکر اجازه دسترسی به فایل‌های این بخش را ندارند. Volume بهترین راه ذخیره و نگهداری اطلاعات در داکر به‌حساب می‌آید.
  • Bind Mountها ممکن است روی هر قسمتی از هاست ذخیره شوند. مسیر ذخیره‌سازی آن‌ها ممکن است مسیرهای مهم سیستم باشد. فرآیندهای خارج از داکر که روی هاست داکر انجام می‌شوند و همچنین کانتینرهای دیگر می‌توانند در فایل‌های ذخیره شده توسط Bind Mount در هر زمان تغییر ایجاد کنند.
  • tmpfs Mountها روی حافظه فیزیکی کامپیوتر میزبان ذخیره می‌شوند. tmpfs هیچ‌گاه در مسیرهای مهم کامپیوتر ذخیره نخواهند شد.

کاربرد Volume‎‌ ها در داکر

توسعه‌دهندگان داکر از Volumeها به‌عنوان بهترین روش ذخیره و محافظت از اطلاعات داکر یاد می‌کنند. تفاوت volume با روش‌های دیگر مثل bind mounts و tmpfs در وابسته نبودن volume به سیستم‌عامل است. Volumeها در بخشی از هاست ذخیره می‌شوند که مستقیما توسط خود نتورک داکر اداره می‌شود. از جمله مزایای کلیدی استفاده از Volume ها می‌توان به موارد زیر اشاره کرد:

 

مقاله پییشنهادی : نتورک داکر چیست
نتورک داکر چیست

 

  • خیلی ساده می‌توان از Volumeها بکاپ گرفت و آن‌ها را به سیستم دیگری منتقل کرد.
  • شما از طریق کدنویسی یا استفاده از وب‌سرویس داکر می‌توانید Volumeها را مدیریت کنید.
  • Volumeها روی هر دو سیستم عامل لینوکس و ویندوز بدون مشکل کار می‌کنند (محدود به سیستم‌عامل نیستند).
  • Volumeها در زمان به اشتراک گذاشته شدن میان چند کانتینر، امنیت بالاتری را ارائه می‌دهند.
  • درایورهای Volume به شما اجازه ذخیره Volumeها روی هاست‌های از راه دور یا سرویس‌های ابری را برای رمزنگاری محتوای آن‌ها (یا اضافه کردن کاربردهای دیگر) می‌دهند.
  • می‌توان فضای Volumeهای جدید را برای یک کانتینر از قبل رزرو کرد.
  • سرعت عملکرد سیستم با استفاده از Volumeها به مراتب بیشتر از زمانی است که Bind mount ها یا روش‌های دیگر به کار گرفته می‌شوند.
  • استفاده از Volumeها باعث افزایش اندازه کانتینر نمی‌شود چون که آن‌ها خارج از چرخه حیات کانتینر وجود دارند.

کار با Volume ها در داکر

استفاده از volume ها در داکر

در این بخش می‌خواهیم مبانی کار با Volumeها در داکر را توضیح دهیم. قبل از همه چیز لازم است دستور ایجاد Volume در داکر را یاد بگیریم:

docker volume create [OPTIONS] [VOLUME]

با این دستور یک Volume با نامی تصادفی ایجاد می‌شود. برای تعیین مشخصات باید از دستورات زیر استفاده کرد:

دستور پیش‌فرض عملکرد
--driver , -d local مشخص کردن نام درایور Volume
--label تنظیم اطلاعات متا
--name تعیین نام Volume
--opt , -o تنظیمات درایور

یکی از ویژگی‌های مهم Volume این است که چند کانتینر به‌صورت همزمان می‌توانند به آن متصل باشند و بدون مشکل فایل‌ها را جابه‌جا یا ویرایش کنند. دقت داشته باشید که نام تمام Volumeها در هر درایور باید باید منحصربه‌فرد باشد. اگر این نکته را در نام‌گذاری خود در نظر نگیرید، با پیام زیر روبرو خواهید شد:

A volume named  "hello"  already exists with the "some-other" driver. Choose a different volume name

گزینه های درایور

بعضی درایورها گزینه‌هایی برای شخصی‌سازی ساخت Volume دارند. گزینه‌های درایور با دو پرچم o- و opt– جابه‌جا می‌شوند. به مثال زیر توجه کنید:

$ docker volume create --driver fake \
    --opt tardis=blue \
    --opt timey=wimey \
    foo

این گزینه‌ها بسته به نوع درایور ممکن است تغییرات مختلفی را روی Volume اعمال کنند یا حتی هیچ‌کاری انجام ندهند.

دستورات مرتبط با Volume‎‌ ها در داکر

دستور عملکرد
docker Volume مدیریت Volume ها
docker volume create ساخت یک Volume
docker volume inspect نمایش اطلاعات جزیی درباره یک یا چند Volume
docker volume ls فهرست کردن Volume ها
docker volume prune پاک کردن تمام Volume های بلااستفاده و محلی
docker volume rm پاک کردن یک یا چند Volume

تفاوت بین پرچم‌ های v- و mount–

در زمان کدنویسی برای کار با Volumeها در داکر می‌توان از این دو پرچم استفاده کرد. با این تفاوت که پرچم v- در زمان کار با سرویس‌ها قابل استفاده نیست. در مثال زیر می‌خواهیم با استفاده از یک Volume، یک کانتینر را راه‌اندازی کنیم. این کار را یک‌بار با پرچم v– و بار دیگر با پرچم mount– انجام می‌دهیم.

 

مقاله پییشنهادی : کاربرد داکر در علم داده
کاربرد داکر در علم داده چیست

mount–

$ docker run -d \
  --name devtest \
  --mount source=myvol2,target=/app \
  nginx:latest

v–

$ docker run -d \
  --name devtest \
  -v myvol2:/app \
  nginx:latest

تمام کدهای کار با volume (به‌جز موارد کار با سرویس‌ها) را می‌توان با هر دو پرچم نوشت و تفاوتی در نتیجه وجود نخواهد داشت. با قطعه کد زیر هم می‌توانید از ایجاد موفقیت آمیز Volume اطمینان حاصل کنید:

"Mounts": [
    {
        "Type": "volume",
        "Name": "myvol2",
        "Source": "/var/lib/docker/volumes/myvol2/_data",
        "Destination": "/app",
        "Driver": "local",
        "Mode": "",
        "RW": true,
        "Propagation": ""
    }
],

برای متوقف کردن کانتینر و پاک کردن داکر هم می‌توان از کد زیر استفاده کرد:

$ docker container stop devtest

$ docker container rm devtest

$ docker volume rm myvol2

راه اندازی یک سرویس با Volume

ساختار داده در Volumeها

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

docker service create -d \
  --replicas=4 \
  --name devtest-service \
  --mount source=myvol2,target=/app \
  nginx:latest

برای مطمئن شدن از آغاز‌به‌کار سرویس از دستور زیر استفاده می‌شود:

$ docker service ps devtest-service

ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE            ERROR               PORTS
۴d7oz1j85wwn        devtest-service.1   nginx:latest        moby                Running             Running 14 seconds ago

با دستور زیر هم سرویس پاک شده و تمام عملیات متوقف می‌شوند:

 docker service rm devtest-service

کلام آخر

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

 

 

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

نوشته های مشابه

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

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

دکمه بازگشت به بالا