مشکل دادههای ناپدیدشونده
فایلسیستم یک کانتینر بهطور پیشفرض موقتی است؛ به محض حذف کانتینر با docker rm، تمام دادههای نوشتهشده داخل آن هم از بین میروند. این رفتار برای برنامههای بدونحالت (stateless) مشکلی ندارد، اما برای پایگاهداده یا هر برنامهای که باید داده را نگه دارد، فاجعهبار است.
Volume راهحل رسمی داکر برای ماندگاری داده است؛ یک فضای ذخیرهسازی است که مستقل از چرخهی حیات کانتینر مدیریت میشود و توسط خود داکر نگهداری میشود:
docker volume create pgdata
docker run -d --name db -v pgdata:/var/lib/postgresql/data postgres:16
در این دستور، پوشهی /var/lib/postgresql/data داخل کانتینر به volume به نام pgdata متصل میشود. حتی اگر کانتینر db حذف شود، میتوانید یک کانتینر جدید بسازید و همان volume را دوباره متصل کنید تا دادهها دستنخورده باقی بمانند.
Bind Mount برای توسعه
گزینهی دیگر، Bind Mount است که یک پوشهی مشخص از سیستم میزبان را مستقیماً به کانتینر متصل میکند؛ این روش برای توسعه بسیار مفید است چون تغییرات کد بلافاصله داخل کانتینر منعکس میشود:
docker run -v $(pwd):/app -it my-app:1.0 bash
فهرست volumeهای موجود را با docker volume ls و حذف یک volume بلااستفاده را با docker volume rm pgdata انجام میدهید. انتخاب درست بین Volume و Bind Mount، بسته به اینکه در حال توسعه هستید یا production، اهمیت زیادی در معماری کانتینری شما دارد.