Django и gunicorn в docker-compose потребляют много ресурсов (память - CPU)
У меня есть 3 контейнера, которые используют один и тот же код (WSGI - ASGI - Celery).
Все работает хорошо, но когда я проверяю статистику docker stats docker stats
я обнаружил, что WSGI потребляет гораздо больше ресурсов, чем остальные
Контейнеры развернуты на дроплете DigitalOcean без домена, только IP
docker-compose.yml
version: "3.7"
services:
db:
build:
context: .
dockerfile: ./docker/database/master/Dockerfile
restart: always
ports:
- ...
volumes:
- ...
environment:
- ...
replica:
build:
context: .
dockerfile: ./docker/database/replica/Dockerfile
restart: always
environment:
- ...
replica1:
build:
context: .
dockerfile: ./docker/database/replica/Dockerfile
restart: always
environment:
- ...
backend:
restart: unless-stopped
build:
context: .
dockerfile: ./docker/backend/Dockerfile_wsgi
entrypoint: /app/docker/backend/wsgi_entrypoint.sh
volumes:
- static_volume:/app/backend/server/django_static
- static_image:/app/backend/server/media
expose:
- 8000
environment:
- ...
depends_on:
- db
links:
- redis
- db
- cere
asgiserver:
restart: always
build:
context: .
dockerfile: ./docker/backend/Dockerfile
entrypoint: /app/docker/backend/asgi.entrypoint.sh
volumes:
- static_volume:/app/backend/server/django_static
- static_image:/app/backend/server/media
environment:
- ...
depends_on:
- db
links:
- redis
- db
- cere
expose:
- 9000
redis:
image: "redis:alpine"
restart: unless-stopped
command: redis-server /usr/local/etc/redis/redis.conf
volumes:
- ./docker/redis/redis.conf:/usr/local/etc/redis/redis.conf
expose:
- 6379
cere:
image: "redis:alpine"
restart: unless-stopped
command: redis-server /usr/local/etc/redis/redis.conf
volumes:
- ./docker/redis/redis_1.conf:/usr/local/etc/redis/redis.conf
expose:
- 6380
celery:
restart: unless-stopped
build:
context: .
dockerfile: ./docker/backend/Dockerfile_celery
entrypoint: /app/docker/backend/celery-entrypoint.sh
environment:
- ...
depends_on:
- asgiserver
- backend
- cere
links:
- db
- cere
nginx:
restart: unless-stopped
build:
context: .
dockerfile: ./docker/nginx/Dockerfile
ports:
- 80:80
- 443:443
volumes:
- static_volume:/app/backend/server/django_static/
- static_image:/app/backend/server/media
depends_on:
- asgiserver
- backend
volumes:
static_volume: {}
static_image: {}
postgres_data:
postgres_portal:
Docker_wsgi
FROM python:3.8-slim
WORKDIR /app
ADD ./webserver/requierments.txt /app/backend/
RUN pip3 install --upgrade pip
RUN python3 -m pip install --upgrade Pillow
RUN pip3 install -r backend/requierments.txt
RUN pip install gunicorn
ADD ./webserver /app/backend
ADD ./docker /app/docker
RUN chmod +x /app/docker/backend/wsgi_entrypoint.sh
wsgi_entrypoint.sh
#!/usr/bin/env bash
chmod +x wsgi_entrypoint.sh
until cd /app/backend/server
do
echo "Waiting for server volume..."
done
until python3 ./manage.py migrate
do
echo "Waiting for db to be ready..."
sleep 2
done
python3 ./manage.py collectstatic --noinput
gunicorn server.wsgi --bind 0.0.0.0:8000 --workers 4 --threads 4
.dockerignore настроен правильно, и время сборки довольно быстрое. И я все еще не знаю, почему Django потребляет все это