برنامه نویسی

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

حجم های Docker راهی برای حفظ داده ها در خارج از طول عمر یک کانتینر است. آنها برای به اشتراک گذاشتن داده ها بین کانتینرها یا بین کانتینر و سیستم میزبان استفاده می شوند. حجم های Docker را می توان با استفاده از docker volumeفرمان

یک دقیقه صبر کنید، چرا به حجم نیاز داریم؟

https://media2.giphy.com/media/TwiCDH821fV3asXa6h/giphy.gif?cid=7941fdc66yxhl7ithht6nvnlx71zy53pmi71f83exq7e8ues&ep=v1_gifs_search&rid=ct=giphyg.

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

انواع مختلف حجم

Docker انواع مختلفی از حجم را برای مدیریت داده های پایدار برای کانتینرها فراهم می کند. انواع مختلف حجم در ظرف داکر عبارتند از:

  1. جلدهای نامگذاری شده: هنگام استفاده از حجم های نامگذاری شده در داکر، داده ها در دستگاه میزبان داکر در دایرکتوری مدیریت شده توسط داکر ذخیره می شوند. هنگامی که نیاز دارید داده های تولید شده توسط یک کانتینر را حفظ کنید یا داده ها را بین چندین کانتینر به اشتراک بگذارید، از حجم های نامگذاری شده استفاده کنید. به عنوان مثال، می‌توانید از یک حجم نام‌گذاری شده برای ذخیره داده‌های پایگاه داده استفاده کنید تا هنگام حذف یا راه‌اندازی مجدد کانتینر از بین نرود.
  2. Host Bind Mounts: Host bind mount راهی برای نصب دایرکتوری انتخابی شما از ماشین میزبان به کانتینر است. می‌توانید از bind mount برای سوار کردن دایرکتوری محلی حاوی فایل‌های پیکربندی در یک ظرف برای سفارشی کردن رفتار آن استفاده کنید. فرض کنید می خواهید فایل پیکربندی NGINX را که در داخل کانتینر قرار دارد سفارشی کنید. می‌توانید از یک Host bind mount برای لغو فایل پیکربندی کانتینر با فایل میزبان استفاده کنید.
  3. جلدهای ناشناس: حجم‌های ناشناس زمانی توسط داکر ایجاد می‌شوند که یک کانتینر بدون تعیین حجم نام‌گذاری شده راه‌اندازی شود. مجلدات ناشناس نامگذاری نشده اند، بنابراین نمی توان از آنها دوباره استفاده کرد. هنگامی که ظرف برداشته می شود، حذف می شوند.
  4. Tmpfs Mounts: مانت های Tmpfs در حافظه کانتینر نصب می شوند، نه در سیستم فایل میزبان. آنها حجم های موقتی هستند و فقط زمانی وجود دارند که کانتینر در حال کار است. هنگامی که کانتینر متوقف می شود، مانت tmpfs به همراه تمام داده های ذخیره شده در داخل آن حذف می شود.

هر نوع ولوم مورد استفاده خاص خود را دارد و انتخاب نوع مناسب حجم به نیاز برنامه بستگی دارد.

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

برخی رایج است docker volume دستورات عبارتند از:

  • docker volume create: یک حجم جدید با نام یا ناشناس ایجاد می کند
  • docker volume ls: تمام جلدهای موجود را فهرست می کند
  • docker volume inspect: اطلاعات دقیق در مورد یک حجم خاص را نمایش می دهد
  • docker volume rm: حجم خاصی را حذف می کند
  • docker volume prune: تمام حجم های استفاده نشده را حذف می کند

docker volume create

https://media3.giphy.com/media/v9qXDRYrzhLmIPvtBs/giphy.gif?cid=7941fdc6kc5prgzgolx8imak6r7oqgdj5btdcln86adx2dqn&ep=v1_gifs_search&rid=ct=giphyg.

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

https://media0.giphy.com/media/0tvLwQiNjT3G6bnTzl/giphy.gif?cid=7941fdc6r5fnaifxphfjxvrg1i2ali92s55m7w8hhlms1vqp&ep=v1_gifs_search&rid=4ct=giphyg.

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

https://media0.giphy.com/media/FJznB4jaJLckw/giphy.gif?cid=7941fdc6u8rgskd9zhehvc1pr1svxe9znxy6vm07fvg4w1fu&ep=v1_gifs_search&rid=giphy.gif&ct=g

را 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

https://media4.giphy.com/media/xT5LMDzs9xYtHXeItG/giphy.gif?cid=7941fdc6s6glvexf79ilcbydp8mc1z28zh6g52qfsv0xot7x&ep=v1_gifs_search&gif=

را docker volume rm دستور برای حذف یک یا چند جلد Docker که دیگر مورد نیاز نیستند استفاده می شود. سینتکس اصلی دستور به شرح زیر است:

docker volume rm VOLUME [VOLUME...]
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اینجا، VOLUME به نام یا شناسه جلد(های) حذف شده اشاره دارد.

به عنوان مثال، برای حذف یک جلد به نام mydata، می توان از دستور زیر استفاده کرد:

docker volume rm mydata
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

برای حذف چندین جلد به طور همزمان، کافی است نام یا شناسه آنها را با فاصله از هم جدا کنید:

docker volume rm mydata1 mydata2 mydata3
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

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

علاوه بر این، اگر یک حجم در حال حاضر توسط یک ظرف استفاده می شود، نمی توان آن را تا زمانی که اتصال آن را از ظرف جدا کرد، حذف کرد. بنابراین، ممکن است لازم باشد قبل از اقدام به برداشتن هر ظروفی که در حال حاضر از ولوم استفاده می‌کنند، متوقف و حذف شود.

docker volume prune

https://media1.giphy.com/media/YoWOIjnXT1NKIbFP9H/giphy.gif?cid=7941fdc6r0q37jwrjrftkcsxwkngendo6vblm6cpgxp7b9m5&ep=v1_gifs_search&rid=ct=giphy.

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

https://media3.giphy.com/media/yRXnlNNC9U7FC/giphy.gif?cid=7941fdc6q2gw0u58s3j8rgosko5uizgma2ijc8neaogg6lka&ep=v1_gifs_search&rid=giphy.gif&ct=g

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 را بررسی خواهیم کرد. اگر این مقاله برای شما مفید و جالب بود، لطفاً آن را با دوستان و همکاران خود به اشتراک بگذارید و فراموش نکنید که آن را برای مراجعات بعدی ذخیره کنید. شما را در مقاله بعدی می بینیم! 😇

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

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

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

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