Python 使用Docker缓慢创建django模型实例
我有一些模型的django应用程序。我有Python 使用Docker缓慢创建django模型实例,python,django,postgresql,docker,Python,Django,Postgresql,Docker,我有一些模型的django应用程序。我有manage.py命令,该命令创建n模型并将其保存到数据库中。它在我的主机上以相当快的速度运行 但如果我在docker中运行它,它运行得非常慢,在40-50秒内创建并保存了一个实例。我想我在Docker的工作原理上遗漏了一些东西,有人能指出为什么性能很低,我能用它做些什么吗 docker compose.yml: version: '2' services: db: restart: always image: "postgres:9
manage.py
命令,该命令创建n
模型并将其保存到数据库中。它在我的主机上以相当快的速度运行
但如果我在docker中运行它,它运行得非常慢,在40-50秒内创建并保存了一个实例。我想我在Docker的工作原理上遗漏了一些东西,有人能指出为什么性能很低,我能用它做些什么吗
docker compose.yml:
version: '2'
services:
db:
restart: always
image: "postgres:9.6"
ports:
- "5432:5432"
volumes:
- /usr/local/var/postgres:/var/lib/postgresql
environment:
- POSTGRES_PASSWORD=postgres
- POSTGRES_DB=my_db
- POSTGRES_USER=postgres
web:
build: .
command: bash -c "./wait-for-it.sh db:5432 --timeout=15; python manage.py migrate; python manage.py runserver 0.0.0.0:8000; python manage.py mock 5"
ports:
- "8000:8000"
expose:
- "8000"
depends_on:
- db
FROM python:3.6
ENV PYTHONBUFFERED 1
ADD . .
WORKDIR .
RUN pip install -r requirements.txt
RUN chmod +x wait-for-it.sh
用于web服务的dockerfile:
version: '2'
services:
db:
restart: always
image: "postgres:9.6"
ports:
- "5432:5432"
volumes:
- /usr/local/var/postgres:/var/lib/postgresql
environment:
- POSTGRES_PASSWORD=postgres
- POSTGRES_DB=my_db
- POSTGRES_USER=postgres
web:
build: .
command: bash -c "./wait-for-it.sh db:5432 --timeout=15; python manage.py migrate; python manage.py runserver 0.0.0.0:8000; python manage.py mock 5"
ports:
- "8000:8000"
expose:
- "8000"
depends_on:
- db
FROM python:3.6
ENV PYTHONBUFFERED 1
ADD . .
WORKDIR .
RUN pip install -r requirements.txt
RUN chmod +x wait-for-it.sh
有两件事可能是原因:
除此之外,您的配置看起来很合理,并且没有明显的问题原因。因此,如果以上两点不适用于您,请添加一些额外的注释——比如您实际如何添加这些模型实例 这里的问题很可能是在Mac上使用的卷
/usr/local/var/postgres:/var/lib/postgresql
。据我所知,Docker for Mac解决方案使用文件共享来实现主机卷,这比本机文件系统访问慢得多
一种可能的解决方法是使用docker卷而不是主机卷。以下是一个例子:
version: '2'
volumes:
postgres_data:
services:
db:
restart: always
image: "postgres:9.6"
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql
environment:
- POSTGRES_PASSWORD=postgres
- POSTGRES_DB=my_db
- POSTGRES_USER=postgres
web:
build: .
command: bash -c "./wait-for-it.sh db:5432 --timeout=15; python manage.py migrate; python manage.py runserver 0.0.0.0:8000; python manage.py mock 5"
ports:
- "8000:8000"
expose:
- "8000"
depends_on:
- db
请注意,这可能会使postgres数据的管理复杂化,因为您不能简单地从Mac访问数据。您只能使用docker CLI或容器来访问、修改和备份此数据。另外,我不确定如果你从Mac上卸载Docker会发生什么,可能是因为你丢失了这些数据。你是在服务器/VM上这样做的吗?试图在没有docker的情况下在同一台机器上完成这项工作?@lorenzvth7使用最大的计算资源在本地机器(mac)上完成这项工作。在没有docker的情况下执行此操作要快得多。卸载docker不会丢失数据。我有一套专为postgres+django设计的卷集,非常完美