docker compose for a Flask app(plus arangodb, celery_worker, celery_beat)
version: '3'
services:
web:
build: .
ports:
- "8000:8000"
links:
- arangodb:myflask-arangodb
depends_on:
- arangodb
celery_worker:
build: .
links:
- arangodb:myflask-arangodb
command: "celery -A myflask.application.celery worker -l INFO"
celery_beat:
build: .
command: "celery -A myflask.application.celery beat -l INFO -s /var/lib/celerybeat/schedule.db"
volumes:
- "/var/lib/myflask/celery/beat:/var/lib/celerybeat:rw"
arangodb:
image: "arangodb"
ports:
- "8529:8529"
environment:
- ARANGO_NO_AUTH=True
volumes:
- "/var/lib/myflask/arangodb3:/var/lib/arangodb3:rw"
FROM python:2
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
python-dev \
libpq-dev \
libpcre3-dev \
git \
openssh-client
# for pip install from git repos.
COPY ./myflask-deploy.pem /root/.ssh/id_rsa
RUN chmod 400 /root/.ssh/id_rsa
RUN /bin/echo -e "Host *\n\tStrictHostKeyChecking no" > /root/.ssh/config
COPY ./requirements.txt /tmp/myflask.requirements.txt
RUN pip install --no-cache-dir -r /tmp/myflask.requirements.txt
# Web app source code
COPY . /usr/share/myflask
WORKDIR /usr/share/myflask
ENV APP_ENV=prod
ENV FLASK_APP=myflask/application.py
CMD [ \
"gunicorn", \
"--bind=0.0.0.0:8000", \
"--worker-class=gthread", \
"--workers=5", \
"--threads=6", \
"--access-logfile=-", \
"myflask.application:app" \
]