Docker: From Zero to Hero (قسمت 4)

حجم های Docker راهی برای حفظ داده ها در خارج از طول عمر یک کانتینر است. آنها برای به اشتراک گذاشتن داده ها بین کانتینرها یا بین کانتینر و سیستم میزبان استفاده می شوند. حجم های Docker را می توان با استفاده از docker volume
فرمان
یک دقیقه صبر کنید، چرا به حجم نیاز داریم؟
حجم های داکر برای ارائه مکانیزمی برای ذخیره و به اشتراک گذاری داده ها بین کانتینرها و بین کانتینرها و سیستم میزبان اختراع شدند. قبل از معرفی حجم ها، ذخیره سازی داده ها در داکر با چرخه حیات کانتینر مرتبط بود. این بدان معنی است که هر داده ذخیره شده در کانتینر هنگام برداشتن یا ایجاد مجدد کانتینر از بین می رود. حجم ها راهی برای ماندگاری داده ها حتی پس از حذف محفظه ای که آنها را ایجاد کرده است فراهم می کند و همچنین امکان اشتراک گذاری آسان داده ها را بین کانتینرها فراهم می کند. علاوه بر این، حجم ها انعطاف پذیری بیشتری را در نحوه و مکان ذخیره داده ها، مانند استفاده از سیستم های ذخیره سازی خارجی یا راه حل های ذخیره سازی مبتنی بر ابر، فراهم می کنند.
انواع مختلف حجم
Docker انواع مختلفی از حجم را برای مدیریت داده های پایدار برای کانتینرها فراهم می کند. انواع مختلف حجم در ظرف داکر عبارتند از:
- جلدهای نامگذاری شده: هنگام استفاده از حجم های نامگذاری شده در داکر، داده ها در دستگاه میزبان داکر در دایرکتوری مدیریت شده توسط داکر ذخیره می شوند. هنگامی که نیاز دارید داده های تولید شده توسط یک کانتینر را حفظ کنید یا داده ها را بین چندین کانتینر به اشتراک بگذارید، از حجم های نامگذاری شده استفاده کنید. به عنوان مثال، میتوانید از یک حجم نامگذاری شده برای ذخیره دادههای پایگاه داده استفاده کنید تا هنگام حذف یا راهاندازی مجدد کانتینر از بین نرود.
- Host Bind Mounts: Host bind mount راهی برای نصب دایرکتوری انتخابی شما از ماشین میزبان به کانتینر است. میتوانید از bind mount برای سوار کردن دایرکتوری محلی حاوی فایلهای پیکربندی در یک ظرف برای سفارشی کردن رفتار آن استفاده کنید. فرض کنید می خواهید فایل پیکربندی NGINX را که در داخل کانتینر قرار دارد سفارشی کنید. میتوانید از یک Host bind mount برای لغو فایل پیکربندی کانتینر با فایل میزبان استفاده کنید.
- جلدهای ناشناس: حجمهای ناشناس زمانی توسط داکر ایجاد میشوند که یک کانتینر بدون تعیین حجم نامگذاری شده راهاندازی شود. مجلدات ناشناس نامگذاری نشده اند، بنابراین نمی توان از آنها دوباره استفاده کرد. هنگامی که ظرف برداشته می شود، حذف می شوند.
- Tmpfs Mounts: مانت های Tmpfs در حافظه کانتینر نصب می شوند، نه در سیستم فایل میزبان. آنها حجم های موقتی هستند و فقط زمانی وجود دارند که کانتینر در حال کار است. هنگامی که کانتینر متوقف می شود، مانت tmpfs به همراه تمام داده های ذخیره شده در داخل آن حذف می شود.
هر نوع ولوم مورد استفاده خاص خود را دارد و انتخاب نوع مناسب حجم به نیاز برنامه بستگی دارد.
ولومها همچنین میتوانند با گزینههای خاصی مانند دسترسی فقط خواندنی یا با یک درایور خاص ایجاد شوند که تعیین میکند دادهها کجا ذخیره میشوند. اما در حال حاضر، ما وارد سوراخ خرگوش راننده نمیشویم.
برخی رایج است docker volume
دستورات عبارتند از:
-
docker volume create
: یک حجم جدید با نام یا ناشناس ایجاد می کند -
docker volume ls
: تمام جلدهای موجود را فهرست می کند -
docker volume inspect
: اطلاعات دقیق در مورد یک حجم خاص را نمایش می دهد -
docker volume rm
: حجم خاصی را حذف می کند -
docker volume prune
: تمام حجم های استفاده نشده را حذف می کند
docker volume create
docker volume create
دستوری است که برای ایجاد یک حجم جدید با نام یا ناشناس در Docker استفاده می شود. مجلد نامدار، جلدی است که نام خاصی دارد، در حالی که مجلد ناشناس، جلدی است که نام خاصی به آن داده نشده است و فقط با ظرف آن ارجاع داده می شود.
نحو برای docker volume create
است:
docker volume create [OPTIONS] [VOLUME]
جایی که OPTIONS
هر پارامتر اختیاری است که می خواهید برای حجم مشخص کنید، و VOLUME
نامی است که می خواهید به آن حجم بدهید (در صورت وجود). اگر نامی ارائه نکنید، یک جلد ناشناس ایجاد می شود.
برخی از گزینه های رایج برای docker volume create
عبارتند از:
-
-driver
: درایور صدا را برای استفاده برای ولوم مشخص می کند. -
-label
: یک برچسب به حجم اضافه می کند. -
-opt
: به شما امکان می دهد گزینه های اضافی را برای درایور صدا تعیین کنید.
برای ایجاد یک جلد جدید با نام “my_volume”، باید دستور زیر را اجرا کنید:
docker volume create my_volume
این یک حجم جدید به نام “my_volume” ایجاد می کند که می تواند توسط کانتینرهای Docker استفاده شود.
-driver
را --driver
گزینه با docker volume create
درایور مورد استفاده برای ایجاد یک حجم جدید را مشخص می کند.
درایور حجم افزونه ای است که به داکر اجازه می دهد از سیستم های ذخیره سازی خارجی برای مدیریت داده های پایدار استفاده کند. بهطور پیشفرض، Docker دارای یک داخلی است local
درایور برای مدیریت حجم ها در میزبان داکر. با این حال، سایر درایورهای حجم را می توان برای مدیریت حجم در سیستم های ذخیره سازی از راه دور یا ابری استفاده کرد.
در اینجا یک مثال از ایجاد یک حجم جدید با استفاده از --driver
گزینه:
docker volume create --driver=local my_volume
در این مثال، یک جلد جدید به نام my_volume
با داخلی ایجاد می شود local
راننده.
-label
را -label
گزینه را می توان با استفاده کرد docker volume create
دستور اضافه کردن برچسب های فراداده به یک جلد. از این برچسب ها می توان برای برچسب گذاری یا دسته بندی حجم ها استفاده کرد و می تواند برای اهداف سازمانی و مدیریتی مفید باشد.
به عنوان مثال، می توانید یک حجم برای یک پروژه خاص ایجاد کنید و یک برچسب برای نشان دادن نام یا نسخه پروژه اضافه کنید:
docker volume create --label project=myproject --label version=1.0 myvolume
سپس می توانید از docker volume ls
فرمان با --filter
گزینه ای برای فیلتر کردن و فهرست کردن حجم ها بر اساس برچسب های آنها:
docker volume ls --filter label=project=myproject
docker volume ls
docker volume ls
از دستور برای فهرست کردن تمام حجم ها در داکر استفاده می شود. هنگامی که این دستور را اجرا می کنید، فهرستی از حجم ها به همراه نام، انواع درایورها و سایر جزئیات مانند mountpoint، اندازه و برچسب ها را نشان می دهد.
در اینجا مثالی از نحوه استفاده از آن آورده شده است docker volume ls
دستور:
$ docker volume ls
این دستور لیستی از تمام حجم های موجود در هاست Docker شما را نشان می دهد. اگر حجمی وجود نداشته باشد، دستور چیزی را نمایش نمی دهد.
شما همچنین می توانید استفاده کنید --filter
گزینه ای برای فیلتر کردن حجم ها بر اساس معیارهای مختلف. به عنوان مثال، شما می توانید تنها حجم های آویزان را با استفاده از دستور زیر فهرست کنید:
docker volume ls --filter dangling=true
این فقط حجم هایی را فهرست می کند که با هیچ کانتینری مرتبط نیستند.
شما همچنین می توانید استفاده کنید --format
گزینه ای برای سفارشی کردن فرمت خروجی به عنوان مثال، با استفاده از دستور زیر می توانید فقط نام حجم ها را نشان دهید:
docker volume ls --format "{{.Name}}"
این خروجی مشابه موارد زیر تولید می کند:
my_volume
another_volume
docker volume inspect
را docker volume inspect
دستور برای نمایش اطلاعات دقیق در مورد یک حجم، از جمله گزینه های پیکربندی و برچسب های آن استفاده می شود.
سینتکس اصلی دستور به شرح زیر است:
docker volume inspect VOLUME [VOLUME...]
جایی که VOLUME
نام یا شناسه حجم مورد بازرسی است.
به عنوان مثال، برای بررسی یک حجم به نام myvolume
، دستور زیر را اجرا کنید:
docker volume inspect myvolume
این یک خروجی با فرمت JSON حاوی اطلاعات مربوط به حجم صدا، مانند نام، درایور، نقطه اتصال و برچسبها را نمایش میدهد.
اگر می خواهید خروجی خواناتری داشته باشید، می توانید از آن استفاده کنید --format
گزینه ای برای تعیین یک الگوی Go. به عنوان مثال، دستور زیر نام حجم، درایور و نقطه نصب را نمایش می دهد:
docker volume inspect --format '{{.Name}} {{.Driver}} {{.Mountpoint}}' myvolume
توجه داشته باشید که می توانید چندین جلد را با تعیین نام یا شناسه آنها به عنوان آرگومان فرمان بازرسی کنید. خروجی حاوی اطلاعاتی در مورد تمام حجم ها در قالب آرایه JSON خواهد بود.
docker volume rm
را docker volume rm
دستور برای حذف یک یا چند جلد Docker که دیگر مورد نیاز نیستند استفاده می شود. سینتکس اصلی دستور به شرح زیر است:
docker volume rm VOLUME [VOLUME...]
اینجا، VOLUME
به نام یا شناسه جلد(های) حذف شده اشاره دارد.
به عنوان مثال، برای حذف یک جلد به نام mydata
، می توان از دستور زیر استفاده کرد:
docker volume rm mydata
برای حذف چندین جلد به طور همزمان، کافی است نام یا شناسه آنها را با فاصله از هم جدا کنید:
docker volume rm mydata1 mydata2 mydata3
توجه به این نکته ضروری است که به محض حذف یک جلد، تمام داده های ذخیره شده در آن جلد برای همیشه از بین می رود. بنابراین، توصیه می شود قبل از اقدام به حذف، از این دستور با احتیاط استفاده کنید و از پشتیبان گیری از اطلاعات مهم اطمینان حاصل کنید.
علاوه بر این، اگر یک حجم در حال حاضر توسط یک ظرف استفاده می شود، نمی توان آن را تا زمانی که اتصال آن را از ظرف جدا کرد، حذف کرد. بنابراین، ممکن است لازم باشد قبل از اقدام به برداشتن هر ظروفی که در حال حاضر از ولوم استفاده میکنند، متوقف و حذف شود.
docker volume prune
docker volume prune
دستوری است که برای حذف تمام حجم های استفاده نشده در Docker استفاده می شود. هنگامی که یک کانتینر را حذف می کنید، حجم های مرتبط با آن روی سیستم شما باقی می ماند و فضای ارزشمند دیسک را اشغال می کند. را prune
دستور به شما کمک می کند تا با حذف تمام حجم هایی که توسط هیچ کانتینری استفاده نمی شود، آن فضا را آزاد کنید.
برای استفاده از docker volume prune
دستور، به سادگی عبارت زیر را در ترمینال خود تایپ کنید:
docker volume prune
با این کار تمام حجم های استفاده نشده روی سیستم شما حذف می شود. اگر میخواهید درخواست تأیید را دور بزنید، میتوانید از آن استفاده کنید -f
یا --force
پرچم، مانند این:
docker volume prune -f
به خاطر داشته باشید که این دستور تمام حجم های استفاده نشده را حذف می کند، بنابراین مطمئن شوید که هیچ داده مهمی در آن حجم ها ذخیره نشده است. اگر مطمئن نیستید که کدام ولوم ها استفاده می شوند و کدام ها نیستند، می توانید از آن استفاده کنید docker volume ls
دستور فهرست کردن تمام حجم های موجود در سیستم شما و وضعیت آنها.
قبل از اینکه به سراغ Docker Compose و برنامه های Docker چند کانتینری برویم، یک دستور دیگر وجود دارد که باید به سرعت به شما آموزش دهیم.
آخرین دستور docker exec
docker exec
دستوری است که برای اجرای یک فرمان در یک کانتینر در حال اجرا استفاده می شود. این به شما امکان می دهد یک دستور را در داخل یک ظرفی که قبلاً در حال اجرا است اجرا کنید.
نحو برای docker exec
به شرح زیر است:
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
-
OPTIONS
آرگومان های اختیاری هستند که می توانند برای پیکربندی رفتار the استفاده شوندdocker exec
فرمان برای مثال می توانید استفاده کنیدi
برای باز نگه داشتن STDIN حتی اگر متصل نباشد، یاt
برای تخصیص شبه TTY. -
CONTAINER
نام یا شناسه محفظه ای است که می خواهید دستوری را در آن اجرا کنید. -
COMMAND
دستوری است که می خواهید در کانتینر اجرا کنید. -
ARG
یک آرگومان اختیاری است که می تواند به دستور ارسال شود.
در اینجا مثالی از نحوه استفاده آورده شده است docker exec
:
docker exec -it my_container_name sh
با این کار پوسته ای در داخل کانتینری به نام باز می شود my_container_name
. -it
گزینهها برای تخصیص شبه TTY و باز نگه داشتن STDIN حتی در صورت عدم پیوست استفاده میشوند تا بتوانید با پوسته تعامل داشته باشید.
همچنین می توانید یک دستور را در کانتینر اجرا کنید، به عنوان مثال:
docker exec my_container_name ls -l
این کار را اجرا خواهد کرد ls -l
دستور داخل کانتینر به نام my_container_name
و خروجی را در ترمینال محلی خود نشان دهید.
در اینجا برخی از گزینه های رایج مورد استفاده برای docker exec
دستور:
-
d
: پس از اجرای دستور از کانتینر جدا شوید$ docker exec -d my_container touch /tmp/newfile
-
i
: STDIN را حتی اگر متصل نیست باز نگه دارید -
t
: یک شبه TTY اختصاص دهید -
u
: نام کاربری یا UID (فرمت: [:])$ docker exec -u root my_container command
-
e
: متغیرهای محیط را تنظیم کنید$ docker exec -e ENV_VAR=value my_container command
-
w
: پوشه کاری در داخل کانتینر$ docker exec -w /path/to/dir my_container command
-
-privileged
: به فرمان امتیازات گسترده بدهید$ docker exec --privileged my_container command
-
--env-file
: در یک فایل متغیرهای محیط را بخوانید.$ docker exec --env-file=./env-vars my_container command
💡 -t
از گزینه برای تخصیص شبه TTY استفاده می شود که به کاربران اجازه می دهد با کانتینر به گونه ای تعامل داشته باشند که گویی در یک ترمینال نشسته اند. را -i
گزینه ای برای باز نگه داشتن STDIN استفاده می شود، که کاربر را قادر می سازد ورودی را به ظرف ارائه دهد. ترکیبی از -t
و -i
به کاربران اجازه می دهد تا یک پوسته تعاملی را در داخل یک ظرف اجرا کنند.
این پایان مقاله امروز است. در مورد بعدی، برنامه های کاربردی چند کانتینری و دستورات Docker Compose را بررسی خواهیم کرد. اگر این مقاله برای شما مفید و جالب بود، لطفاً آن را با دوستان و همکاران خود به اشتراک بگذارید و فراموش نکنید که آن را برای مراجعات بعدی ذخیره کنید. شما را در مقاله بعدی می بینیم! 😇