【问题标题】:How to separate docker and docker-compose from Django source folder如何从 Django 源文件夹中分离 docker 和 docker-compose
【发布时间】:2018-04-09 15:32:49
【问题描述】:

我正在尝试实现这个项目布局结构:

project root:
    - docker:
        - docker-compose.yml
        - Dockerfile-app
        - Dockerfile-mysql
    - src:
        - djangoproj
            - core
            - requirements.txt

docker-compose.yml

version: '3'

services:
  app:
    build:
      context: .
      dockerfile: Dockerfile-app
    command: /bin/bash -c "cd /var/www/app/src/djangoprj && pip install -r requirements-develop.tx  && python manage.py runserver 0.0.0.0:8000 || sleep 100000"
    container_name: website_app
    depends_on:
      - mysql
    links:
      - mysql
    ports:
      - '8000:8000'
    volumes:
      - ../:/var/www/app
    working_dir: /var/www/app/src/djangoproj

  mysql:
    build:
      context: .
      dockerfile: Dockerfile-mysql
    container_name: website_mysql
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: local
      MYSQL_USER: yoo
      MYSQL_PASSWORD: password
    ports:
      - '3306:3306'

这基本上可行,我唯一的问题是每次都构建需求。

我希望在 Dockerfile-app 中复制 requirements.txt 文件,然后运行我希望仅在 requirements.txt 更改时运行的 pip 安装。

在 Dockerfile-app 内部:

ADD src/djangoproj/requirements.txt /
RUN pip install -r requirements.txt

根据我在 docker 中的了解,我无法访问父文件夹。 我也在尝试做

app:
  build:
    context: ..

但是没有输出任何东西...所以我不知道这是怎么回事...

volume 何时添加到 docker 容器中?

我们将不胜感激任何帮助

【问题讨论】:

  • 不应该是ADD ../src/djangoproj/requirements.txt /

标签: python django docker docker-compose


【解决方案1】:

您与context: ../ 走在正确的轨道上。指定上下文后,您可以访问同一目录级别中的需求文件。

将 Dockerfile 更新为以下内容

ADD ./src/djangoproj/requirements.txt /

和 docker-compose.yml 指向 docker 目录中的 Dockerfile。这是必需的,因为构建上下文现在已向上移动到父目录。

version: '3'

services:
  app:
    build:
      context: ../
      dockerfile: docker/Dockerfile

我的文件布局如下:

$ tree .
.
├── docker
│   ├── Dockerfile
│   └── docker-compose.yml
└── src
    └── requirements.txt

2 directories, 3 files

【讨论】:

  • Thx Shoan,我实际上尝试过,但是当开始构建时没有输出,所以我停止了它。看起来它需要很多时间来开始构建,因为它可能会打包所有根目录,这非常大。你推荐一种更优雅的方法吗?
  • 是在执行docker-compose up后没有看到任何输出还是只是停留在某个步骤很长时间?
  • 当我执行 docker-compose build app 时,它会显示 Building app 超过 5 分钟,然后开始显示步骤,例如。 Step 1/7 : FROM python:latest。我想减少等待时间,恐怕这是因为上下文是根目录,里面有很多东西,比如节点模块和其他东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
相关资源
最近更新 更多