کانتینریسازی یک اپلیکیشن Nuxt تضمین میکند محیط توسعه، استیجینگ و تولید دقیقاً یکسان باشند و مشکل کلاسیک «روی سیستم من کار میکرد» از بین برود. کلید کار، نوشتن یک Dockerfile چندمرحلهای است؛ مرحلهٔ نخست با همهٔ وابستگیهای توسعه پروژه را بیلد میکند و مرحلهٔ دوم تنها خروجی نهایی را در یک ایمیج کوچک کنار میگذارد.
حجم ایمیج اهمیت مستقیم دارد؛ ایمیج سبکتر یعنی استقرار سریعتر، مصرف کمتر پهنای باند و سطح حملهٔ کوچکتر. ما بهجای ایمیج کامل node از نسخهٔ alpine استفاده میکنیم که دهها مگابایت کوچکتر است. خروجی Nitro در پوشهٔ output.public و output.server همان چیزی است که در مرحلهٔ نهایی کپی میشود و دیگر نیازی به node_modules توسعه نیست.
ترتیب دستورها در Dockerfile روی سرعت بیلد اثر میگذارد. ابتدا فقط package.json و فایل قفل را کپی و وابستگیها را نصب میکنیم، سپس کد را اضافه میکنیم. این کار باعث میشود تا وقتی وابستگیها تغییر نکرده، داکر از لایهٔ کششده استفاده کند و بیلدهای بعدی چند برابر سریعتر شوند. یک فایل dockerignore هم فایلهای غیرضروری را از کانتکست کنار میگذارد.
برای اجرا، اپلیکیشن باید روی متغیرهای محیطی HOST و PORT گوش بدهد و کاربر کانتینر را به یک کاربر غیرروت محدود کنیم تا امنیت بالا برود. افزودن یک healthcheck هم به ارکستراتور اجازه میدهد سلامت سرویس را بفهمد. با این الگو، همان ایمیج بدون تغییر از لپتاپ توسعهدهنده تا کلاستر تولید سفر میکند.