docker

پلتفرم Docker

(Docker Platform)

مشخص کردن مسیر Dockerfile

گاهی اوقات ممکن است بخواهید چندین پروژه که در یکmonorepoقرار دارند رو باDockerfileهای مختلفی دیپلوی کنید و یا از نام و مسیر دلخواه برایDockerfileتون استفاده کنید. برای این کار می‌تونید از یکی از دو روش زیر استفاده کنید:

۱) یک فایل با نامliara.jsonدر ریشه‌ی پروژه‌تون ایجاد کرده وقطعه‌کد زیر رو درون این فایل قرار بدید:

{
  "platform": "docker",
  "build": {
     "dockerfile": "path/to/Dockerfile"
  }
}

۲) در دستورliara deployمسیرDockerfileرو با پارامتر--dockerfileمشخص کنید.

liara deploy --platform=docker --dockerfile="path/to/Dockerfile"

توضیحات و نکات تکمیلی

پیکربندی Supercronic

گاهی اوقات ممکن است بخواهید کار خاصی در زمان خاص و یا به‌صورت دوره‌ای اجرا شود. برای این کار در پلتفرم Docker می‌توانید از Supercronic استفاده کنید.

برای استفاده از Supercronic در لیارا تنها کافیست قطعه‌کد زیر را به Dockerfile پروژه‌ی خود اضافه کنید:

COPY --from=liaracloud/supercronic:v0.1.11 \
     /usr/local/bin/supercronic /usr/local/bin/supercronic

همچنین باید فایل crontab را در مسیر اصلی پروژه‌ی خود ایجاد کرده و به‌شکل زیر Jobهای مورد نظر خود را اضافه کنید:

* * * * * cd $ROOT && echo $(date) >> /tmp/time.txt

درنهایت باید یک فایل با نام entrypoint.sh در مسیر اصلی پروژه ایجاد کنید و به‌شکل زیر supercronic و برنامه‌تان را اجرا کنید:

#!/bin/bash

supercronic /usr/src/app/crontab &

daphne -b 0.0.0.0 -p 80 routeprinter:app

محدودیت‌ها

استفاده از VOLUMEدر Dockerfile

فایل سیستم برنامه‌های لیارا Read-Only است و شما نمی‌توانید از دستورVOLUMEدر Dockerfile استفاده کنید و به‌جای آن باید از قابلیت «دیسک‌ها» استفاده کنید. لازم است که این عبارت را قبل از استقرار حذف کنید. چنانچه از Image‌های DockerHub هم استفاده کنید، باید نظیر به‌نظیرVOLUMEهایی که در آن Image تعریف شده، دیسک بسازید و دیسک را در همان مسیر mount کنید.
برای مثال، Dockerfile زیر را در نظر بگیرید:

FROM ubuntu

RUN echo hello

VOLUME /path/to/data
این فایل برای این‌که بتواند در لیارا مستقر شود، باید خطی که در آنVOLUMEتعریف شده، حذف شود.

استفاده از EXPOSEدر Dockerfile

لیارا از این قسمت از Dockerfile شما صرف‌نظر می‌کند. شما باید حتما پورتی که مدنظرتان است را با پارامتر--portتنظیم کنید. تنها به‌پورت‌های HTTP می‌توانید از خارج از شبکه‌ی لیارا متصل شوید. برای مثال اگر یک سرویس مانند RabbitMQ را مستقر کنید، به‌این سرویس تنها در شبکه‌ی خصوصی لیارا دسترسی خواهید داشت.

;