Volume Docker به عنوان یک ابزار مفید پرکاربرد به منظور محافظت از داده‌ها (در برابر از بین رفتن) هنگام کار در container مورد استفاده قرار می‌گیرد. به عبارت دیگر، Volume Dockerها جایگزین مناسبی نسبت به استفاده از لایه‌های اضافی برای محافظت از داده‌ها (که باعث افزایش اندازه Docker image می‌شوند) هستند.

در این آموزش، نحوه استفاده از Docker Volume به همراه مثال‌های عملی شرح داده شده است.

 

 

این مطلب نیز ممکن است برای شما مفید باشد: نصب Docker Compose در اوبونتو 20.04

 

Docker Volumes چیست؟

Volume Dockerها، سیستم فایل‌هایی هستند که برای نگهداری از داده‌های تولید شده توسط container در حال اجرا، mount می‌شوند.

Volumeها، مستقل از چرخه عمر container، برروی هاست ذخیره می‌شوند. این به کاربران امکان تهیه نسخه پشتیبان از داده‌ها و به اشتراک گذاری سیستم فایل‌ها را بین containerها ارائه می‌دهد.

 

شروع کار با Volume Docker

روش‌های مختلفی برای mount کردن Docker volumeها هنگام راه‌اندازی یک container وجود دارد. بدین منظور کاربران می‌توانند از یکی از پرچم‌های v- و mount-- به همراه دستور docker run استفاده کنند.

در ادامه، نمونه‌هایی از استفاده از هر دو پرچم نشان داده شده است.

 

نحوه ایجاد Docker volume

برای ایجاد Docker Volume می‌توانید از دستور زیر استفاده نمایید:

docker volume create [volume_name]

Docker به طور خودکار یک دایرکتوری برای Volume برروی میزبان در مسیر /var/lib/docker/volume/ ایجاد می‌کند. اکنون شما می‌توانید به منظور تضمین ماندگاری داده‌ها و به اشتراک گذاری آن‌ها در چندین container، این volume را بر روی یک container نصب کنید.

به عنوان مثال، به منظور ایجاد یک Volume به نام data کافیست دستور زیر را اجرا نمایید:

docker volume create data

 

این مطلب نیز ممکن است برای شما مفید باشد: نحوه نمایش containerها درDocker

 

نمایش Volume Dockerها

به منظور تأیید ایجاد موفقیت آمیز یک Volume Docker، با استفاده از دستور زیر می‌توانید از Docker بخواهید که همه Volume‌های موجود را لیست نماید.

docker volume list

خروجی دستور، لیستی از Volumeها، مکان آن‌ها (DRIVER) و VOLUME NAME آن‌ها را نشان می‌دهد. در تصویر زیر می‌توانید، داده‌های volume ایجاد شده در بخش قبلی را مشاهده کنید.

 

بازرسی Docker Volumeها

به منظور مشاهده اطلاعات بیشتر در مورد Docker Volume، از دستور inspect به صورت زیر استفاده نمایید:

docker volume inspect [volume_name]

این دستور، جزئیات یک volume شامل محل قرارگیری آن در فایل میزبان (Mountpoint) را لیست می‌نماید. هر آنچه که در volume داده ذخیره شده است را می‌توان در دایرکتوری لیست شده در مسیر Mountpoint نیز یافت.

 

نحوه Mount کردن volume داده

به منظور mount کردن volume داده در یک container، پرچم mount-- را به دستور docker run اضافه کنید. این، volume را به container مشخص شده اضافه می‌کند که در آن، داده‌های تولید شده در داخل محیط مجازی را ذخیره می‌کند.

به منظور اجرای یک container و mount کردن volume داده بر روی آن، ساختار دستوری زیر را دنبال نمایید:

docker run --mount source=[volume_name],destination=[path_in_container] [docker_image]

بخش [path_in_container] را با مسیر قرارگیری volume داده در container جایگزین کنید. هر آنچه در آن دایرکتوری ذخیره می‌شود نیز به طور خودکار در volume داده میزبان ذخیره می‌شود.

به عنوان مثال، برای راه‌اندازی یک container اوبونتو و mount کردن داده بر روی آن، دستور زیر را اجرا نمایید:

docker run -it --name=example1 --mount source=data,destination=/data ubuntu

این کد به داکر دستور می‌دهد تا هنگام mount کردن volume داده در دایرکتوری /data داخل container، یک container را در حالت تعاملی (-it) از image اوبونتو، تحت نام example1، اجرا کند.

اکنون با لیست کردن محتوای container بررسی کنید که volume با موفقیت mount شده است:

ls

هنگام راه‌اندازی container  باید Docker volume مورد نظر را پیدا کنید که در این مثال، data است.

 

کپی کردن فایل‌ها بین containerها از یک volume مشترک

در این بخش نحوه به اشتراک گذاری فایل‌ها بین containerها توسط Docker volumeها شرح داده شده است.

برای این کار، از volume و container ایجاد شده در قسمت قبلی استفاده شده است. بدین منظور کافیست دستورات زیر را اجرا نمایید:

docker volume create data
docker run -it --name=example1 --mount source=data,destination=/data ubuntu

1. هنگامی‌که به خط فرمان container تغییر موقعیت دادید، به دایرکتوری data volume بروید:

cd data

2. با استفاده از دستور زیر یک فایل نمونه خالی ایجاد کنید:

touch sample1.txt

 

3. اکنون، از container خارج شوید:

exit

4. سپس یک container جدید example2 با همان volume داده راه‌اندازی نمایید:

docker run -it --name=example2 --mount source=data,destination=/data ubuntu

5. محتوای container را لیست کنید. بدین منظور باید دایرکتوری data را جستجو نمایید:

ls

6. به دایرکتوری داده بروید و محتوای آن را لیست کنید:

cd data
ls

خروجی دستور باید فایل sample1.txt ایجاد شده در container قبلی را لیست کند.

 

Mount کردن دایرکتوری هاست به عنوان یک Data Volume

شما می‌توانید یک دایرکتوری موجود از ماشین میزبان را نیز در یک کانتینر mount کنید. به این نوع volumeها، Host Volume می‌گویند.

بدین صورت که با استفاده از پرچم v- و تعیین نام دایرکتوری میزبان، volumeهای میزبان را mount نمایید.

سپس هر آنچه در دایرکتوری میزبان است، در container نیز وجود خواهد داشت. علاوه بر این، تمام داده‌های تولید شده در داخل container که در volume داده قرار می‌گیرند، به درستی در دایرکتوری میزبان ذخیره می‌شوند.

ساختار دستور برای mount کردن دایرکتوری میزبان به صورت زیر است:

docker run -v "$(pwd)":[volume_name] [docker_image]

ویژگی "$ (pwd)" به Docker دستور می‌دهد تا پوشه‌ای که اکنون کاربر در آن قرار دارد، mount کند.

 

مثال زیر مراحل انجام این کار را مشخص می‌کند.

1. ابتدا یک دایرکتوری با نام tmp روی میزبان ایجاد کرده و وارد آن شوید:

mkdir tmp
cd tmp

2. پس از ورود به دایرکتوری، یک فایل آزمایشی ایجاد نمایید تا ببینید آیا از داخل container قابل دسترس است یا خیر:

touch file.txt

3. سپس، از دستور docker run برای راه‌اندازی یک container اوبونتو با دایرکتوری میزبان متصل به آن استفاده کنید:

docker run -it -v "$(pwd)":/data1 ubuntu

این دستور، کانتینر را بصورت تعاملی راه‌اندازی کرده و یک volume به نام data1 در آن mount می‌کند.

3. محتوای container را لیست کرده و تأیید نمایید که یک دایرکتوری data1 وجود دارد:

ls

 

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

cd data1
ls

 

مجوز و مالکیت volume

مجوزهای volume می‌توانند با پیکربندی مالکیت در Dockerfile تغییر کنند.

از دستور RUN و دستور chown برای تنظیم مجوز Docker volume استفاده نمایید. اطمینان حاصل کنید که این دستورالعمل مقدم بر خط تعریف کننده VOLUME است.

متناوباً، شما می‌توانید مالکیت دایرکتوری مورد استفاده به عنوان volume میزبان را تغییر دهید.

 

این مطلب نیز ممکن است برای شما مفید باشد: حذف imageها، containerها و Volumeهای Docker

 

حذف Docker Volumeها

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

docker volume rm [volume_name]

Docker تنها در صورت عدم استفاده از volumeها در آن لحظه، آن‌ها را حذف می‌کند. بنابراین اگر containerای با volume مشخص وجود داشته باشد، در خروجی دستور خطا نمایش داده می‌شود. به منظور ادامه دادن به فرآیند حذف، container را متوقف کرده، حذف نمایید و سپس دستور docker volume rm را مجدداً اجرا کنید.

توجه: اگر نام volume را نمی‌دانید، از دستور docker volume ls استفاده نمایید.

 

حذف یکجای همه volumeها

به منظور حذف تمام Docker volumeهای غیرقابل استفاده با یک دستور کافیست دستور زیر را اجرا کنید:

docker volume prune

در خروجی به شما هشدار می‌دهد که تمام volumeهای محلی که توسط حتی یک container استفاده نمی‌شود، حذف می‌شود. در صورت اطمینان برای تأیید دکمه y را فشار دهید.

docker volume prune

بعد از تایید، داکر ولوم‌های حذف شده به همراه میزان فضای آزاد شده از سیستم میزبان را نمایش خواهد داد؛ به عنوان مثال:

 

 

منبع:

phoenixnap