2017-02-09 65 views
10

我有一些模型的Django应用程序。我有manage.py命令创建n模型并将其保存到数据库。它在我的主机上以合适的速度运行。使用Docker创建缓慢的django模型实例

但是,如果我在docker中运行它,它运行速度非常慢,创建1个实例并在40-50秒内保存。我想我错过了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 

dockerfile用于Web服务

FROM python:3.6 
ENV PYTHONBUFFERED 1 
ADD . . 
WORKDIR . 
RUN pip install -r requirements.txt 
RUN chmod +x wait-for-it.sh 
+0

你在服务器/虚拟机上这样做吗?试图在没有码头的同一台机器上完成它? – lvthillo

+0

@ lorenzvth7在本地计算机(mac)上使用最大计算资源执行此操作。这样做没有码头是快速的。 – IgorNikolaev

回答

1

两件事情,可以是一个可能的原因:

  1. 启动码头集装箱需要一些时间,所以如果你明星为每个实例添加新的容器,这可以加起来。
  2. 你使用什么存储驱动程序? Docker(通常)默认为设备映射器环回存储驱动程序,即slow。这里是some context。如果你经常启动这个容器,这将是痛苦的。

除此之外,您的配置看起来很明智,并且没有明显的原因问题。所以如果上述两点不适用于你,请添加一些额外的评论---比如你如何实际添加这些这些模型实例

5

这里的问题很可能是您在Mac上使用它的卷/usr/local/var/postgres:/var/lib/postgresql。据我了解Docker for Mac解决方案,它使用文件共享来实现主机卷,这比原生文件系统访问慢得多。

可能的解决方法是使用泊坞窗卷代替主卷。这里有一个例子:

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会发生什么情况,可能是因为您丢失了这些数据。

+0

如果卸载泊坞窗,则不会丢失数据。我有一个为postgres + django设置的volumen,并且完美 – chachan

相关问题