使用Docker创建慢django模型实例

时间:2017-02-09 12:06:32

标签: python django postgresql docker

我有一些模型的django应用程序。我有manage.py命令创建n模型并将其保存到db。它在我的主机上运行速度不错。

但是如果我在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

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

2 个答案:

答案 0 :(得分: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会发生什么,可能是您丢失了这些数据。

答案 1 :(得分:1)

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

  1. 启动docker容器需要一些时间,因此如果为每个实例启动新容器,则可以加起来。
  2. 您使用什么存储驱动程序? Docker(通常)默认为设备映射器环回存储驱动程序,。这是some context。如果你经常启动这个容器,这将是痛苦的。
  3. 除了你的配置看起来合理,并没有明显的原因问题。因此,如果以上两点不适用于您,请添加一些额外的评论 - 比如您实际上添加这些模型实例的方式