مزایا و معایب Docker؛ چه زمانی از آن استفاده کنیم؟
استفاده از Docker در یک پروژهٔ نرمافزاری میتواند آمادهسازی محیط کار و انتشار نسخههای جدید را منظمتر کند؛ اما همین انتخاب ممکن است هزینهٔ نگهداری، نیاز به تخصص و پیچیدگی عیبیابی را افزایش دهد. بنابراین پرسش اصلی این نیست که Docker ابزار خوبی است یا بد؛ باید مشخص کنیم چه مسئلهای از پروژه را حل میکند و آیا منفعت آن از مسئولیتهایی که به تیم اضافه میکند بیشتر است.
برای یک تیم که چند برنامه با وابستگیهای متفاوت دارد، Docker ممکن است انتخاب ارزشمندی باشد. برای یک وبسایت کوچک با میزبانی مدیریتشده و تغییرات محدود، انتقال اجرای سایت به Docker شاید منفعت چندانی ایجاد نکند. حتی در یک پروژهٔ واحد هم میتوان از Docker در محیط توسعه استفاده کرد، بدون اینکه اجرای نسخهٔ نهایی الزاماً به همان روش انجام شود.
در این مقاله مزایا و معایب Docker را از زاویهٔ تصمیمگیری بررسی میکنیم: کجا به سرعت کار کمک میکند، چه اثری بر عملکرد برنامه دارد، در چه شرایطی استفاده از آن مناسب نیست و چه هزینههای پنهانی باید پیش از انتخاب دیده شوند.
Docker چه چیزی را برای پروژه ساده میکند و چه انتظاری نباید از آن داشت؟
Docker ابزاری برای بستهبندی و اجرای برنامه همراه با بخش مهمی از وابستگیهای آن است. به زبان ساده، تیم میتواند محیط لازم برای اجرای نرمافزار را مشخصتر و تکرارپذیرتر کند؛ بهجای اینکه هر بار همهٔ اجزای لازم را روی یک سیستم تازه بهصورت دستی آماده کند. بستهٔ آمادهٔ اجرا Image نام دارد و نمونهٔ در حال اجرای آن Container است. برای ارزیابی کاربرد Docker، همین شناخت اولیه کافی است.
این بستهبندی به کاهش اختلاف محیط توسعه، آزمایش و اجرای نهایی کمک میکند، اما همهٔ تفاوتها را از بین نمیبرد. تنظیمات، دادهها، منابع سختافزاری و سازگاری سیستمعامل همچنان بر نتیجه اثر دارند. Docker کیفیت کد را اصلاح نمیکند، جای آزمون نرمافزار را نمیگیرد و بهتنهایی امنیت، سرعت یا پایداری را تضمین نمیکند. ارزش آن زمانی روشن میشود که مشکل مشخصی در آمادهسازی و اجرای پروژه وجود داشته باشد.
در چه شرایطی استفاده از Docker برای یک پروژه ارزش بیشتری ایجاد میکند؟
وقتی راهاندازی محیط اعضای تیم به کاری تکراری و زمانبر تبدیل شده است
فرض کنید یک سامانهٔ فروش به PHP، PostgreSQL و Redis نیاز دارد و چند نفر روی آن کار میکنند. اگر هر عضو تیم نسخهها و تنظیمات را جداگانه آماده کند، بخشی از زمان همکاری صرف حل اختلاف محیطها میشود. ورود یک همکار تازه یا تعویض رایانه هم میتواند همین فرایند را تکرار کند. در چنین وضعیتی، داشتن محیط اجرایی تعریفشده به کاهش کارهای دستی و قابلپیشبینی شدن شروع کار کمک میکند.
این منفعت فقط به تیمهای بزرگ محدود نیست. توسعهدهندهای که همزمان چند پروژه با نیازهای متفاوت نگهداری میکند نیز ممکن است از آن سود ببرد. بااینحال، صرف استفاده از Docker کافی نیست؛ اگر راهاندازی همچنان به دانستههای شفاهی یک نفر وابسته باشد، مسئلهٔ اصلی حل نشده است. معیار مناسب، زمانی است که فرد تازه واقعاً تا اجرای صحیح پروژه صرف میکند.
وقتی پروژههای مختلف به نسخهها و سرویسهای متفاوت نیاز دارند
یک شرکت ممکن است نرمافزاری قدیمی و محصولی تازه داشته باشد که نسخههای متفاوتی از یک محیط اجرا میخواهند. نصب مستقیم همهٔ وابستگیها روی یک سیستم مشترک میتواند نگهداری را دشوار کند. Docker امکان تعریف محیط جداگانه برای هر پروژه را فراهم میکند و به تیم کمک میکند تغییر یک پروژه را با کنترل بیشتری انجام دهد.
این جداسازی به معنای رفع همهٔ خطرها نیست. برنامهها همچنان میتوانند برای منابع یک میزبان رقابت کنند و تنظیمات نامناسب ممکن است بر سرویسهای دیگر اثر بگذارد. بنابراین بهتر است منفعت Docker را «مدیریت روشنتر وابستگیها» بدانیم، نه حذف کامل وابستگی و تداخل.
وقتی انتشار نسخهها مکرر است و اجرای دستی احتمال خطا را افزایش میدهد
در محصولی که مرتب تغییر میکند، تفاوت میان خروجی آزمایششده و نسخهٔ منتشرشده میتواند دردسرساز شود. Docker به تیم امکان میدهد خروجی اجرایی مشخصی تولید کند و همان خروجی را در مراحل مختلف به کار ببرد. این قابلیت در کنار آزمون خودکار و فرایند انتشار منظم، میتواند ارزش بیشتری پیدا کند. مقالهٔ DevOps چیست؛ شغل یا فناوری؟ ارتباط این فعالیتها را در چرخهٔ تحویل نرمافزار توضیح میدهد.
اگر پروژه سالی چند بار تغییر میکند و انتشار فعلی ساده و قابلاعتماد است، منفعت این استانداردسازی ممکن است کمتر باشد. در مقابل، تیمی که مرتب با نصب ناقص وابستگیها یا تفاوت تنظیمات روبهرو میشود، دلیل روشنتری برای بررسی Docker دارد. تعداد سرویسها و اعضای تیم بهتنهایی تعیینکننده نیست؛ میزان اصطکاک واقعی در کار روزمره اهمیت بیشتری دارد.
Docker کجا سرعت کار را بیشتر میکند و چه ارتباطی با سرعت اجرای برنامه دارد؟
واژهٔ «سرعت» در بحث Docker چند معنای متفاوت دارد. آماده شدن محیط یک همکار، ساخت نسخهٔ قابل انتشار، شروع یک سرویس و پاسخ دادن برنامه به درخواست کاربر، چهار موضوع جداگانهاند. ممکن است Docker یکی را بهتر کند و بر دیگری اثری نداشته باشد. برای تصمیم درست باید مشخص کنیم کدام زمان را میخواهیم کاهش دهیم.
بیشترین منفعت قابل انتظار معمولاً در کاهش آمادهسازی دستی و تکرارپذیری اجرا دیده میشود. وقتی فرایند درست طراحی شده باشد، تیم برای ایجاد محیط آزمایشی یا اجرای نسخهٔ مشخص، مراحل مبهم کمتری دارد. استفادهٔ مجدد از بخشهای آمادهٔ فرایند ساخت هم میتواند زمان آمادهسازی نسخههای بعدی را کاهش دهد. البته نخستین دریافت فایلها و ساخت اولیه ممکن است زمانبر باشد و نتیجه به حجم خروجی و کیفیت ارتباط شبکه وابسته است.
اما انتقال برنامه به Docker بهخودیخود باعث سریعتر شدن پاسخ سایت نمیشود. اگر علت کندی، درخواست نامناسب از Database، پردازش سنگین یا ارتباط کند با یک سرویس بیرونی باشد، همان مسئله در محیط جدید هم باقی میماند. در مقابل، تنظیمات ذخیرهسازی، شبکه و محدودیت منابع میتوانند بر عملکرد اثر بگذارند؛ جهت و اندازهٔ این اثر را باید در همان پروژه اندازه گرفت.
همچنین تجربهٔ محیط توسعه الزاماً مشابه Server نهایی نیست. اجرای Linux Container در Docker Desktop روی Windows یا macOS به یک محیط Linux واسط متکی است و اشتراکگذاری تعداد زیادی فایل میان محیطها میتواند سربار داشته باشد. استفاده از شبیهسازی برای معماری پردازندهٔ متفاوت هم ممکن است بعضی کارهای سنگین را کند کند. نتیجهٔ یک آزمایش روی لپتاپ را نباید بدون بررسی به همهٔ محیطهای اجرا تعمیم داد.
برای ارزیابی، بهتر است یک عملیات واقعی مانند ثبت سفارش یا تهیهٔ گزارش انتخاب شود و زمان پاسخ، مصرف RAM و CPU در شرایط مشابه سنجیده شود. ادعای افزایش سرعت بدون مشخص کردن بار کاری و محیط اجرا، مبنای مناسبی برای انتخاب فناوری نیست.
چه زمانی استفاده از Docker ممکن است انتخاب مناسبی برای پروژه نباشد؟
وقتی نیاز پروژه با میزبانی مدیریتشده بهخوبی پاسخ داده میشود
برای یک وبسایت معرفی شرکت یا سایت محتوایی با نیازهای متعارف، میزبانی مدیریتشده میتواند بخش بزرگی از مسئولیت زیرساخت را پوشش دهد. اگر برای استفاده از Docker مجبور شوید از چنین خدمتی به یک Server با مدیریت شخصی منتقل شوید، باید هزینهٔ مسئولیت تازه را هم در نظر بگیرید: بهروزرسانی، پایش، امنیت، نگهداری داده و پاسخگویی هنگام اختلال.
این مسئله به معنی نامناسب بودن Docker برای WordPress نیست؛ تفاوت در مدل بهرهبرداری است. استفاده از آن برای محیط توسعه یا آزمایش یک سایت میتواند مفید باشد، درحالیکه اجرای نهایی همچنان روی میزبانی مدیریتشده انجام شود. برخی زیرساختها نیز اجرای Container را بهصورت مدیریتشده ارائه میکنند. باید خدمات واقعی هر گزینه را مقایسه کرد و مطمئن شد محیط مقصد امکان اجرای موردنیاز را دارد.
وقتی تیم فرصت یا توان نگهداری لایهٔ تازه را ندارد
اگر اجرای عادی نرمافزار برای تیم دشوار است، اضافه کردن Docker بدون آموزش و پشتیبانی ممکن است عیبیابی را سختتر کند. هنگام اختلال باید مشخص شود مشکل از برنامه است، از دسترسی به داده میآید، به منابع مربوط است یا در ارتباط سرویسها رخ داده است. شناخت این مرزها به زمان و تجربه نیاز دارد.
وجود یک فرد متخصص میتواند شروع کار را آسان کند، اما وابستگی کامل به او ریسک نگهداری ایجاد میکند. اگر با نبودن آن فرد هیچکس نتواند نسخهٔ جدید منتشر کند یا سرویس را بازیابی کند، بخشی از سادگی ظاهری پروژه بر دوش دانش فردی قرار گرفته است. در پروژهٔ کوچک، ممکن است راهکاری سادهتر و مستندتر نتیجهٔ بهتری بدهد.
وقتی محدودیت زیرساخت یا وابستگی قدیمی، منفعت انتقال را کاهش میدهد
نرمافزاری که به تجهیزات خاص، مجوز وابسته به دستگاه، مسیرهای ثابت یا یک محصول قدیمی متصل است، پیش از انتقال به بررسی نیاز دارد. قرار دادن برنامه در Container همهٔ این وابستگیها را رفع نمیکند. ممکن است بخشی از برنامه قابل انتقال باشد و بخش دیگری همچنان به محیط قبلی نیاز داشته باشد.
کمبود منابع نیز باید جدی گرفته شود. Docker منابع نامحدود ایجاد نمیکند و اجرای چند سرویس روی یک میزبان کوچک، بدون برنامهریزی ظرفیت، میتواند به رقابت برای RAM و CPU منجر شود. برای پروژهای با الزامات سخت عملکردی یا دسترسی ویژه به سختافزار، ابتدا باید امکان اجرا، پشتیبانی و عملکرد واقعی بررسی شود؛ نه اینکه صرفاً بر اساس محبوبیت ابزار تصمیم بگیریم.
هزینههای پنهان Docker چگونه در زمان، زیرساخت و نگهداری ظاهر میشوند؟
رایگان بودن یک ابزار با رایگان بودن استفادهٔ سازمانی از آن تفاوت دارد. هزینهٔ واقعی Docker مجموعهای از هزینههای آغاز کار، مخارج تکرارشونده و ریسکهای عملیاتی است. بعضی از این هزینهها با بزرگتر شدن پروژه کمتر به چشم میآیند، چون در مقابل زمان صرفهجوییشده قرار میگیرند؛ بعضی دیگر اگر از ابتدا دیده نشوند، پس از انتشار خود را نشان میدهند.
زمان آموزش، استانداردسازی و مستندسازی باید در بودجه دیده شود
تیم باید برای یادگیری، آمادهسازی محیط، بررسی روش انتشار و نوشتن راهنمای نگهداری وقت بگذارد. این زمان معمولاً در برآورد اولیهٔ «نصب Docker» دیده نمیشود. افزون بر آن، انتخابهای اولیه باید روی سیستم همکاران و محیط آزمایش بررسی شوند تا فرایند فقط روی دستگاه سازندهٔ آن کار نکند.
از نگاه مدیریتی، ساعت کاری متخصص بخشی از هزینهٔ پروژه است؛ حتی اگر پرداخت جداگانهای برای ابزار انجام نشود. باید پرسید این سرمایهگذاری کدام کار تکراری را کاهش میدهد و چند بار قرار است از نتیجهٔ آن استفاده شود. برای پروژهای کوتاه و کمتغییر، زمان بازگشت این سرمایه ممکن است از عمر پروژه بیشتر باشد.
فضای ذخیرهسازی، فرایند ساخت و انتقال فایل هزینهٔ مداوم دارند
نسخههای مختلف Image، فایلهای موقت ساخت و Logها میتوانند فضای قابلتوجهی مصرف کنند. اگر سیاست نگهداری و پاکسازی مشخص نباشد، افزایش مصرف دیسک ممکن است به اختلال برسد. همچنین ساخت مکرر نسخهها به منابع پردازشی نیاز دارد و انتقال خروجیها میان محیطها میتواند زمان و هزینهٔ شبکه مصرف کند.
این موارد برای همهٔ پروژهها پرهزینه نیستند، اما حذفشدنی هم نیستند. تیم باید بداند کدام نسخهها باید برای بازیابی نگه داشته شوند، چه چیزهایی قابل پاکسازی هستند و چه کسی مصرف منابع را بررسی میکند. صرف افزودن فضای بیشتر، جای سیاست نگهداری را نمیگیرد.
عیبیابی و بهروزرسانی پس از راهاندازی اولیه ادامه پیدا میکنند
برنامهای که امروز بهدرستی اجرا میشود، برای همیشه بینیاز از رسیدگی نیست. وابستگیهای داخل Image ممکن است به اصلاح امنیتی نیاز پیدا کنند و نسخهٔ اصلاحشده باید دوباره ساخته و آزمایش شود. استفاده از یک خروجی قدیمی برای حفظ ثبات، اگر بدون بازبینی ادامه یابد، میتواند بدهی نگهداری ایجاد کند.
در عیبیابی هم لایههای بیشتری برای بررسی وجود دارد. این لایهها با ابزار و مستندات مناسب قابل مدیریتاند، اما زمان پشتیبانی باید در برآورد باشد. خرید یک اشتراک یا استخدام اولیهٔ متخصص بهتنهایی جای تعیین مسئول نگهداری و فرایند رسیدگی به خطا را نمیگیرد.
هزینهٔ اشتراکها و سرویسهای وابسته باید جداگانه ارزیابی شود
Docker Engine، Docker Desktop و خدماتی مانند Docker Hub یک محصول با شرایط یکسان نیستند. استفاده از Docker Desktop بسته به نوع استفاده و شرایط سازمان ممکن است به اشتراک پولی نیاز داشته باشد. بنابراین نباید رایگان بودن بعضی اجزا را به همهٔ خدمات تعمیم داد. شرایط روز اشتراک باید هنگام تصمیمگیری بررسی شود.
نگهداری خصوصی Imageها، ساخت ابری یا خدمات جانبی هم ممکن است هزینه داشته باشد. سرویسهای عمومی دریافت Image نیز میتوانند محدودیت مصرف داشته باشند. وابستگی انتشار به دریافت فایل از بیرون، در صورت اختلال شبکه یا دسترسی، یک مسئلهٔ عملیاتی است و برای پروژهٔ حساس باید از پیش دربارهٔ آن تصمیم گرفت. این بخش از هزینه به شیوهٔ استفادهٔ تیم وابسته است و برای همهٔ پروژهها یکسان نیست.
هزینهٔ مهاجرت و فرصت کارهای عقبافتاده را نباید نادیده گرفت
انتقال پروژهٔ موجود ممکن است نیازمند بازبینی تنظیمات، تغییر فرایند انتشار، آزمون اتصال سرویسها و برنامهریزی جابهجایی داده باشد. در این مدت، بخشی از ظرفیت تیم از توسعهٔ قابلیتهای محصول به زیرساخت منتقل میشود. اگر انتقال مشکل مهمی را حل کند، این هزینه قابل توجیه است؛ اما باید در تصمیم دیده شود.
برای مثال، شرکتی که مشکل اصلی آن کندی گزارشگیری است، ممکن است از اصلاح Database منفعت بیشتری بگیرد تا تغییر شیوهٔ اجرای کل برنامه. هزینهٔ فرصت یعنی بررسی کنیم با همان زمان و بودجه، چه اقدام دیگری میتوانست اثر بیشتری بر مسئلهٔ واقعی کسبوکار بگذارد.
چگونه با یک محاسبهٔ ساده، منفعت Docker را با هزینهٔ آن مقایسه کنیم؟
بهجای تکیه بر عبارتهایی مانند «کاهش هزینهٔ زیرساخت»، میتوان یک برآورد اولیه تهیه کرد. ابتدا هزینهٔ آمادهسازی، آموزش و مهاجرت را جدا کنید. سپس زمان نگهداری ماهانه و هزینهٔ سرویسهای جانبی را در نظر بگیرید. در سمت منفعت، کاهش کارهای تکراری و خطاهای قابلاندازهگیری را ثبت کنید. هر منفعت احتمالی را نباید از ابتدا قطعی فرض کرد.
مثال زیر کاملاً فرضی است و بیانگر قیمت بازار یا نتیجهٔ تضمینشده نیست. فرض کنیم آمادهسازی و آموزش اولیه ۴۸ ساعت زمان تیم میخواهد. پس از استقرار، ماهانه ۱۰ ساعت از آمادهسازی و انتشار دستی کم میشود، اما ۴ ساعت نگهداری تازه ایجاد میشود. صرفهجویی خالص ماهانه ۶ ساعت خواهد بود و جبران ۴۸ ساعت اولیه، در این مدل ساده، حدود ۸ ماه طول میکشد.
این محاسبه فقط زمان را با فرض ارزش یکسان ساعتهای کاری مقایسه میکند. اگر کار به متخصص گرانتری نیاز داشته باشد یا هزینهٔ Server و اشتراک افزایش یابد، نتیجه تغییر میکند. از سوی دیگر، کاهش یک اختلال مهم ممکن است ارزش بیشتری از چند ساعت صرفهجویی داشته باشد؛ ولی این منفعت هم باید بر اساس سابقه و ریسک واقعی پروژه برآورد شود. هدف، رسیدن به عددی قابل بازبینی است.
نگهداری داده، امنیت و پایداری چه مسئولیتهایی برای تیم ایجاد میکنند؟
اجرای Database در Container نه ذاتاً اشتباه است و نه بهخودیخود ایمن. مسئلهٔ اصلی، محل نگهداری پایدار داده، روش Backup، امکان Restore و مسئولیت رسیدگی به خرابی است. دادهٔ مهم نباید فقط به لایهٔ قابلنوشتن یک Container وابسته باشد. داشتن Volume هم بهتنهایی به معنی داشتن نسخهٔ پشتیبان نیست؛ خرابی دیسک، حذف اشتباه یا مشکل داده همچنان ممکن است رخ دهد.
از نگاه تصمیمگیری، سؤال کاربردی این است: اگر میزبان از دسترس خارج شد، تیم با چه فرایندی و در چه زمانی سرویس و اطلاعات را بازیابی میکند؟ اجرای این سناریو در محیط آزمایشی، ارزش بیشتری از اطمینان شفاهی دارد. گاهی انتخاب یک Database مدیریتشده، در کنار اجرای برنامه با Docker، با توان تیم سازگارتر است.
در امنیت نیز جداسازی برنامهها میتواند مفید باشد، ولی Container مرز امنیتی مطلق نیست. مجوزهای بیشازحد، دسترسی نامناسب به میزبان، اطلاعات حساس در خروجی اجرایی و وابستگی آسیبپذیر میتوانند خطر ایجاد کنند. امنیت خود برنامه و سیستم میزبان هم همچنان اهمیت دارد. تیم باید مسئولیت این موارد را بشناسد و برای بررسی و بهروزرسانی آنها زمان داشته باشد.
همچنین اجرای چند Container روی یک Server به معنی تحمل خرابی آن Server نیست. اگر همهٔ اجزا روی یک میزبان باشند، خرابی میزبان میتواند همه را متوقف کند. Docker بهتنهایی انتشار بدون وقفه، افزایش ظرفیت خودکار یا بازیابی کامل از خرابی ایجاد نمیکند. نیاز به این قابلیتها باید جداگانه ارزیابی و متناسب با اهمیت سرویس تأمین شود.
برای پروژههای مختلف، تصمیم اولیه دربارهٔ Docker چگونه تغییر میکند؟
جدول زیر نقطهٔ شروع ارزیابی است و نسخهٔ ثابت برای همهٔ پروژهها محسوب نمیشود. منظور از «بررسی جدی» این است که احتمال وجود منفعت روشن بیشتر است؛ نتیجهٔ نهایی همچنان به هزینه، توان نگهداری و زیرساخت بستگی دارد.
| وضعیت پروژه | جهت اولیهٔ تصمیم | دلیل و شرط مهم |
|---|---|---|
| سایت محتوایی کوچک با میزبانی مدیریتشده | انتقال اجرای نهایی را ضروری ندانید | ابتدا منفعت مشخص را با مسئولیت تازهٔ نگهداری مقایسه کنید. |
| تیم با چند پروژه و وابستگیهای متفاوت | Docker را جدی بررسی کنید | کاهش اختلاف محیطها میتواند ارزشمند باشد؛ مستندسازی و پشتیبانی لازم است. |
| محصول با انتشارهای مکرر و خطاهای دستی | یک اجرای آزمایشی محدود انجام دهید | زمان انتشار و نرخ خطا را پیش و پس از تغییر اندازه بگیرید. |
| سامانهٔ قدیمی پایدار با وابستگی ناشناخته | مهاجرت را مرحلهای ارزیابی کنید | سازگاری، بازیابی داده و منفعت واقعی باید روشن شوند. |
| تیم بدون مسئول مشخص زیرساخت | ابتدا مدل نگهداری را تعیین کنید | راهاندازی موفق، جای توان رسیدگی به اختلال را نمیگیرد. |
| برنامه با حساسیت بالا به تأخیر یا ذخیرهسازی | تصمیم را به آزمون واقعی وابسته کنید | نام فناوری برای پیشبینی عملکرد کافی نیست. |
پیش از انتخاب نهایی Docker، چه چیزهایی باید در پروژه روشن شده باشند؟
نخست، مسئله را در یک جمله بیان کنید: «راهاندازی محیط همکاران طولانی است»، «نسخهها در محیط آزمایش و اجرا متفاوت رفتار میکنند» یا «انتشار دستی خطای تکراری دارد». اگر مسئله فقط این است که Docker رایج شده، هنوز دلیل کافی برای تغییر به دست نیامده است. سپس معیاری انتخاب کنید که به همان مسئله مربوط باشد؛ مانند زمان آمادهسازی، دفعات خطای انتشار یا ساعت نگهداری.
در گام بعد، راهکارهای جایگزین را هم بسنجید. شاید بهبود مستندات، خودکارسازی چند کار تکراری یا استفاده از یک خدمت مدیریتشده بخشی از نیاز را با هزینهٔ کمتر پاسخ دهد. ممکن است بهترین تصمیم، استفاده از Docker فقط برای محیط توسعه باشد. لازم نیست همهٔ اجزای پروژه همزمان تغییر کنند یا استفاده از Docker به ورود فوری به ابزارهای پیچیدهتری مانند Kubernetes منجر شود.
برای پروژهٔ موجود، یک بخش کمریسک را آزمایش کنید و پیش از انتقال کامل، روش انتشار، بازیابی و مسئولیت افراد را روشن کنید. بازگشت به نسخهٔ قبلی برنامه را نیز جدا از بازگردانی داده در نظر بگیرید؛ تغییر ساختار Database ممکن است بازگشت سادهٔ برنامه را دشوار کند. نتیجهٔ آزمایش باید نشان دهد کدام مشکل کمتر شده و چه هزینهٔ تازهای به وجود آمده است.
Docker زمانی انتخاب مناسبی است که منفعت مشخص و قابلسنجشی برای توسعه و اجرای پروژه ایجاد کند و تیم توان نگهداری آن را داشته باشد. برای بعضی پروژهها این منفعت قابلتوجه است؛ برای بعضی دیگر، ادامهٔ یک روش ساده و قابلاعتماد یا استفادهٔ محدود در محیط توسعه منطقیتر خواهد بود. انتخاب درست از شناخت نیاز، هزینهٔ کل و شرایط بهرهبرداری به دست میآید.
