استقرار کانتینر

هاست Docker، با Dockerfile یا ایمیج آماده

Dockerfile در ریشه‌ی پروژه بر هر تشخیص دیگری مقدم است. سکو کلود آن را با BuildKit می‌سازد و دسترسی npm، pip، apt و apk را بدون تغییر فایل شما به میرور داخلی می‌برد.

تشخیص
Dockerfile در ریشه
بیلد
BuildKit با کش لایه‌ها
میرور
npm، pip، go، composer، apt، apk
پورت
همان --port اپ
لوگوی Docker

Dockerfile شما، زیرساخت ما

اگر Dockerfile در ریشه باشد، بیلدپک کنار می‌رود و دقیقاً همان فایل ساخته می‌شود. چون محیط بیلد به مخازن عمومی اینترنت دسترسی ندارد، دستورهای npm، pip، go، composer، apt و apk به‌صورت شفاف به میرور داخلی سکو کلود هدایت می‌شوند؛ اگر خودتان رجیستری تعریف کرده‌اید، دست نمی‌خورد.

اگر ایمیج را جای دیگری ساخته‌اید، بدون بیلد مستقرش کنید: sakoocloud deploy --image با نام کاربری و رمز رجیستری خصوصی. در هر دو حالت، EXPOSE و پورت اپ باید یکی باشند.

مناسب برای

  • زبان‌ها و نسخه‌هایی که بیلدپک ندارد
  • ایمیج آماده از CI خودتان
  • سرویس با وابستگی سیستمی خاص
  • مهاجرت از docker-compose

مسیر بیلد Docker

  1. تشخیص

    Dockerfile در ریشه از همه‌ی تشخیص‌ها مقدم است.

    Dockerfile
  2. پیش‌پردازش

    مدیرهای بسته به میرور داخلی هدایت می‌شوند، مگر نشانه‌ی no-mirror در فایل باشد.

    # sakoocloud:no-mirror
  3. بیلد

    BuildKit فایل را با کش لایه‌ها می‌سازد.

    docker build
  4. اجرا

    کانتینر اجرا و ترافیک به پورت اپ هدایت می‌شود.

    EXPOSE 3000

خروجی یک استقرار واقعی

sakoocloud deploy
sakoocloud deploy
✔ Packed 2.3MB
✔ Source uploaded
ℹ Build started · dep_7k2m9q
#4 [1/5] FROM node:22-alpine
#6 [2/5] RUN apk add --no-cache tini
#8 [3/5] RUN npm ci
#12 exporting to image
✔ Deployed — app is running.
→ https://my-service.sakooapps.ir

Dockerfile پیشنهادی

چندمرحله‌ای، با کاربر غیر root و پورتی که با اپ یکی است.

FROM node:22-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

FROM node:22-alpine
WORKDIR /app
COPY --from=build /app/dist ./dist
COPY --from=build /app/node_modules ./node_modules
USER node
EXPOSE 3000
CMD ["node", "dist/index.js"]

تنظیمات

دو راه استقرار

روشدستور
بیلد از Dockerfilesakoocloud deploy
ایمیج آمادهsakoocloud deploy --image <tag>
ایمیج خصوصی--registry-user و --registry-pass

میرور خودکار

فقط میزبان‌های عمومی شناخته‌شده بازنویسی می‌شوند؛ مخزن اختصاصی شما دست نمی‌خورد.

مدیر بستهمخزن عمومی
npmregistry.npmjs.org
pippypi.org
aptdeb.debian.org
apkdl-cdn.alpinelinux.org

همراه هر استقرار

این‌ها به رانتایم بستگی ندارند و برای هر اپ روی سکو کلود فعال‌اند. بعضی، مثل مقیاس‌دهی خودکار و کران‌جاب، به پلن بستگی دارند.

خطاهای رایج

کانتینر بالا نمی‌آید

علتپورت EXPOSE و پورتی که برنامه رویش گوش می‌دهد با پورت اپ یکی نیست.

راه‌حلهر سه را یکی کنید و روی 0.0.0.0 گوش بدهید.

بسته‌ی خصوصی در بیلد دانلود نمی‌شود

علتمحیط بیلد به سکرت‌ها دسترسی ندارد.

راه‌حلبسته را داخل مخزن vendor کنید یا ایمیج را جای دیگری بسازید و با --image مستقر کنید.

دستور apt یا pip با میرور مشکل دارد

علتپیکربندی خودتان با بازنویسی خودکار تداخل دارد.

راه‌حلخط # sakoocloud:no-mirror را به Dockerfile اضافه کنید و دسترسی بسته‌ها را خودتان تنظیم کنید.

پاد با OOMKilled متوقف می‌شود

علتمصرف حافظه از سقف منابع اپ بیشتر شده است.

راه‌حلحافظه را بیشتر کنید یا مصرف برنامه را پایین بیاورید.

terminal
sakoocloud apps scale --memory 1Gi

پرسش‌های متداول

docker-compose پشتیبانی می‌شود؟

هر سرویس compose را یک اپ جدا کنید و دیتابیس‌ها را از سرویس‌های مدیریت‌شده بسازید؛ اتصال با لینک دیتابیس انجام می‌شود.

می‌توانم از Docker Hub ایمیج بکشم؟

بله. ایمیج‌های پایه از میرور images.sakoocloud.ir دریافت می‌شوند.

کانتینر با root اجرا شود؟

توصیه نمی‌شود. در Dockerfile با USER یک کاربر بدون دسترسی root تعریف کنید.

جزئیات بیشتر در راهنمای Docker در مستندات و مرجع CLI.

سریع‌ترین مسیر از کد تا انتشار.

ابتدا ابزار خط فرمان را نصب کنید، سپس همین‌جا امتحان کنید. (بنویسید، یا یکی از پیشنهادهای پایین ترمینال را بزنید)

~/projects/my-app
امتحان کنید