ارائه دهنده خدمات ابری PaaS و DBaaS

docker

برنامه‌های Docker

(Docker Apps)

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

پیکربندی Supercronic

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

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

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

برای مثال برای راه‌اندازی یک ASGI server می‌توانید به‌شکل زیر عمل کنید:

FROM python:3.9

ENV ROOT=/usr/src/app

WORKDIR $ROOT

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

COPY ./requirements.txt ./requirements.txt

RUN python -m pip install --upgrade pip \
    && pip install --no-cache-dir --upgrade -r ./requirements.txt \
    && python -m pip install daphne

COPY . .

RUN chmod +x /usr/src/app/entrypoint.sh

ENTRYPOINT [ "/usr/src/app/entrypoint.sh" ]

سپس می‌توانید یک فایل با نام 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 را مستقر کنید، به‌این سرویس تنها در شبکه‌ی خصوصی لیارا دسترسی خواهید داشت.